実稼働時にシークレットを保護するために Azure Key Vault を使用する
ヒント
このコンテンツは eBook の「コンテナー化された .NET アプリケーションの .NET マイクロサービス アーキテクチャ」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
環境変数として保存されているシークレットまたは Secret Manager ツールによって保存されたシークレットは、マシンのローカルに暗号化されていない状態で保存されています。 シークレットを保存する上でより安全な選択肢として Azure Key Vault があります。Azure Key Vault には、キーとシークレットを保存するためのセキュリティで保護された中央の場所が用意されています。
Azure.Extensions.AspNetCore.Configuration.Secrets パッケージを使用すると、ASP.NET Core アプリケーションから Azure Key Vault の構成情報を読み取ることができます。 Azure Key Vault のシークレットを初めて使用する場合は、次の手順を実行します。
アプリケーションを Azure AD アプリケーションとして登録します (キー コンテナーへのアクセスは Azure AD で管理されます)。この操作は、Azure 管理ポータルで実行できます。\
または、アプリケーションでパスワードまたはクライアント シークレットの代わりに証明書を使用して認証する場合は、New-AzADApplication PowerShell コマンドレットを使用できます。 Azure Key Vault に登録する証明書には、公開キーのみが必要です アプリケーションでは秘密キーが使用されます。
新しいサービス プリンシパルを作成して、登録されたアプリケーションにキー コンテナーへのアクセス権を付与します。 この処理を実行するには、次の PowerShell コマンドを使用します。
$sp = New-AzADServicePrincipal -ApplicationId "<Application ID guid>" Set-AzKeyVaultAccessPolicy -VaultName "<VaultName>" -ServicePrincipalName $sp.ServicePrincipalNames[0] -PermissionsToSecrets all -ResourceGroupName "<KeyVault Resource Group>"
IConfigurationRoot インスタンスを作成するときに AzureKeyVaultConfigurationExtensions.AddAzureKeyVault 拡張メソッドを呼び出して、アプリケーションの構成ソースとしてキー コンテナーを含めます。
AddAzureKeyVault
を呼び出すには、前の手順で登録し、キー コンテナーへのアクセス権が付与されたアプリケーション ID が必要です。 または、最初に Azure CLI コマンド az login
を実行してから、クライアントの代わりに DefaultAzureCredential を受け取る AddAzureKeyVault
のオーバーロードを使用することもできます。
重要
Azure Key Vault を最後の構成プロバイダーとして登録して、以前のプロバイダーの構成値をオーバーライドできるようにすることをお勧めします。
その他の技術情報
Azure Key Vault を使用したアプリケーション シークレットの保護
https://learn.microsoft.com/azure/architecture/multitenant-identity開発中のアプリ シークレットの安全な保存
https://learn.microsoft.com/aspnet/core/security/app-secretsデータ保護の構成
https://learn.microsoft.com/aspnet/core/security/data-protection/configuration/overviewASP.NET Core でのデータ保護のキー管理と有効期間
https://learn.microsoft.com/aspnet/core/security/data-protection/configuration/default-settings
.NET