Utilize uma identidade gerida pelo Azure para autenticar um registo de contentores AzureUse an Azure managed identity to authenticate to an Azure container registry

Utilize uma identidade gerida para os recursos azure autenticar em um registo de contentores Azure a partir de outro recurso Azure, sem necessidade de fornecer ou gerir credenciais de registo.Use a managed identity for Azure resources to authenticate to an Azure container registry from another Azure resource, without needing to provide or manage registry credentials. Por exemplo, crie uma identidade gerida atribuída ao utilizador ou atribuída ao sistema num VM Linux para aceder a imagens de contentores a partir do seu registo de contentores, tão facilmente quanto utilizar um registo público.For example, set up a user-assigned or system-assigned managed identity on a Linux VM to access container images from your container registry, as easily as you use a public registry.

Para este artigo, aprende-se mais sobre identidades geridas e como:For this article, you learn more about managed identities and how to:

  • Ativar uma identidade atribuída ao utilizador ou atribuída ao sistema num VM AzureEnable a user-assigned or system-assigned identity on an Azure VM
  • Conceder o acesso de identidade a um registo de contentores AzureGrant the identity access to an Azure container registry
  • Use a identidade gerida para aceder ao registo e puxar uma imagem de contentorUse the managed identity to access the registry and pull a container image

Para criar os recursos Do Azure, este artigo requer que execute a versão Azure CLI 2.0.55 ou posterior.To create the Azure resources, this article requires that you run the Azure CLI version 2.0.55 or later. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).If you need to install or upgrade, see Install Azure CLI.

Para configurar um registo de contentores e empurrar uma imagem de contentor para ele, também deve ter o Docker instalado localmente.To set up a container registry and push a container image to it, you must also have Docker installed locally. O Docker disponibiliza pacotes que o configuram facilmente em qualquer sistema macOS, Windows ou Linux.Docker provides packages that easily configure Docker on any macOS, Windows, or Linux system.

Por que usar uma identidade gerida?Why use a managed identity?

Uma identidade gerida para os recursos Azure fornece aos serviços Azure uma identidade gerida automaticamente no Azure Ative Directory (Azure AD).A managed identity for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). Pode configurar certos recursos Azure,incluindo máquinas virtuais, com uma identidade gerida.You can configure certain Azure resources, including virtual machines, with a managed identity. Em seguida, use a identidade para aceder a outros recursos Azure, sem passar credenciais em código ou scripts.Then, use the identity to access other Azure resources, without passing credentials in code or scripts.

As identidades geridas são de dois tipos:Managed identities are of two types:

  • Identidades atribuídasao utilizador, que pode atribuir a vários recursos e persistir durante o tempo que quiser.User-assigned identities, which you can assign to multiple resources and persist for as long as your want. As identidades atribuídas ao utilizador estão atualmente em pré-visualização.User-assigned identities are currently in preview.

  • Uma identidade gerida pelo sistema, que é única para um recurso específico como uma única máquina virtual e dura a vida útil desse recurso.A system-managed identity, which is unique to a specific resource like a single virtual machine and lasts for the lifetime of that resource.

Depois de criar um recurso Azure com uma identidade gerida, dê à identidade o acesso que deseja a outro recurso, tal como qualquer diretor de segurança.After you set up an Azure resource with a managed identity, give the identity the access you want to another resource, just like any security principal. Por exemplo, atribuir uma identidade gerida um papel com puxão, impulso e puxão, ou outras permissões para um registo privado em Azure.For example, assign a managed identity a role with pull, push and pull, or other permissions to a private registry in Azure. (Para obter uma lista completa das funções de registo, consulte as funções e permissõesdo Registo de Contentores de Azure .) Pode dar acesso de identidade a um ou mais recursos.(For a complete list of registry roles, see Azure Container Registry roles and permissions.) You can give an identity access to one or more resources.

Em seguida, utilize a identidade para autenticar qualquer serviço que suporte a autenticação Azure AD,sem qualquer credencial no seu código.Then, use the identity to authenticate to any service that supports Azure AD authentication, without any credentials in your code. Para utilizar a identidade para aceder a um registo de contentores Azure a partir de uma máquina virtual, autentica-se com o Gestor de Recursos Azure.To use the identity to access an Azure container registry from a virtual machine, you authenticate with Azure Resource Manager. Escolha como autenticar usando a identidade gerida, dependendo do seu cenário:Choose how to authenticate using the managed identity, depending on your scenario:

Criar um registo de contentoresCreate a container registry

