Utilizar uma identidade gerida do Azure para autenticar num registo de contentor do Azure

Use uma identidade gerenciada para recursos do Azure para autenticar em um registro de contêiner do Azure a partir de outro recurso do Azure, sem a necessidade de fornecer ou gerenciar credenciais do Registro. Por exemplo, configure uma identidade gerenciada atribuída pelo usuário ou pelo sistema em uma VM Linux para acessar imagens de contêiner do seu registro de contêiner, tão facilmente quanto você usa um registro público. Ou configure um cluster do Serviço Kubernetes do Azure para usar sua identidade gerenciada para extrair imagens de contêiner do Registro de Contêiner do Azure para implantações de pod.

Neste artigo, você aprenderá mais sobre identidades gerenciadas e como:

  • Habilitar uma identidade atribuída pelo usuário ou pelo sistema em uma VM do Azure
  • Conceder acesso de identidade a um registro de contêiner do Azure
  • Use a identidade gerenciada para acessar o registro e extrair uma imagem de contêiner

Para criar os recursos do Azure, este artigo requer que você execute a CLI do Azure versão 2.0.55 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Para configurar um registro de contêiner e enviar uma imagem de contêiner para ele, você também deve ter o Docker instalado localmente. O Docker disponibiliza pacotes que o configuram facilmente em qualquer sistema macOS, Windows ou Linux.

Por que usar uma identidade gerenciada?

Se não estiver familiarizado com a funcionalidade das identidades geridas para os recursos do Azure, veja esta descrição geral.

Depois de configurar os recursos selecionados do Azure com uma identidade gerenciada, dê à identidade o acesso desejado a outro recurso, assim como qualquer entidade de segurança. Por exemplo, atribua uma identidade gerenciada uma função com pull, push and pull ou outras permissões a um registro privado no Azure. (Para obter uma lista completa das funções do Registro, consulte Funções e permissões do Registro de Contêiner do Azure.) Você pode conceder a uma identidade acesso a um ou mais recursos.

Em seguida, use a identidade para autenticar em qualquer serviço que ofereça suporte à autenticação do Microsoft Entra, sem credenciais em seu código. Escolha como autenticar usando a identidade gerenciada, dependendo do seu cenário. Para usar a identidade para acessar um registro de contêiner do Azure a partir de uma máquina virtual, autentique-se com o Gerenciador de Recursos do Azure.

Criar um registo de contentores

Se você ainda não tiver um registro de contêiner do Azure, crie um registro e envie uma imagem de contêiner de exemplo para ele. Para conhecer as etapas, consulte Guia de início rápido: criar um registro de contêiner privado usando a CLI do Azure.

Este artigo pressupõe que você tenha a imagem do aci-helloworld:v1 contêiner armazenada no registro. Os exemplos usam um nome de registro de myContainerRegistry. Substitua por seus próprios nomes de registro e imagem em etapas posteriores.

Criar uma VM habilitada para Docker

Crie uma máquina virtual Ubuntu habilitada para Docker. Você também precisa instalar a CLI do Azure na máquina virtual. Se você já tiver uma máquina virtual do Azure, ignore esta etapa para criar a máquina virtual.

Implante uma máquina virtual padrão do Ubuntu Azure com az vm create. O exemplo a seguir cria uma VM chamada myDockerVM em um grupo de recursos existente chamado myResourceGroup:

az vm create \
    --resource-group myResourceGroup \
    --name myDockerVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

Demora alguns minutos até que a VM seja criada. Quando o comando for concluído, anote o publicIpAddress exibido pela CLI do Azure. Use esse endereço para fazer conexões SSH com a VM.

Instalar o Docker na VM

Depois que a VM estiver em execução, faça uma conexão SSH com a VM. Substitua publicIpAddress pelo endereço IP público da sua VM.

ssh azureuser@publicIpAddress

Execute o seguinte comando para instalar o Docker na VM:

sudo apt update
sudo apt install docker.io -y

Após a instalação, execute o seguinte comando para verificar se o Docker está sendo executado corretamente na VM:

sudo docker run -it mcr.microsoft.com/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Instalar a CLI do Azure

Siga as etapas em Instalar a CLI do Azure com o apt para instalar a CLI do Azure em sua máquina virtual do Ubuntu. Para este artigo, certifique-se de instalar a versão 2.0.55 ou posterior.

Saia da sessão SSH.

