次の方法で共有


開発中にアプリケーション シークレットを安全に格納する

ヒント

このコンテンツは、.NET Docs で入手できる、またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できる、コンテナー化された .NET アプリケーションの電子ブックである .NET マイクロサービス アーキテクチャからの抜粋です。

コンテナー化された .NET アプリケーションの .NET マイクロサービス アーキテクチャの電子ブックの表紙サムネイル。

保護されたリソースやその他のサービスに接続するには、ASP.NET Core アプリケーションでは通常、接続文字列、パスワード、または機密情報を含むその他の資格情報を使用する必要があります。 これらの機密性の高い情報は シークレットと呼ばれます。 ソース コードにシークレットを含めず、ソース管理にシークレットを格納しないようにすることをお勧めします。 代わりに、ASP.NET Core 構成モデルを使用して、より安全な場所からシークレットを読み取る必要があります。

開発リソースとステージング リソースにアクセスするためのシークレットは、運用リソースへのアクセスに使用されるシークレットと分離する必要があります。これは、異なる個人がそれらのシークレット のセットにアクセスする必要があるためです。 開発中に使用されるシークレットを格納するには、一般的な方法として、環境変数にシークレットを格納するか、ASP.NET Core Secret Manager ツールを使用します。 運用環境でより安全なストレージを実現するために、マイクロサービスは Azure Key Vault にシークレットを格納できます。

環境変数にシークレットを格納する

シークレットをソース コードから除外する方法の 1 つは、開発者が開発用コンピューターで文字列ベースのシークレットを 環境変数 として設定することです。 環境変数を使用して階層名を持つシークレット (構成セクションに入れ子になった名前など) を格納する場合は、コロン (:)で区切られたセクションの完全な階層を含むように変数に名前を付ける必要があります。

たとえば、環境変数 Logging:LogLevel:DefaultDebug 値に設定すると、次の JSON ファイルの構成値と同じになります。

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug"
        }
    }
}

環境変数からこれらの値にアクセスするには、AddEnvironmentVariables オブジェクトを構築するときに、アプリケーションがそのConfigurationBuilderIConfigurationRootを呼び出す必要があります。

環境変数は一般的にプレーン テキストとして格納されるため、環境変数を含むマシンまたはプロセスが侵害された場合、環境変数の値が表示されます。

ASP.NET Core Secret Manager を使用してシークレットを格納する

ASP.NET Core Secret Manager ツールは、 開発中にシークレットをソース コードから除外する別の方法を提供します。 Secret Manager ツールを使用するには、プロジェクト ファイルに パッケージ Microsoft.Extensions.Configuration.UserSecrets をインストールします。 その依存関係が存在し、復元されたら、 dotnet user-secrets コマンドを使用して、コマンド ラインからシークレットの値を設定できます。 これらのシークレットは、ソース コードから離れて、ユーザーのプロファイル ディレクトリの JSON ファイルに格納されます (詳細は OS によって異なります)。

Secret Manager ツールによって設定されたシークレットは、シークレットを使用しているプロジェクトの UserSecretsId プロパティによって編成されます。 そのため、次のスニペットに示すように、プロジェクト ファイルで UserSecretsId プロパティを設定する必要があります。 既定値は Visual Studio によって割り当てられた GUID ですが、実際の文字列は、コンピューター内で一意である限り重要ではありません。

<PropertyGroup>
    <UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>

アプリケーションで Secret Manager と共に格納されたシークレットを使用するには、AddUserSecrets<T> インスタンスでConfigurationBuilderを呼び出して、アプリケーションのシークレットを構成に含めます。 ジェネリック パラメーター T は、UserSecretId が適用されたアセンブリの型である必要があります。 通常、 AddUserSecrets<Startup> の使用は問題ありません。

AddUserSecrets<Startup>()は、Program.csで CreateDefaultBuilder メソッドを使用する場合の開発環境の既定のオプションに含まれています。