【问题标题】:How to authenticate with Azure ACR from Azure container app service如何从 Azure 容器应用服务向 Azure ACR 进行身份验证
【发布时间】:2020-09-06 18:55:15
【问题描述】:

我正在尝试设置我的应用容器服务,以便它可以使用托管身份从我们的 ACR 中提取 docker 映像,而不是将用户名和密码存储在应用设置中(除了我们想要编写这些部署脚本的任何其他内容如果应用服务需要用户名和密码,那么我们必须将它们存储在源代码管理中)。

令人难以置信的是,我在这种情况下找不到任何文档。我发现最接近的是使用托管身份从 VM [https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication-managed-identity] 中提取 ACR 图像,我不能将其用作最后一步的指南(我唯一的一点是缺少)是SSH 进入虚拟机并在命令行运行az acr login --name myContainerRegistry

我要去的地方:

  • 我已经创建了 ACR 和容器应用服务
  • 我已将角色 ACR PullReader 授予应用服务的系统分配身份
  • 应用服务在尝试拉取容器映像时访问被拒绝

我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。

【问题讨论】:

  • 我不确定这是否可能。但另一种方法是从部署管道访问 Azure Key Vault 以获取凭据并将它们注入到 az webapp config container set 命令中。请注意,这仅在部署新环境时才需要,而不是在每次代码部署时都需要。部署环境是基础设施自动化而不是 CI/CD。 docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/…
  • 谢谢,虽然我不确定这是否对我们有用,因为我们使用的是 Terraform 而不是 ARM 或直接使用 CLI。

标签: azure azure-container-registry azure-managed-identity


【解决方案1】:

现在可以通过设置 acrUseManagedIdentityCreds 属性来实现

这是一个包含步骤的教程: https://docs.microsoft.com/en-us/azure/app-service/tutorial-custom-container?pivots=container-linux#configure-app-service-to-deploy-the-image-from-the-registry

这里是具体的命令

  1. 授予托管身份访问容器注册表的权限:

az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"

  1. 将您的应用配置为使用托管标识从 Azure 容器注册表中提取

az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=True

【讨论】:

    【解决方案2】:

    您对 Web 应用的托管标识的理解有误。 Web 应用程序的托管标识用于访问 Web 应用程序容器内的其他资源。这意味着 Web 应用程序容器已经在运行。但是当你拉取镜像时,容器运行不好。所以不可能使用托管身份从 ACR 中提取图像。您只能使用用户名和密码从 ACR 中提取图像。

    【讨论】:

      【解决方案3】:

      要将应用服务配置为从 ACR 中提取,您可以使用服务主体方法并设置访问级别,就像您已经完成的那样。

      https://github.com/Azure/app-service-linux-docs/blob/master/service_principal_auth_acr.md

      就带有 terraform 的应用服务而言,您可以使用以下方法在 Azure Key Vault 中注入 ServicePrincipal 凭据机密的设置

      https://www.terraform.io/docs/providers/azurerm/r/app_service.html#app_settings

      【讨论】:

      • 感谢@djsly,我使​​用您的想法将密码放入密钥保管库实例中,因此现在我的 terraform 状态仅包含密钥保管库引用 (docs.microsoft.com/en-gb/azure/app-service/…) 作为应用设置,而不是密码本身
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2015-08-11
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      相关资源
      最近更新 更多