使用 Azure Key Vault 在生产时保护机密

小窍门

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可以在 .NET Docs 上获取,也可以下载免费的 PDF 以供离线阅读。

适用于容器化 .NET 应用程序的 .NET 微服务体系结构电子书封面缩略图。

存储为环境变量或由机密管理器工具存储的机密仍存储在本地,且未加密在计算机上。 存储机密的更安全选项是 Azure Key Vault,它提供用于存储密钥和机密的安全中心位置。

Azure.Extensions.AspNetCore.Configuration.Secrets 包允许 ASP.NET Core 应用程序从 Azure Key Vault 读取配置信息。 若要开始使用 Azure Key Vault 中的机密,请执行以下步骤:

  1. 将应用程序注册为 Azure AD 应用程序。 (对密钥保管库的访问由 Azure AD 管理。这可以通过 Azure 管理门户完成。\

    或者,如果希望应用程序使用证书而不是密码或客户端密码进行身份验证,可以使用 New-AzADApplication PowerShell cmdlet。 向 Azure Key Vault 注册的证书只需要公钥。 应用程序将使用私钥。

  2. 通过创建新的服务主体,为已注册的应用程序授予对密钥保管库的访问权限。 可以使用以下 PowerShell 命令执行此作:

    $sp = New-AzADServicePrincipal -ApplicationId "<Application ID guid>"
    Set-AzKeyVaultAccessPolicy -VaultName "<VaultName>" -ServicePrincipalName $sp.ServicePrincipalNames[0] -PermissionsToSecrets all -ResourceGroupName "<KeyVault Resource Group>"
    
  3. 创建 IConfigurationRoot 实例时,通过调用 AzureKeyVaultConfigurationExtensions.AddAzureKeyVault 扩展方法,将密钥保管库作为应用程序中的配置源。

请注意,调用 AddAzureKeyVault 要求在前面的步骤中注册并授予对密钥保管库的访问权限的应用程序 ID。 或者,可以首先运行 Azure CLI 命令 az login,然后使用 AddAzureKeyVault 重载,该重载使用 DefaultAzureCredential 来替代客户端。

重要

建议将 Azure Key Vault 注册为最后一个配置提供程序,以便它可以替代以前的提供程序中的配置值。

其他资源