从本地运行的Docker容器中的Azure托管身份

时间:2019-02-26 07:08:44

标签: docker asp.net-core azure-web-sites azure-keyvault

我正在运行一个由asp.net core 2.2 api组成的docker容器。该api需要访问Azure密钥保险库,并且我已经与具有对密钥保险库的正确访问策略以检索机密的用户登录Visual Studio。但是,当我使用Visual Studio工具为docker调试容器时,这种特殊登录似乎并没有在本地运行的容器内部传播。但是当我在本地运行应用程序时(没有在docker容器中运行它),asp net核心配置提供程序似乎接了我的Visual Studio登录名。关于此的任何指示都是有帮助的

3 个答案:

答案 0 :(得分:1)

我在Mac上使用docker和MSI遇到了同样的问题。我最终做了以下解决方法:

首先从CLI获取访问令牌并将其设置为环境(并记住将其传递给docker)

export ACCESS_TOKEN=$(az account get-access-token --resource=https://vault.azure.net | jq -r .accessToken)

在代码中,如果令牌在环境中,则将其拾取:

KeyVaultClient keyVaultClient;
var accessToken = Environment.GetEnvironmentVariable("ACCESS_TOKEN");
if (accessToken!=null)
{
   keyVaultClient = new KeyVaultClient(
       async (string a, string r, string s)=> accessToken);
}
else
{
   var azureServiceTokenProvider = new AzureServiceTokenProvider();
   keyVaultClient = new KeyVaultClient(
      new KeyVaultClient.AuthenticationCallback(
          azureServiceTokenProvider.KeyVaultTokenCallback));
}

答案 1 :(得分:1)

我在一个月前读过这篇文章。我正在寻找类似问题的答案。我发现 Docker 可以运行 Kubernetes,而 AAD-Pod-Identity https://github.com/Azure/aad-pod-identity 不适用于 Docker Kubernetes。我分叉了他们的存储库并修改了麦克风组件。现在它适用于 Docker Kubernetes,不确定 Azure 团队是否有计划进行这些修改。

您可以在此处获得如何运行的详细说明: https://github.com/Wallsmedia/aad-pod-identity

答案 2 :(得分:0)

另一种避免秘密注入的选择是使用设备代码身份验证流来获取user_impersonation访问令牌。不利的一面是,每次容器启动时,开发人员都必须手动完成流程。

这些帖子概述了该过程, YahooFinance https://joonasw.net/view/device-code-flow 使用powershell clientId可以避免注册新的租户应用程序。就像魅力一样。