如何从 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 和容器应用服务
- 我已将角色
ACR Pull
和 Reader
授予应用程序服务的系统分配身份
- 尝试拉取容器映像时,应用服务访问被拒绝
我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。
要将应用服务配置为从 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 属性
具体命令如下
- 授予托管标识访问容器注册表的权限:
az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"
- 将您的应用配置为使用托管标识从 Azure 容器注册表中提取
az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=True
我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从我们的 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 和容器应用服务
- 我已将角色
ACR Pull
和Reader
授予应用程序服务的系统分配身份 - 尝试拉取容器映像时,应用服务访问被拒绝
我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。
要将应用服务配置为从 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 属性
具体命令如下
- 授予托管标识访问容器注册表的权限:
az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"
- 将您的应用配置为使用托管标识从 Azure 容器注册表中提取
az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=True