Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use identidades gerenciadas para recursos do Azure para executar código em Instâncias de Contêiner do Azure que interagem com outros serviços do Azure. Você não precisa manter segredos ou credenciais no código. O recurso fornece uma implantação de Container Instances com uma identidade gerenciada automaticamente no Microsoft Entra ID.
Neste artigo, você aprenderá mais sobre identidades gerenciadas em Instâncias de Contêiner. Você também:
- Habilite uma identidade atribuída pelo usuário ou atribuída pelo sistema em um grupo de contêineres.
- Conceda acesso de identidade a um cofre de chaves do Azure.
- Use a identidade gerenciada para acessar um cofre de chaves de um contêiner em execução.
Adapte os exemplos para habilitar e usar identidades em Instâncias de Contêiner para acessar outros serviços do Azure. Esses exemplos são interativos. Na prática, suas imagens de contêiner executariam código para acessar os serviços do Azure.
Por que usar uma identidade gerenciada?
Use uma identidade gerenciada em um contêiner em execução para autenticar em qualquer serviço que dê suporte à autenticação do Microsoft Entra, sem gerenciar as credenciais no seu código de contêiner. Para serviços que não dão suporte à autenticação do Microsoft Entra, você pode armazenar segredos em um cofre de chaves do Azure e usar a identidade gerenciada para acessar o cofre de chaves para recuperar credenciais. Para obter mais informações sobre como usar uma identidade gerenciada, consulte O que são identidades gerenciadas para recursos do Azure?.
Habilitar uma identidade gerenciada
Quando você cria um grupo de contêineres, habilite uma ou mais identidades gerenciadas definindo uma propriedade ContainerGroupIdentity. Você também pode habilitar ou atualizar identidades gerenciadas após a execução de um grupo de contêineres. Qualquer ação faz com que o grupo de contêineres seja reiniciado. Para definir as identidades em um grupo de contêineres novo ou existente, use a CLI do Azure, um modelo do Azure Resource Manager, um arquivo YAML ou outra ferramenta do Azure.
As Instâncias de Contêiner dão suporte a ambos os tipos de identidades gerenciadas do Azure: atribuídas pelo usuário e atribuídas pelo sistema. Em um grupo de contêineres, você pode habilitar uma identidade atribuída pelo sistema, uma ou mais identidades atribuídas pelo usuário ou ambos os tipos de identidades. Se você não estiver familiarizado com as identidades gerenciadas para recursos do Azure, confira a visão geral.
Usar uma identidade gerenciada
Para usar uma identidade gerenciada, a identidade deve receber acesso a um ou mais recursos de serviço do Azure (por exemplo, um aplicativo Web, um cofre de chaves ou uma conta de armazenamento) na assinatura. Usar uma identidade gerenciada em um contêiner em execução é semelhante ao uso de uma identidade em uma VM (máquina virtual) do Azure. Para obter mais informações, consulte as diretrizes da VM para usar um token, o Azure PowerShell ou a CLI do Azure ou os SDKs do Azure.
Pré-requisitos
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para saber mais, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
- Este artigo exige a versão 2.0.49 ou posterior da CLI do Azure. Se você usar o Azure Cloud Shell, a versão mais recente já está instalada.
Criar um Azure Key Vault
Os exemplos neste artigo usam uma identidade gerenciada em Instâncias de Contêiner para acessar um segredo do Azure Key Vault.
Primeiramente, crie um grupo de recursos denominado myResourceGroup no local eastus com o seguinte comando az group create:
az group create --name myResourceGroup --location eastus
Use o comando az keyvault create para criar um cofre de chaves. Especifique um nome exclusivo de cofre de chaves.
az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus
Armazene um segredo de exemplo no cofre de chaves usando o comando az keyvault secret set :
az keyvault secret set \
--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault
Continue com os exemplos a seguir para acessar o key vault usando uma identidade gerenciada atribuída pelo usuário ou pelo sistema em Instâncias de Contêiner.
Exemplo 1: usar uma identidade atribuída pelo usuário para acessar o cofre de chaves do Azure
Criar uma identidade
Primeiro, crie uma identidade em sua assinatura usando o comando az identity create . Você pode usar o mesmo grupo de recursos que foi usado para criar o cofre de chaves. Você também pode usar um diferente.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Para usar a identidade nas etapas a seguir, use o comando az identity show para armazenar a ID da entidade de serviço da identidade e a ID de recurso em variáveis.
# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query id --output tsv)
Conceder acesso de identidade atribuída pelo usuário para o cofre de chaves
Execute o seguinte comando az keyvault set-policy para definir uma política de acesso no cofre de chaves. O exemplo a seguir permite que a identidade atribuída pelo usuário receba segredos do cofre de chaves:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Habilitar identidade atribuída pelo usuário em um grupo de contêineres
Execute o seguinte comando az container create para criar uma instância de contêiner com base na imagem azure-cli da Microsoft. Este exemplo fornece um único grupo de contêineres que você pode usar interativamente para executar a CLI do Azure para acessar outros serviços do Azure. Nesta seção, apenas o sistema operacional de base é usado. Para obter um exemplo de como usar a CLI do Azure no contêiner, confira Habilitar identidade atribuída pelo sistema em um grupo de contêineres.
O parâmetro --assign-identity passa sua identidade atribuída pelo usuário gerenciado para o grupo. O comando de execução demorada mantém o contêiner em execução. Este exemplo usa o mesmo grupo de recursos que foi usado para criar o cofre de chaves, mas você pode especificar outro.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $RESOURCE_ID \
--command-line "tail -f /dev/null"
Em alguns segundos, você deve obter uma resposta da CLI do Azure que indica que a implantação foi concluída. Verifique o status dele usando o comando az container show.
az container show \
--resource-group myResourceGroup \
--name mycontainer
A identity seção na saída é semelhante ao exemplo a seguir, que mostra que a identidade está definida no grupo de contêineres. O principalID em userAssignedIdentities é a entidade de serviço da identidade que você criou no Microsoft Entra ID:
[...]
"identity": {
"principalId": "null",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
}
},
[...]
Usar identidade atribuída pelo usuário para obter um segredo do key vault
Agora você pode usar a identidade gerenciada na instância de contêiner em execução para acessar o cofre de chaves. Primeiro, abra um shell bash no contêiner:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Execute os comandos a seguir no shell do Bash no contêiner. Para obter um token de acesso para usar o Microsoft Entra ID para autenticar no Key Vault, execute o seguinte comando:
client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s
Saída:
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}
Para armazenar o token de acesso em uma variável para usar em comandos subsequentes para autenticar, execute o seguinte comando:
TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')
Agora, use o token de acesso para autenticar no cofre de chaves e ler um segredo. Substitua o nome de seu cofre de chaves na URL (https://mykeyvault.vault.azure.net/...):
curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"
A resposta é semelhante ao exemplo a seguir que mostra o segredo. Em seu código, você analisa essa saída para obter o segredo. Em seguida, use o segredo em uma operação subsequente para acessar outro recurso do Azure.
{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}
Exemplo 2: Usar uma identidade atribuída pelo sistema para acessar um cofre de chaves do Azure
Habilitar identidade atribuída pelo sistema em um grupo de contêineres
Execute o seguinte comando az container create para criar uma instância de contêiner com base na imagem azure-cli da Microsoft. Este exemplo fornece um único grupo de contêineres que você pode usar interativamente para executar a CLI do Azure para acessar outros serviços do Azure.
O --assign-identity parâmetro sem outro valor habilita uma identidade gerenciada atribuída pelo sistema no grupo. O escopo da identidade é o grupo de recursos do grupo de contêineres. O comando de execução demorada mantém o contêiner em execução. Este exemplo usa o mesmo grupo de recursos que foi usado para criar o cofre de chaves, que está no escopo da identidade.
# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)
# Create container group with system-managed identity
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity --scope $RG_ID \
--command-line "tail -f /dev/null"
Em alguns segundos, você deverá obter uma resposta da CLI do Azure indicando que a implantação foi concluída. Verifique o status dele usando o comando az container show.
az container show \
--resource-group myResourceGroup \
--name mycontainer
A identity seção na saída é semelhante ao exemplo a seguir, que mostra que uma identidade atribuída pelo sistema é criada na ID do Microsoft Entra:
[...]
"identity": {
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]
Defina uma variável para o valor de principalId (a ID da entidade de serviço) da identidade a ser usada nas etapas posteriores.
SP_ID=$(az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)
Conceder acesso do grupo de contêineres ao cofre de chaves
Execute o seguinte comando az keyvault set-policy para definir uma política de acesso no cofre de chaves. O exemplo a seguir permite que a identidade gerenciada pelo sistema receba segredos do cofre de chaves:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Usar a identidade do grupo de contêiner para obter um segredo do key vault
Agora você pode usar a identidade gerenciada para acessar o cofre de chaves dentro da instância de contêiner em execução. Primeiro, abra um shell bash no contêiner:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Execute os comandos a seguir no shell do Bash no contêiner. Primeiro, entre na CLI do Azure usando a identidade gerenciada:
az login --identity
No contêiner em execução, recupere o segredo do cofre de chaves:
az keyvault secret show \
--name SampleSecret \
--vault-name mykeyvault --query value
O valor do segredo é recuperado:
"Hello Container Instances"
Habilitar a identidade gerenciada usando um modelo do Resource Manager
Para habilitar uma identidade gerenciada em um grupo de contêineres usando um modelo do Resource Manager, defina a propriedade identity do objeto Microsoft.ContainerInstance/containerGroups com um objeto ContainerGroupIdentity. Os snippets a seguir mostram a propriedade identity configurada para cenários diferentes. Para obter mais informações, consulte a referência de modelo do Resource Manager. Especifique no mínimo apiVersion de 2018-10-01.
Identidade atribuída pelo usuário
Uma identidade atribuída pelo usuário é uma ID de recurso do seguinte formato:
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"
Você pode habilitar uma ou mais identidades atribuídas pelo usuário.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
Identidade atribuída pelo sistema
"identity": {
"type": "SystemAssigned"
}
Identidades atribuídas pelo sistema e atribuídas pelo usuário
Em um grupo de contêineres, você pode habilitar uma identidade atribuída pelo sistema e uma ou mais identidades atribuídas pelo usuário.
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
Habilitar a identidade gerenciada usando um arquivo YAML
Para habilitar uma identidade gerenciada em um grupo de contêineres implantado usando um arquivo YAML, inclua o YAML a seguir.
Especifique no mínimo apiVersion de 2018-10-01.
Identidade atribuída pelo usuário
Uma identidade atribuída pelo usuário é uma ID de recurso do seguinte formato:
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'
Você pode habilitar uma ou mais identidades atribuídas pelo usuário.
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Identidade atribuída pelo sistema
identity:
type: SystemAssigned
Identidades atribuídas pelo sistema e atribuídas pelo usuário
Em um grupo de contêineres, você pode habilitar uma identidade atribuída pelo sistema e uma ou mais identidades atribuídas pelo usuário.
identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Identidade gerenciada em contêineres do Windows
A identidade gerenciada em grupos de contêineres do Windows funciona de forma diferente dos grupos de contêineres do Linux. Para contêineres do Windows, o servidor de metadados (169.254.169.254) não está disponível para obter o token de ID do Microsoft Entra. Os clientes podem seguir um padrão diferente para obterem o token de acesso nos contêineres do Windows. O padrão envolve o envio de uma solicitação de token para IDENTITY_ENDPOINT junto com outras informações, como a ID principal e o segredo. As variáveis IDENTITY_ENDPOINT e IDENTITY_HEADER são injetadas como variáveis de ambiente em seu contêiner.
curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%
Um exemplo de script do Azure PowerShell:
identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "aaaaaaaa-bbbb-cccc-1111-222222222222"
Invoke-RestMethod -Uri "$identityEndpoint" `
-Method Get `
-Headers @{secret = $identityHeader} `
-Body @{resource = $resource; principalId = $principalId} `
-ContentType "application/x-www-form-urlencoded"
O az login módulo e outras bibliotecas de clientes que dependem do servidor de metadados (169.254.169.254) não funcionam em um contêiner do Windows. Os contêineres do Windows em uma rede virtual não podem se conectar ao endpoint. Como resultado, um token de identidade gerenciada não pode ser gerado em um contêiner de rede virtual do Windows.
Conteúdo relacionado
- Aprenda sobre identidades gerenciadas dos recursos do Azure.
- Veja um exemplo do Azure Go SDK utilizando uma identidade gerenciada para acessar um cofre de chaves a partir de Instâncias de Contêiner.