如何在不存储凭据的情况下连接到 KeyVault?

How can I connect to a KeyVault without storing credentials?

我的 Web 应用程序有许多安全配置元素存储在 KeyVault 中。为了连接到它,我们有一些使用应用程序 ID 和密钥的代码,因为它们允许访问 Key Vault,所以它们是安全凭证。

我可以使用应用程序的身份作为凭据以某种集成安全方式连接到 KeyVault 吗?或者是否有其他方法来保护这些凭据?

我研究过使用加密来保护配置元素,但是还有另一个资产(密钥)必须维护、保护和部署。这比纯文本配置要好,但我正在尝试找出最佳解决方案。

如果您的应用程序 运行 在 Web 应用程序中,Managed Service Identity 会为您的应用程序提供一个身份,您可以使用该身份使用 AAD 访问 Key Vault 和其他资源。

如果您想使用 Azure Active Directory 从 Web 应用程序访问 Key Vault,您可以执行以下操作

  1. 转到您的 Web 应用程序
  2. 转到托管服务标识并向 Azure Active Directory 注册 Web 应用程序(单击 On 按钮,然后单击 Save),这将创建托管服务标识.

  3. 现在转到密钥库并打开 Access policies 选项卡

  4. 点击新增
  5. Select Secret Management 从模板配置
  6. 在 Select 主体选项 select 中,托管服务身份是 为您的网络应用程序创建(应命名为您的应用程序)

  7. 现在转到密钥权限,至少 select Get,才能访问 您的密钥(秘密和证书的相同过程)。

完成所有这些步骤后,您可以转到您的网络应用程序代码并获取,例如,如下所示的秘密:

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();

 var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

 var secret = await keyVaultClient.GetSecretAsync("https://keyvaultname.vault.azure.net/secrets/secret").ConfigureAwait(false);

您将需要为您的应用程序安装 Microsoft.Azure.Services.AppAuthenticationMicrosoft.Azure.KeyVault NuGet 包。