Implantar nas Instâncias de Contêiner do Azure por meio do Registro de Contêiner do Azure usando uma identidade gerenciada
O (ACR) Registro de Contêiner do Azure é um serviço de registro de contêiner gerenciado, baseado no Azure, usado para armazenar imagens de contêineres do Docker particulares. Este artigo descreve como efetuar pull de imagens de contêiner armazenadas em um registro de contêiner do Azure ao implantar em grupos de contêineres com as Instâncias de Contêiner do Azure. Uma forma de configurar o acesso ao Registro é criar uma identidade gerenciada do Microsoft Entra.
Quando o acesso a um Registro de Contêiner do Azure (ACR) é restrito usando um ponto de extremidade privado, o uso de uma identidade gerenciada permite que Instâncias de Contêiner do Azure implantadas em uma rede virtual acessem o registro de contêiner por meio do ponto de extremidade privado.
Pré-requisitos
Registro de contêiner do Azure: você precisa de um registro de contêiner do Azure de SKU Premium com pelo menos uma imagem. Se você precisar criar um registro, confira Criar um registro de contêiner usando a CLI do Azure. Anote id
e loginServer
do Registro
CLI do Azure: os exemplos de linha de comando neste artigo usam a CLI do Azure e são formatados para shell de Bash. Você pode instalar a CLI do Azure localmente ou usar o Azure Cloud Shell.
Limitações
- Os contêineres do Windows não dão suporte a pulls de imagens autenticadas por identidade gerenciada atribuída pelo sistema com o ACR, apenas atribuída pelo usuário.
Configurar a autenticação do registro
Seu registro de contêiner precisa ter Serviços Confiáveis habilitados. Para encontrar instruções sobre como habilitar serviços confiáveis, confira Permitir que os serviços confiáveis acessem com segurança um registro de contêiner restrito à rede.
Criar uma identidade
Crie uma identidade em sua assinatura usando o comando az identity create. Você pode usar o mesmo grupo de recursos usado anteriormente para criar um registro de contêiner ou pode usar um diferente.
az identity create --resource-group myResourceGroup --name myACRId
Para configurar a identidade nas etapas a seguir, use o comando az identity show para armazenar a ID do recurso da entidade e a ID da entidade de serviço nas variáveis.
Para configurar corretamente a identidade em etapas futuras, use az identity show para obter e armazenar a ID do recurso da identidade e a ID da entidade de serviço em variáveis.
# Get resource ID of the user-assigned identity
USERID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)
# Get service principal ID of the user-assigned identity
SPID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)
Você precisa do ID do recurso de identidade para fazer login na CLI a partir da sua máquina virtual. Para mostrar o valor:
echo $USERID
A ID do recurso está no formato:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
Você também precisará da ID da entidade de serviço para conceder à identidade gerenciada acesso ao seu registro de contêiner. Para mostrar o valor:
echo $SPID
A ID da entidade de serviço está no formato:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Conceder à identidade uma atribuição de função
Para que sua identidade acesse o registro de contêiner, você precisa conceder a ela uma atribuição de função. Use o comando a seguir para conceder a função acrpull
à identidade que você criou, certificando-se de fornecer o ID do seu registro e o principal de serviço que obtivemos anteriormente:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Implantar usando um modelo do ARM (Azure Resource Manager)
Comece copiando o JSON a seguir em um novo arquivo chamado azuredeploy.json
. No Azure Cloud Shell, você pode usar o Visual Studio Code para criar o arquivo em seu diretório de trabalho:
code azuredeploy.json
Você pode especificar as propriedades do seu registro de contêiner do Azure em um modelo do ARM incluindo a propriedade imageRegistryCredentials
na definição de grupos de contêineres. Por exemplo, você pode especificar as credenciais de registro diretamente:
Observação
Esse não é um modelo do ARM abrangente, mas sim um exemplo de como seria a seção resources
de um modelo completo.
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2021-09-01",
"name": "myContainerGroup",
"location": "norwayeast",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId": {}
}
},
"properties": {
"containers": [
{
"name": "mycontainer",
"properties": {
"image": "myacr.azurecr.io/hello-world:latest",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 1
}
}
}
}
],
"imageRegistryCredentials": [
{
"server":"myacr.azurecr.io",
"identity":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId"
}
],
"ipAddress": {
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "public"
},
"osType": "Linux"
}
}
Implantar o modelo
Implante seu modelo do Resource Manager com o seguinte comando:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Implantar usando a CLI do Azure
Para implantar um grupo de contêineres usando identidade gerenciada para autenticar pulls de imagens por meio da CLI do Azure, use o seguinte comando para garantir que seu <dns-label>
seja globalmente exclusivo:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --ports 80 --dns-name-label <dns-label>
Implantar em uma rede virtual com a CLI do Azure
Para implantar um grupo de contêineres em uma rede virtual usando a identidade gerenciada para autenticar pulls de imagem de um ACR executado atrás de um ponto de extremidade privado por meio da CLI do Azure, use o seguinte comando:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --vnet "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/ --subnet mySubnetName
Para obter mais informações sobre como implantar em uma rede virtual, confira Implantar instâncias de contêiner em uma rede virtual do Azure.
Implantar um grupo de vários contêineres em uma rede virtual usando YAML e a CLI do Azure
Para implantar um grupo de vários contêineres em uma rede virtual usando a identidade gerenciada para autenticar pulls de imagem de um ACR executado atrás de um ponto de extremidade privado por meio da CLI do Azure, especifique a configuração do grupo de contêineres em um arquivo YAML. Em seguida, passe o arquivo YAML como um parâmetro para o comando.
apiVersion: '2021-10-01'
location: eastus
type: Microsoft.ContainerInstance/containerGroups
identity:
type: UserAssigned
userAssignedIdentities: {
'/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId': {}
}
properties:
osType: Linux
imageRegistryCredentials:
- server: myacr.azurecr.io
identity: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId'
subnetIds:
- id: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNetName/subnets/mySubnetName'
name: mySubnetName
containers:
- name: myContainer-1
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 1
image: 'myacr.azurecr.io/myimage:latest'
- name: myContainer-2
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 2
image: 'myacr.azurecr.io/myimage:latest'
az container create --name my-containergroup --resource-group myResourceGroup --file my-YAML-file.yaml
Para obter mais informações sobre como implantar em um grupo de vários contêineres, confira Implantar um grupo de vários contêineres.
Limpar recursos
Para remover todos os recursos da sua assinatura do Azure, exclua o grupo de recursos:
az group delete --name myResourceGroup