【问题标题】:Unable to retrieve Key Vault Secret from Docker App Service in .NET Core无法从 .NET Core 中的 Docker 应用服务检索 Key Vault Secret
【发布时间】:2020-05-06 09:32:42
【问题描述】:

我在 docker 容器中运行使用来自 Azure 应用服务的 NET Core 3.1 的 Web API,并且努力从 Key Vault Service 获取密钥。 我的代码看起来不错,没有错误,但响应始终为空。这是我的启动初始化:

public Startup(IWebHostEnvironment env)
    {   
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables();

        this.bIsDevelopemnt = env.IsDevelopment();           

        Configuration = builder.Build();

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

        builder.AddAzureKeyVault(
            $"https://{Configuration.GetSection("KeyVaultName").Value}.vault.azure.net/",
            keyVaultClient,
            new DefaultKeyVaultSecretManager());           
    }

我正在使用这个控制器来测试结果,在所有三种情况下都返回 null:

[HttpGet("/secrets")]
    public IActionResult getSecrets()
    {
        try
        {

            var value = configuration["tokenKey"];
            var value2 = configuration["OhmioAPI:tokenKey"];
            var value3 = configuration["OhmioAPI--tokenKey"];

            return Ok(new { orign = "pirulo", key1 = value, key2 = value2, key3 = value3 });
        }
        catch (Exception e)  {
            return NotFound(e.Message);
        }            
    }

我尝试过/做过的事情: * 创建 Key Vault 存储和机密 * 为我的应用创建一个身份 ID * 添加权限以从密钥存储中获取/列出机密

有什么想法吗?

【问题讨论】:

  • 假设您在 Linux 容器中运行?您是否在密钥保管库中明确授予托管标识获取权限?
  • 是的,Simon,我正在 Linux 容器中运行我的应用程序,并且我已授予对保管库的获取权限。谢谢

标签: azure docker .net-core azure-keyvault


【解决方案1】:

最简单的方法是使用 Key Vault Reference。 见:https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

主要步骤:

  • 在 Azure WebApp 上启用 MSI
  • 允许 WebApp 通过 KeyVault 中的访问策略访问 KeyVault
  • 添加一个应用程序,例如,使用以下值进行测试: @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931) [根据您尝试访问的密钥 URI 更改 secretUri]
  • 就是这样。 WebApp 将自动从 KeyVault 获取密钥,您现在可以像访问环境变量一样访问它。
  • 您可以回显应用程序设置(在我们的示例中为 TEST)以检查该值是否已设置

【讨论】:

  • 应用程序设置是否可作为在应用程序服务的 docker 容器内运行的 Web 应用程序的一个选项,如果是这样,这绝对是最简单的选项,那么您只需在密钥中为应用程序服务提供相关权限Vault 然后将它们作为配置值访问
  • 是的,它们也可用于容器的 Webapp。
  • 谢谢 Gaurav,会试试这个。
  • 如果使用的是 docker 容器,则身份选项不可用。
猜你喜欢
  • 2021-04-29
  • 2018-05-22
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
相关资源
最近更新 更多