存储为环境变量或由机密管理器工具存储的机密仍存储在本地,且未加密在计算机上。 存储机密的更安全选项是 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 cmdlet。 向 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
,然后使用 AddAzureKeyVault
重载,该重载使用 DefaultAzureCredential 来替代客户端。
重要
建议将 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