1

我想在Azure Container Instances中创建一个容器(或容器组),从Azure Container Registry中提取图像- 但使用SystemAssigned标识。因此,我想避免使用 ACR 登录凭据、服务主体或UserAssigned身份。

当我运行此脚本(PowerShell 中的 Azure CLI) ...

$LOC = "westeurope"
$RG = "myresourcegroup"
$ACRNAME = "myacr"

az configure --defaults location=$LOC group=$RG

$acr = az acr show -n $ACRNAME -o json | ConvertFrom-Json -Depth 10

az container create --name app1 --image $($acr.loginServer+"/app1") `
    --assign-identity --role acrpull --scope $acr.id `
    --debug

... ACI 似乎没有认识到它应该已经获得 ACR 授权并显示此提示:

Image registry username:

Azure CLI 版本:2.14.0

这有意义吗?ACR 是否支持 ACI 托管标识?

4

4 回答 4

0

在您的代码中,当您使用在 ACI 创建时创建的托管标识创建 Azure 容器以向 ACR 进行身份验证时。恐怕你不能这样做,因为有限制

创建容器组时,不能使用托管标识从 Azure 容器注册表中提取映像。身份仅在运行的容器中可用。

于 2020-11-02T07:55:17.653 回答
0

此解决方案不会使用托管标识,重要的是要注意我们至少在资源组级别需要所有者角色。

主要思想是使用服务主体通过 acrpull 角色获取访问权限。请参阅以下 PowerShell 脚本:


$resourceGroup = (az group show --name $resourceGroupName | ConvertFrom-Json )

$containerRegistry = (az acr show --name $containerRegistryName | ConvertFrom-Json)

$servicePrincipal = (az ad sp create-for-rbac `
    --name "${containerRegistryName}.azurecr.io" `
    --scopes $containerRegistry.id `
    --role acrpull `
    | ConvertFrom-Json )

az container create `
    --name $containerInstanceName `
    --resource-group $resourceGroupName `
    --image $containerImage `
    --command-line "tail -f /dev/null" `
    --registry-username $servicePrincipal.appId `
    --registry-password $servicePrincipal.password    


请注意,我们已经创建了一个服务主体,因此我们还需要删除它:


az ad sp delete --id $servicePrincipal.appId

有一个关于如何做到这一点的文档:

从 Azure 容器注册表部署到 Azure 容器实例

于 2021-12-01T18:39:35.417 回答
0

@minus_one -solution 在我的情况下不起作用。用于制作容器注册表的运行手册。它确实需要比此处所述更多的特权... https://github.com/Azure/azure-powershell/issues/3215

于 2022-02-08T13:50:28.103 回答
0

从 2022 年 1 月起,Azure 容器实例支持托管标识以访问 Azure 容器注册表:https ://docs.microsoft.com/en-us/azure/container-instances/using-azure-container-registry-mi

于 2022-02-08T17:35:54.970 回答