Exemplo 1: Acesso com uma identidade atribuída pelo utilizador

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 o registro de contêiner ou a máquina virtual, ou 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 o ID de recurso da identidade e o 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)

Como você precisa do ID da identidade em uma etapa posterior quando entrar na CLI a partir de sua máquina virtual, mostre o valor:

echo $userID

O ID é do formulário:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Configurar a VM com a identidade

O comando az vm identity assign a seguir configura sua VM do Docker com a identidade atribuída pelo usuário:

az vm identity assign --resource-group myResourceGroup --name myDockerVM --identities $userID

Conceder acesso de identidade ao registro de contêiner

Agora configure a identidade para acessar seu registro de contêiner. Primeiro, use o comando az acr show para obter o ID do recurso do registro:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Use o comando az role assignment create para atribuir a função AcrPull à identidade. Essa função fornece permissões de pull para o registro. Para fornecer permissões pull e push, atribua a função AcrPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Utilizar a identidade para aceder ao registo

SSH na máquina virtual do Docker configurada com a identidade. Execute os seguintes comandos da CLI do Azure, usando a CLI do Azure instalada na VM.

Primeiro, autentique-se na CLI do Azure com az login, usando a identidade que você configurou na VM. Para <userID>, substitua a ID da identidade recuperada em uma etapa anterior.

az login --identity --username <userID>

Em seguida, autentique-se no registro com az acr login. Quando você usa esse comando, a CLI usa o token do Ative Directory criado quando você executou az login para autenticar perfeitamente sua sessão com o registro do contêiner. (Dependendo da configuração da sua VM, talvez seja necessário executar este comando e os comandos docker com sudo.)

az acr login --name myContainerRegistry

Deverá ver uma Login succeeded mensagem. Em seguida, você pode executar docker comandos sem fornecer credenciais. Por exemplo, execute docker pull para extrair a aci-helloworld:v1 imagem, especificando o nome do servidor de login do seu registro. O nome do servidor de login consiste no nome do registro do contêiner (todas minúsculas) seguido por - por .azurecr.io exemplo, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Exemplo 2: Acesso com uma identidade atribuída ao sistema

Configurar a VM com uma identidade gerenciada pelo sistema

O seguinte comando az vm identity assign configura sua VM do Docker com uma identidade atribuída pelo sistema:

az vm identity assign --resource-group myResourceGroup --name myDockerVM

Use o comando az vm show para definir uma variável para o valor de (o ID da entidade de serviço) da principalId identidade da VM, para usar em etapas posteriores.

spID=$(az vm show --resource-group myResourceGroup --name myDockerVM --query identity.principalId --out tsv)

Conceder acesso de identidade ao registro de contêiner

Agora configure a identidade para acessar seu registro de contêiner. Primeiro, use o comando az acr show para obter o ID do recurso do registro:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Use o comando az role assignment create para atribuir a função AcrPull à identidade. Essa função fornece permissões de pull para o registro. Para fornecer permissões pull e push, atribua a função AcrPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Utilizar a identidade para aceder ao registo

SSH na máquina virtual do Docker configurada com a identidade. Execute os seguintes comandos da CLI do Azure, usando a CLI do Azure instalada na VM.

Primeiro, autentique a CLI do Azure com az login, usando a identidade atribuída pelo sistema na VM.

az login --identity

Em seguida, autentique-se no registro com az acr login. Quando você usa esse comando, a CLI usa o token do Ative Directory criado quando você executou az login para autenticar perfeitamente sua sessão com o registro do contêiner. (Dependendo da configuração da sua VM, talvez seja necessário executar este comando e os comandos docker com sudo.)

az acr login --name myContainerRegistry

Deverá ver uma Login succeeded mensagem. Em seguida, você pode executar docker comandos sem fornecer credenciais. Por exemplo, execute docker pull para extrair a aci-helloworld:v1 imagem, especificando o nome do servidor de login do seu registro. O nome do servidor de login consiste no nome do registro do contêiner (todas minúsculas) seguido por - por .azurecr.io exemplo, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Próximos passos

Neste artigo, você aprendeu sobre como usar identidades gerenciadas com o Registro de Contêiner do Azure e como:

  • Habilitar uma identidade atribuída pelo usuário ou pelo sistema em uma VM do Azure
  • Conceder acesso de identidade a um registro de contêiner do Azure
  • Use a identidade gerenciada para acessar o registro e extrair uma imagem de contêiner