Implantar nas Instâncias de Contêiner do Azure por meio do Registro de Contêiner do Azure usando 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 de Docker particulares. Este artigo descreve como efetuar pull de imagens de contêiner armazenadas em um registro de contêiner durante implantações no Azure nas Instâncias de Contêiner do Azure. Uma maneira de configurar o acesso ao Registro é criar uma entidade de serviço e 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 deste 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 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

Em um cenário de produção em que você fornece acesso a aplicativos e serviços "sem periféricos", é recomendável configurar o acesso ao registro usando uma entidade de serviço. Uma entidade de serviço permite que você forneça o RBAC do Azure (Controle de acesso baseado em função do Azure) às suas imagens de contêiner. Por exemplo, é possível configurar uma entidade de serviço com acesso somente pull para um registro.

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 cofre chaves

Se você ainda não tiver um cofre no Azure Key Vault, crie um com a CLI do Azure usando os comandos a seguir.

Atualize a variável RES_GROUP com o nome do grupo de recursos existente no qual criar o cofre de chaves e ACR_NAME com o nome do registro de contêiner. Para fins de brevidade, os comandos neste artigo pressupõem que o registro, o cofre de chaves e as instâncias de contêiner sejam todos criados 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 um dígito e não pode conter hífens 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 entidades de serviço e armazenar credenciais

Agora, é necessário criar uma entidade de serviço e armazenar as 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. Tome nota da appId da entidade de serviço após a 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 argumento --role no comando anterior configura a entidade de serviço com a função acrpull, que permite a ela acesso somente de pull ao Registro. Para permitir acesso de push e pull, altere o argumento --role 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)

Você criou um cofre de chaves do Azure e armazenou dois segredos nele:

  • $ACR_NAME-pull-usr: a ID da entidade de serviço, para uso como o nome de usuário do registro de contêiner.
  • $ACR_NAME-pull-pwd: a senha da entidade de serviço, para uso como a senha do registro de contêiner.

Agora, é possível referenciar esses segredos pelo nome quando você ou os aplicativos e serviços efetuam pull de imagens do registro.

Implantar contêiner com CLI do Azure

Agora que as credenciais da entidade de serviço estão armazenadas nos segredos do Azure Key Vault, os aplicativos e serviços podem utilizá-las para acessar o registro privado.

Primeiro, obtenha o nome do servidor de logon do registro usando o comando az acr show. O nome do servidor de logon é composto por letras minúsculas e é semelhante a myregistry.azurecr.io.

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

Execute o seguinte comando az container create para implantar uma instância de contêiner. O comando usa as credenciais da entidade de serviço armazenadas no Azure Key Vault para autenticar no registro de contêiner e assume que você efetuou push da imagem aci-helloworld anteriormente para o registro. Atualize o valor --image se você quiser usar uma imagem diferente do 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 valor --dns-name-label deve ser exclusivo no Azure, portanto, o comando anterior acrescenta um número aleatório ao rótulo do nome DNS do contêiner. A saída do comando exibe o FQDN (nome de domínio totalmente qualificado) do contêiner, por exemplo:

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

Depois que o contêiner for iniciado com êxito, será possível navegar para o FQDN no 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 registro de contêiner do Azure em um modelo do Azure Resource Manager incluindo a propriedade imageRegistryCredentials na definição de grupos do contêiner. Por exemplo, você pode especificar as credenciais de registro diretamente:

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

Para obter configurações completas do grupo de contêineres, confira a Referência de modelo do Resource Manager.

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 de parâmetro seguro durante a implantação.

Implantar com o portal do Azure

Se você mantiver as imagens de contêiner no Registro de Contêiner do Azure, você poderá facilmente criar 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 de um registro de contêiner, você deve habilitar a conta de administrador do registro. A conta do administrador destina-se para um único usuário acessar o registro, principalmente para fins de teste.

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

  2. Para confirmar que a conta de administrador é habilitada, selecione Chaves de acessoe, em Usuário administrador selecione Habilitar.

  3. Selecione Repositórios e, em seguida, selecione o repositório do qual deseja implantar, clique com o botão direito do mouse na marca 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 poderá 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 para o grupo de contêineres do painel de notificações para localizar o endereço IP e outras propriedades do contêiner.

    Exibição de detalhes de grupo de contêineres das Instâncias de Contêiner do Azure

Próximas etapas

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.