Se ainda não tiver um registo de contentores Azure, crie um registo e empurre-lhe uma imagem de recipiente de amostra.If you don't already have an Azure container registry, create a registry and push a sample container image to it. Para os passos, consulte Quickstart: Crie um registo de contentores privado sintetizador com o Azure CLI.For steps, see Quickstart: Create a private container registry using the Azure CLI.

Este artigo assume que aci-helloworld:v1 tem a imagem do recipiente armazenada no seu registo.This article assumes you have the aci-helloworld:v1 container image stored in your registry. Os exemplos utilizam um nome de registo do myContainerRegistry.The examples use a registry name of myContainerRegistry. Substitua-o pelo seu próprio registo e nomes de imagem em etapas posteriores.Replace with your own registry and image names in later steps.

Criar um VM ativado por DockerCreate a Docker-enabled VM

Crie uma máquina virtual Ubuntu ativada pelo Docker.Create a Docker-enabled Ubuntu virtual machine. Também precisa de instalar o Azure CLI na máquina virtual.You also need to install the Azure CLI on the virtual machine. Se já tem uma máquina virtual Azure, ignore este passo para criar a máquina virtual.If you already have an Azure virtual machine, skip this step to create the virtual machine.

Implementar uma máquina virtual Ubuntu Azure padrão com az vm criar.Deploy a default Ubuntu Azure virtual machine with az vm create. O exemplo seguinte cria um VM chamado myDockerVM num grupo de recursos existente chamado myResourceGroup:The following example creates a VM named myDockerVM in an existing resource group named myResourceGroup:

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

Demora alguns minutos até que a VM seja criada.It takes a few minutes for the VM to be created. Quando o comando estiver concluído, publicIpAddress tome nota do mostrado pelo Azure CLI.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Utilize este endereço para efazer ligações SSH ao VM.Use this address to make SSH connections to the VM.

Instale docker no VMInstall Docker on the VM

Depois de o VM estar em execução, faça uma ligação SSH ao VM.After the VM is running, make an SSH connection to the VM. Substitua publicamente IpAddress pelo endereço IP público do seu VM.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Executar o seguinte comando para instalar o Docker no VM:Run the following command to install Docker on the VM:

sudo apt install docker.io -y

Após a instalação, execute o seguinte comando para verificar se o Docker está a funcionar corretamente no VM:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Saída:Output:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Instalar a CLI do AzureInstall the Azure CLI

Siga os passos em Instalação Azure CLI com aptidão para instalar o Azure CLI na sua máquina virtual Ubuntu.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Para este artigo, certifique-se de que instala a versão 2.0.55 ou posterior.For this article, ensure that you install version 2.0.55 or later.

Saia da sessão ssh.Exit the SSH session.

Exemplo 1: Acesso com identidade atribuída ao utilizadorExample 1: Access with a user-assigned identity

Criar uma identidadeCreate an identity

Crie uma identidade na sua subscrição usando a identidade az criar comando.Create an identity in your subscription using the az identity create command. Pode utilizar o mesmo grupo de recursos que usou anteriormente para criar o registo de contentores ou a máquina virtual, ou outra.You can use the same resource group you used previously to create the container registry or virtual machine, or a different one.

az identity create --resource-group myResourceGroup --name myACRId

Para configurar a identidade nos seguintes passos, utilize o comando de mostrar identidade az para armazenar o ID de recursos da identidade e o principal id do serviço em variáveis.To configure the identity in the following steps, use the az identity show command to store the identity's resource ID and service principal ID in variables.

# 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)

Porque precisa da identidade num passo posterior quando iniciar sessão no CLI da sua máquina virtual, mostre o valor:Because you need the identity's ID in a later step when you sign in to the CLI from your virtual machine, show the value:

echo $userID

O ID é do formulário:The ID is of the form:

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

Configure o VM com a identidadeConfigure the VM with the identity

O seguinte az vm design de design de comando confunde o seu Docker VM com a identidade atribuída ao utilizador:The following az vm identity assign command configures your Docker VM with the user-assigned identity:

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

Conceder acesso de identidade ao registo de contentoresGrant identity access to the container registry

Agora configure a identidade para aceder ao seu registo de contentores.Now configure the identity to access your container registry. Primeiro use o comando do az acr show para obter a identificação de recursos do registo:First use the az acr show command to get the resource ID of the registry:

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

Utilize a atribuição de funções az criar comando para atribuir a função AcrPull ao registo.Use the az role assignment create command to assign the AcrPull role to the registry. Esta função fornece permissões de retirada para o registo.This role provides pull permissions to the registry. Para fornecer permissões de puxar e empurrar, atribua a função ACRPush.To provide both pull and push permissions, assign the ACRPush role.

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

Use a identidade para aceder ao registoUse the identity to access the registry

