如何从 Azure 容器应用服务使用 Azure ACR 进行身份验证

How to authenticate with Azure ACR from Azure container app service

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

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

我要去的地方:

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

要将应用服务配置为从 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

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

现在可以通过设置 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