我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从ACR中提取Docker图像,而不是将用户名和密码存储在应用程序设置中(除了我们希望为这些部署编写脚本的其他内容,如果应用程序服务需要用户名和密码,那么我们必须将它们存储在源代码控制中)。
令人难以置信的是,我找不到任何关于此场景的文档。我找到的最接近的文档是使用托管身份从VM[https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-managed-identity]]拉取ACR映像,我不能将其用作指导,因为最后一步(我唯一缺少的一点)是 *SSH进入VM并在命令行运行az acr login --name myContainerRegistry
*。
我要去的地方:
- 我已经创建了ACR和容器应用程序服务
- 我已将角色
ACR Pull
和Reader
授予应用程序服务的系统分配标识 - 尝试拉取容器映像时,应用程序服务被"拒绝访问
我不知道下一步该怎么办就像我说的,我找不到任何关于这个场景的指南。
4条答案
按热度按时间xwbd5t1u1#
现在可以通过设置 acrUseManagedIdentityCreds 属性实现此操作
以下是包含步骤的教程:https://learn.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
nkhmeac62#
要将App Service配置为从ACR拉取,您可以使用服务主体方法并设置访问级别,如之前所做的那样。
https://github.com/Azure/app-service-linux-docs/blob/master/service_principal_auth_acr.md
至于应用程序服务与terraform去,你可以注入服务主体凭据秘密的设置在Azure密钥保管库中使用
https://www.terraform.io/docs/providers/azurerm/r/app_service.html#app_settings
m2xkgtsf3#
您对Web应用的托管标识理解有误,Web应用的托管标识用于访问Web应用容器内部的其他资源,这意味着Web应用容器已经在运行,但是当您拉取映像时,这个容器运行的不好,所以不可能使用管理身份从ACR中提取图像。您只能使用用户名和密码从ACR中提取图像。
6tdlim6h4#
对于正在执行Azure ML并收到以下错误的用户:
您需要使用托管身份创建计算,以访问Docker映像进行培训[this and this]。