【问题标题】:Docker container app service in azure. How to use DefaultAzureCredential for keyvaultAzure 中的 Docker 容器应用服务。如何将 DefaultAzureCredential 用于 keyvault
【发布时间】:2021-06-14 20:07:57
【问题描述】:

我有一个在 azure 中运行的容器应用服务,它运行良好。

但是,如果我想在本地运行此容器,它会失败,因为它无法通过身份验证来读取 azure 中的密钥库。

.ConfigureAppConfiguration((context, config) =>
{
    var builtConfig = config.Build();

    string SecretUri = $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/";
    var secretClient = new SecretClient(new Uri(SecretUri), new DefaultAzureCredential(new DefaultAzureCredentialOptions { ExcludeSharedTokenCacheCredential = true }));
    config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
})

在 azure 中运行时,DefaultAzureCredential 将从应用服务继承其权限并且工作正常。

但是,如果我想在本地运行容器以在 azure 之外进行测试,它不知道要使用什么权限。 我该如何处理?我可以在不对容器进行开发更改的情况下以某种方式告诉容器使用什么权限吗?

【问题讨论】:

  • 这个问题有更新吗?

标签: azure containers azure-keyvault defaultazurecredential


【解决方案1】:

当我在 Visual Studio 中进行开发时,我通常将默认的 Azure Key Vault 开发凭据存储在本地的用户设置中。然后,我将与环境变量相同的凭据放入 Azure 应用服务。如果凭据名称相同,它将在两个地方都可以使用。

您可以通过右键单击 Visual Studio 中的项目来访问本地用户密码

有关详细信息,请参阅documentation

【讨论】:

  • 但是您在环境变量中拥有不安全的凭据,从而破坏了拥有 azure key vault 的目的。
  • 但在这种情况下你必须信任 Azure。您必须以某种方式将身份/凭证放入容器中......但可以肯定的是,如果容器被黑客入侵,它们就会暴露出来。这就是为什么为不同的应用程序使用不同的密钥库以限制损害是有用的。原生 Azure 服务可以使用 Azure 身份访问 AKV。但我不确定您如何在您的应用所在的容器中获得该凭据。
【解决方案2】:

DefaultAzureCredential会按照showhere的顺序尝试几种凭证类型,所以如果不设置环境变量并排除SharedTokenCacheCredentialExcludeSharedTokenCacheCredential = true,它将使用VisualStudioCredential进行身份验证,即您登录 VS 的用户帐户。

要使其在本地工作,您需要将您的用户帐户添加到具有正确权限的密钥库的Access Policies,请遵循此doc。 (或者如果你在keyvault的Access policies刀片中选择Azure role-based access control,则需要RBAC角色Key Vault Administrator,按照这个doc添加。)添加后就可以正常使用了。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多