Implementar em Instâncias de Contentor do Azure a partir do Registo de Contentores do Azure utilizando uma entidade de serviço

O Registro de Contêiner do Azure é um serviço de registro de contêiner gerenciado baseado no Azure usado para armazenar imagens de contêiner privadas do Docker. Este artigo descreve como extrair imagens de contêiner armazenadas em um registro de contêiner do Azure ao implantar em Instâncias de Contêiner do Azure. Uma maneira de configurar o acesso ao Registro é criar uma entidade de serviço e uma senha do Microsoft Entra e armazenar as credenciais de logon em um cofre de chaves do Azure.

Pré-requisitos

Registro de contêiner do Azure: você precisa de um registro de contêiner do Azure e pelo menos uma imagem de contêiner no Registro para concluir as etapas neste artigo. Se você precisar de um registro, consulte Criar um registro de contêiner usando a CLI do Azure.

CLI do Azure: Os exemplos de linha de comando neste artigo usam a CLI do Azure e são formatados para o shell Bash. Você pode instalar a CLI do Azure localmente ou usar o Azure Cloud Shell.

Limitações

  • Os contêineres do Windows não oferecem suporte a pull de imagem autenticada por identidade gerenciada atribuída pelo sistema com ACR, apenas atribuídos pelo usuário.

Configurar a autenticação do registo

Em um cenário de produção em que você fornece acesso a serviços e aplicativos "sem cabeça", é recomendável configurar o acesso ao Registro usando uma entidade de serviço. Uma entidade de serviço permite que você forneça o controle de acesso baseado em função do Azure (Azure RBAC) para suas imagens de contêiner. Por exemplo, pode configurar um principal de serviço com acesso a um registo apenas por pedido.

O Registro de Contêiner do Azure fornece opções de autenticação adicionais.

Na seção a seguir, você cria um cofre de chaves do Azure e uma entidade de serviço e armazena as credenciais da entidade de serviço no cofre.

Criar o cofre de chaves

Se ainda não tiver um cofre no Azure Key Vault, crie um com a CLI do Azure através dos comandos seguintes.

Atualize a RES_GROUP variável com o nome de um grupo de recursos existente no qual criar o cofre de chaves e ACR_NAME com o nome do seu registro de contêiner. Por uma questão de brevidade, os comandos neste artigo pressupõem que as instâncias do Registro, do cofre de chaves e do contêiner sejam criadas no mesmo grupo de recursos.

Especifique um nome para o novo cofre de chaves em AKV_NAME. O nome do cofre deve ser exclusivo no Azure e deve ter de 3 a 24 caracteres alfanuméricos, começar com uma letra, terminar com uma letra ou dígito e não pode conter hífenes consecutivos.

RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry       # Azure Container Registry registry name
AKV_NAME=mykeyvault       # Azure Key Vault vault name

az keyvault create -g $RES_GROUP -n $AKV_NAME

Criar o principal de serviço e armazenar as credenciais

Agora crie uma entidade de serviço e armazene suas credenciais no cofre de chaves.

Os comandos a seguir usam az ad sp create-for-rbac para criar a entidade de serviço e az keyvault secret set para armazenar a senha da entidade de serviço no cofre. Certifique-se de anotar o appId da entidade de serviço na criação.

# Create service principal
az ad sp create-for-rbac \
  --name http://$ACR_NAME-pull \
  --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
  --role acrpull

SP_ID=xxxx # Replace with your service principal's appId

# Store the registry *password* in the vault
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp show --id $SP_ID --query password --output tsv)

O --role argumento no comando anterior configura a entidade de serviço com a função acrpull , que lhe concede acesso somente pull-only ao registro. Para conceder acesso push e pull, altere o --role argumento para acrpush.

Em seguida, armazene o appId da entidade de serviço no cofre, que é o nome de usuário que você passa para o Registro de Contêiner do Azure para autenticação.

# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp show --id $SP_ID --query appId --output tsv)

Acabou de criar um cofre de chaves do Azure e de armazenar dois segredos nele:

  • $ACR_NAME-pull-usr: o ID do principal de serviço, para utilização como o nome de utilizador do registo de contentor.
  • $ACR_NAME-pull-pwd: a palavra-passe do principal de serviço, para utilização como a palavra-passe do registo de contentor.

Agora, pode referenciar estes segredos por nome quando o utilizador ou as suas aplicações e serviços solicitarem imagens do registo.

Implementar o contentor com a CLI do Azure

Agora que as credenciais da entidade de serviço estão armazenadas nos segredos do Cofre da Chave do Azure, seus aplicativos e serviços podem usá-las para acessar seu registro privado.

Primeiro, obtenha o nome do servidor de login do registro usando o comando az acr show . O nome do servidor de login é todo minúsculo e semelhante ao myregistry.azurecr.io.

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Execute o comando seguinte az container create para implementar uma instância de contentor. O comando usa as credenciais da entidade de serviço armazenadas no Cofre de Chaves do Azure para autenticar no registro do contêiner e pressupõe que você tenha enviado anteriormente a imagem aci-helloworld para o seu registro. Atualize o --image valor se quiser usar uma imagem diferente do seu registro.

az container create \
    --name aci-demo \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label aci-demo-$RANDOM \
    --query ipAddress.fqdn

O --dns-name-label valor deve ser exclusivo no Azure, portanto, o comando anterior acrescenta um número aleatório ao rótulo de nome DNS do contêiner. O resultado do comando apresenta o nome de domínio completamente qualificado (FQDN) do contentor, por exemplo:

"aci-demo-25007.eastus.azurecontainer.io"

Depois que o contêiner for iniciado com êxito, você poderá navegar até seu FQDN em seu navegador para verificar se o aplicativo está sendo executado com êxito.

Implantar com o modelo do Azure Resource Manager

Você pode especificar as propriedades do seu registro de contêiner do Azure em um modelo do Azure Resource Manager incluindo a imageRegistryCredentials propriedade na definição de grupo de contêineres. Por exemplo, você pode especificar as credenciais do Registro diretamente:

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Para obter as configurações completas do grupo de contêineres, consulte a referência do modelo do Gerenciador de Recursos.

Para obter detalhes sobre como referenciar segredos do Azure Key Vault em um modelo do Resource Manager, consulte Usar o Azure Key Vault para passar o valor do parâmetro seguro durante a implantação.

Implementar com o portal do Azure

Se você mantiver imagens de contêiner em um registro de contêiner do Azure, poderá criar facilmente um contêiner em Instâncias de Contêiner do Azure usando o portal do Azure. Ao usar o portal para implantar uma instância de contêiner a partir de um registro de contêiner, você deve habilitar a conta de administrador do registro. A conta de administrador foi concebida para que um único utilizador aceda ao registo, principalmente para fins de teste.

  1. No portal do Azure, navegue até o registro do contêiner.

  2. Para confirmar que a conta de administrador está ativada, selecione Chaves de acesso e, em Utilizador administrador, selecione Ativar.

  3. Selecione Repositórios, selecione o repositório a partir do qual deseja implantar, clique com o botão direito do mouse na tag da imagem de contêiner que deseja implantar e selecione Executar instância.

  4. Insira um nome para o contêiner e um nome para o grupo de recursos. Você também pode alterar os valores padrão, se desejar.

    Criar menu para Instâncias de Contêiner do Azure

  5. Quando a implantação for concluída, você poderá navegar até o grupo de contêineres no painel de notificações para localizar seu endereço IP e outras propriedades.

    Vista de detalhes para o grupo de contentores de Instâncias de Contentor do Azure

Próximos passos

Para obter mais informações sobre a autenticação do Registro de Contêiner do Azure, consulte Autenticar com um Registro de contêiner do Azure.