如何从 azure 应用服务访问密钥保管库

时间:2021-03-09 08:34:38

标签: c# azure azure-devops azure-keyvault

我使用以下方法连接到我的代码中的密钥保管库:

public static class ConfigurationBuilderExtension
{
    public static IConfigurationBuilder AddKeyVaultconfiguration(this IConfigurationBuilder builder)
    {
        var config = builder.Build();

        string name = config["KeyVault:Name"];
        string clientId = config["KeyVault:ClientId"];
        string clientSecret = config["KeyVault:ClientSecret"];

        Verify.NotNullOrEmpty(name, nameof(name));
        Verify.NotNullOrEmpty(name, nameof(clientId));
        Verify.NotNullOrEmpty(name, nameof(clientSecret));

        builder.AddAzureKeyVault($"https://{name}.vault.azure.net/", clientId, clientSecret);

        return builder;
    }
}

为了在本地运行它,我只是将用户机密添加到项目中:

{
  "KeyVault": {
    "Name": "brajzorekeyvault",
    "ClientId": "xxxx",
    "ClientSecret": "xxxx"
  }
}

这在本地有效。

但是,当我将其发布到 Azure 中的应用服务时,如何使用这种方法?我必须以某种方式注入名称、clientId 和 clientSecret?但我不知道这样做的最佳实践方法是什么?我是否应该在 Azure devops 中创建一个包含这些值的变量组,然后在管道中使用这些值?

1 个答案:

答案 0 :(得分:0)

您应该使用托管身份访问 Web 应用程序内的密钥保管库,以避免必须注入机密。见this tutorial

对于本地开发,您可以在 VS 中链接一个帐户,该帐户将用于针对 Key Vault 进行身份验证。见the docs

使用托管身份是最佳实践,事实上,您不会看到任何关于使用客户端机密进行连接的官方文档,至少没有警告使用托管身份。