SSH na máquina virtual do Docker que está configurada com a identidade.SSH into the Docker virtual machine that's configured with the identity. Executar os seguintes comandos Azure CLI, utilizando o CLI Azure instalado no VM.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Primeiro, autenticar o Azure CLI com login az,utilizando a identidade configurada no VM.First, authenticate to the Azure CLI with az login, using the identity you configured on the VM. Para <userID>substituir a identificação da identidade que recuperou num passo anterior.For <userID>, substitute the ID of the identity you retrieved in a previous step.

az login --identity --username <userID>

Em seguida, autenticar o registo com login az acr.Then, authenticate to the registry with az acr login. Quando utiliza este comando, o CLI utiliza o token az login Ative Directory criado quando correu para autenticar perfeitamente a sua sessão com o registo do contentor.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (Dependendo da configuração do seu VM, poderá ser necessário executar sudoeste comando de comando e estivador com .)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Devia ver Login succeeded uma mensagem.You should see a Login succeeded message. Em seguida, docker pode executar comandos sem fornecer credenciais.You can then run docker commands without providing credentials. Por exemplo, executar o aci-helloworld:v1 estivador puxe para puxar a imagem, especificando o nome do servidor de login do seu registo.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. O nome do servidor de login é constituído pelo seu .azurecr.io nome de mycontainerregistry.azurecr.ioregisto de contentores (toda a minúscula) seguido por - por exemplo, .The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

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

Exemplo 2: Acesso com identidade atribuída ao sistemaExample 2: Access with a system-assigned identity

Configure o VM com uma identidade gerida pelo sistemaConfigure the VM with a system-managed identity

O seguinte az vm design de design de comando confunde o seu Docker VM com uma identidade atribuída ao sistema:The following az vm identity assign command configures your Docker VM with a system-assigned identity:

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

Utilize o comando az vm show para principalId definir uma variável ao valor de (o principal de serviço ID) da identidade do VM, para usar em etapas posteriores.Use the az vm show command to set a variable to the value of principalId (the service principal ID) of the VM's identity, to use in later steps.

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

Conceder acesso de identidade ao registo de contentoresGrant identity access to the container registry

Agora configure a identidade para aceder ao seu registo de contentores.Now configure the identity to access your container registry. Primeiro use o comando do az acr show para obter a identificação de recursos do registo:First use the az acr show command to get the resource ID of the registry:

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

Use a atribuição de funções az criar comando para atribuir a função AcrPull à identidade.Use the az role assignment create command to assign the AcrPull role to the identity. Esta função fornece permissões de retirada para o registo.This role provides pull permissions to the registry. Para fornecer permissões de puxar e empurrar, atribua a função ACRPush.To provide both pull and push permissions, assign the ACRPush role.

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

Use a identidade para aceder ao registoUse the identity to access the registry

SSH na máquina virtual do Docker que está configurada com a identidade.SSH into the Docker virtual machine that's configured with the identity. Executar os seguintes comandos Azure CLI, utilizando o CLI Azure instalado no VM.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Primeiro, autenticar o Azure CLI com login az,utilizando a identidade atribuída ao sistema no VM.First, authenticate the Azure CLI with az login, using the system-assigned identity on the VM.

az login --identity

Em seguida, autenticar o registo com login az acr.Then, authenticate to the registry with az acr login. Quando utiliza este comando, o CLI utiliza o token az login Ative Directory criado quando correu para autenticar perfeitamente a sua sessão com o registo do contentor.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (Dependendo da configuração do seu VM, poderá ser necessário executar sudoeste comando de comando e estivador com .)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Devia ver Login succeeded uma mensagem.You should see a Login succeeded message. Em seguida, docker pode executar comandos sem fornecer credenciais.You can then run docker commands without providing credentials. Por exemplo, executar o aci-helloworld:v1 estivador puxe para puxar a imagem, especificando o nome do servidor de login do seu registo.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. O nome do servidor de login é constituído pelo seu .azurecr.io nome de mycontainerregistry.azurecr.ioregisto de contentores (toda a minúscula) seguido por - por exemplo, .The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

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

Passos seguintesNext steps

Neste artigo, aprendeu a usar identidades geridas com o Registo de Contentores Azure e como:In this article, you learned about using managed identities with Azure Container Registry and how to:

  • Ativar uma identidade atribuída ao utilizador ou atribuída ao sistema num VM AzureEnable a user-assigned or system-assigned identity in an Azure VM
  • Conceder o acesso de identidade a um registo de contentores AzureGrant the identity access to an Azure container registry
  • Use a identidade gerida para aceder ao registo e puxar uma imagem de contentorUse the managed identity to access the registry and pull a container image