使用托管标识从应用服务中提取 Azure 容器注册表映像

Pull Azure Container Registry image from App Service using Managed Identity

我们有一个 ACR,它位于与尝试从中提取图像的应用服务不同的资源组中。现在,我们正在集思广益,以获取应用服务上的凭据或托管身份,这将允许为运行时拉取容器。

我一直在梳理 documentation 以了解这如何与托管身份一起工作,但我目前不确定这是否可行。我习惯于为 auth 设置环境变量,例如DOCKER_REGISTRY_SERVER_PASSWORD,但我不确定是否有一个接口供托管身份使用 ACR 的访问策略。我提出它是因为我看到一些关于将它用于 AKS 和 IaaS VM 的文档,但 App Service 介于这两者之间,我没有看到关于这是否可能的明确答案。

我还没有对此进行测试,但我想知道,如果我将 acrPull 策略分配给托管身份,应用服务是否能够从 ACR 中提取图像?我是否只能在“应用程序设置”中指定 DOCKER_REGISTRY_SERVER_URL 才能正常工作?

根据这个tutorial,这是可能的。第 6 步和第 7 步:

  1. 授予托管标识访问容器注册表的权限:
    az role assignment create --assignee <principal-id> `
      --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerRegistry/registries/<registry-name> `
      --role "AcrPull"
    
  2. 将您的应用配置为使用托管标识从 Azure 容器注册表中提取。
    az resource update `
      --ids /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/sites/<app-name>/config/web `
      --set properties.acrUseManagedIdentityCreds=True