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.
Este artigo explica como habilitar uma identidade gerenciada atribuída pelo usuário em um cluster AKS novo ou existente, obter a ID principal da identidade gerenciada atribuída pelo usuário e adicionar uma atribuição de função para a identidade gerenciada atribuída pelo usuário.
Pré-requisitos
Leia a visão geral de identidades gerenciadas no AKS (Serviço de Kubernetes do Azure) para entender os diferentes tipos de identidades gerenciadas disponíveis no AKS e como você pode usá-las para acessar com segurança os recursos do Azure.
Defina sua assinatura como a assinatura ativa atual usando o
az account setcomando.az account set --subscription <subscription-id>
Um grupo de recursos Azure existente. Se você não tiver um, poderá criar um usando o
az group createcomando.az group create \ --name <resource-group-name> \ --location <location>
- CLI do Azure versão 2.23.0 ou posterior instalada. Execute
az --versionpara encontrar a versão. Se precisar instalar ou atualizar, consulte Instalar CLI do Azure. - Para atualizar um cluster existente para usar uma identidade gerenciada atribuída pelo usuário, você precisa ter a versão 2.49.0 ou posterior do CLI do Azure instalada.
- Terraform instalado localmente. Para obter instruções de instalação, consulte Instalar o Terraform.
Limitações
- Depois de criar um cluster com uma identidade gerenciada, você não poderá voltar a usar um principal de serviço.
- Não há suporte para mover ou migrar um cluster habilitado para identidade gerenciada para um locatário diferente.
- Se o cluster tiver a identidade gerenciada por pod do Microsoft Entra (
aad-pod-identity) habilitada, os pods da Identidade Gerenciada por Nó (NMI) modificarão os iptables dos nós para interceptar as chamadas no ponto de extremidade dos Metadados da Instância do Azure (IMDS). Essa configuração significa que qualquer solicitação feita ao ponto de extremidade IMDS será interceptada pela NMI, mesmo que o pod não useaad-pod-identity.- Você pode configurar a CRD (definição de recurso personalizado) AzurePodIdentityException para especificar que as solicitações para o ponto de extremidade do IMDS originadas de um pod com rótulos correspondentes definidos na CRD devem ser encaminhadas sem nenhum processamento no NMI. Exclua os pods do sistema com o rótulo
kubernetes.azure.com/managedby: aksno namespace kube-system emaad-pod-identityconfigurando o CRD AzurePodIdentityException. Para obter mais informações, confira Usar identidades gerenciadas por pod do Microsoft Entra no Serviço de Kubernetes do Azure (AKS). - Para configurar uma exceção, instale o YAML mic-exception.
- Você pode configurar a CRD (definição de recurso personalizado) AzurePodIdentityException para especificar que as solicitações para o ponto de extremidade do IMDS originadas de um pod com rótulos correspondentes definidos na CRD devem ser encaminhadas sem nenhum processamento no NMI. Exclua os pods do sistema com o rótulo
- As regiões USDOD Central, USDOD Leste e USGov Iowa em Azure US Government nuvem não dão suporte à criação de um cluster com uma identidade gerenciada atribuída pelo usuário.
Atualizar considerações do cluster
Ao atualizar um cluster, considere as seguintes informações:
- Uma atualização só funciona se houver uma atualização de VHD para consumir. Se você estiver executando o VHD mais recente, precisará esperar até que o próximo VHD esteja disponível para executar a atualização.
- O CLI do Azure garante que a permissão do complemento seja definida corretamente após a migração. Se você não estiver usando o CLI do Azure para executar a operação de migração, precisará lidar com a permissão da identidade do complemento sozinho. Para obter um exemplo usando um modelo do Azure Resource Manager (ARM), consulte Atribuir funções do Azure usando Modelos ARM.
- Se o cluster estava usando
--attach-acrpara extrair imagens do Registro de Contêiner do Azure (ACR), você precisará executar o comandoaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>depois de atualizar o cluster para permitir que o kubelet recém-criado usado para a identidade gerenciada obtenha a permissão de pull do ACR. Caso contrário, você não conseguirá efetuar pull do ACR após a atualização.
Criar uma identidade gerenciada atribuída ao usuário
Se você ainda não tiver um recurso de identidade gerenciada atribuída pelo usuário, crie um usando o comando az identity create.
az identity create \
--name <identity-name> \
--resource-group <resource-group-name>
Sua saída deve ser parecida com o seguinte exemplo de saída:
{
"clientId": "<client-id>",
"clientSecretUrl": "<clientSecretUrl>",
"id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
"location": "<location>",
"name": "<identity-name>",
"principalId": "<principal-id>",
"resourceGroup": "<resource-group-name>",
"tags": {},
"tenantId": "<tenant-id>",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Obter a ID da entidade de segurança da identidade gerenciada atribuída pelo usuário
Obtenha a ID principal da identidade gerenciada atribuída pelo usuário usando o az identity show comando.
CLIENT_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query principalId \
--output tsv)
Obter a ID do recurso da identidade gerenciada atribuída pelo usuário
Obtenha a ID do recurso da identidade gerenciada atribuída pelo usuário usando o comando az identity show.
RESOURCE_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query id \
--output tsv)
Habilitar uma identidade gerenciada atribuída pelo usuário em um novo cluster do AKS
Crie um cluster do AKS com uma identidade gerenciada atribuída pelo usuário usando o comando az aks create e o parâmetro --assign-identity definido como a ID do recurso da identidade gerenciada atribuída pelo usuário.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--network-plugin azure \
--vnet-subnet-id <vnet-subnet-id> \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24 \
--assign-identity $RESOURCE_ID \
--generate-ssh-keys
Atualizar um cluster existente para usar uma identidade gerenciada atribuída pelo usuário
Atualize um cluster existente para utilizar uma identidade gerenciada atribuída pelo usuário, utilizando o comando
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
A saída de uma atualização bem-sucedida do cluster para usar uma identidade gerenciada atribuída pelo usuário deve ser semelhante à seguinte saída de exemplo:
...
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
"clientId": "<client-id>",
"principalId": "<principal-id>"
}
}
},
...
Depois de atualizar o cluster para usar uma identidade gerenciada atribuída pelo usuário em vez de uma entidade de serviço, o plano de controle e os pods usam a identidade gerenciada atribuída pelo usuário para autorização ao acessar outros serviços no Azure. O kubelet continuará usando uma entidade de serviço até que você atualize também o pool de nós. Uma atualização do pool de nós causa tempo de inatividade para seu cluster do AKS, pois os nós nos pools de nós são isolados, esvaziados e imagem recriada. Você pode usar o comando em seus nós para atualizar para uma identidade gerenciada atribuída pelo usuário.
az aks nodepool upgrade \
--resource-group <resource-group-name> \
--cluster-name <aks-cluster-name> \
--name <node-pool-name> \
--node-image-only
Observação
A migração de uma identidade gerenciada para o painel de controle, de atribuída pelo sistema para atribuída pelo usuário, não causa nenhum tempo de inatividade para o painel de controle e os pools de agentes. Os componentes do plano de controle continuam a usar a antiga identidade atribuída pelo sistema por várias horas até a próxima renovação do token.
Atribuir uma função RBAC do Azure a uma identidade gerenciada atribuída pelo usuário
Adicione uma atribuição de função para a identidade gerenciada atribuída pelo usuário usando o az role assignment create comando. O exemplo a seguir atribui a função Key Vault Secrets User à identidade gerenciada atribuída pelo usuário para conceder permissões para acessar segredos em um cofre de chaves. A atribuição de função tem como escopo o recurso do cofre de chaves.
az role assignment create \
--assignee <client-id> \
--role "Key Vault Secrets User" \
--scope "<key-vault-resource-id>"
Observação
Pode levar até 60 minutos para que as permissões concedidas à identidade gerenciada do cluster sejam propagadas.
Criar o arquivo de configuração do Terraform
Os arquivos de configuração do Terraform definem a infraestrutura que o Terraform cria e gerencia.
Crie um arquivo chamado
main.tfe adicione o seguinte código para definir a versão do Terraform e especificar o provedor de Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Adicione o código a seguir para
main.tfpara criar um grupo de recursos Azure. Fique à vontade para alterar o nome e o local do grupo de recursos conforme necessário.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Criar um cluster do AKS com uma identidade gerenciada atribuída pelo usuário usando o Terraform
Adicione o seguinte código em main.tf para criar uma identidade gerenciada atribuída pelo usuário e um cluster do AKS que usa a identidade.
resource "azurerm_user_assigned_identity" "uai" {
name = "aks-user-identity"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
name = "aks-user"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "aksuser"
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.uai.id]
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Adicionar uma atribuição de função para uma identidade gerenciada atribuída pelo usuário usando o Terraform
Adicione o código a seguir em main.tf para criar uma atribuição de função para a identidade gerenciada atribuída ao usuário. Este exemplo atribui a função Key Vault Secrets User à identidade gerenciada atribuída a um usuário para conceder permissões para acessar segredos em um cofre de chaves. A atribuição de função tem como escopo o recurso do cofre de chaves.
resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
scope = azurerm_resource_group.example.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_user_assigned_identity.uai.principal_id
}
Inicializar Terraform
Inicialize o Terraform no diretório que contém o main.tf arquivo usando o terraform init comando. Esse comando baixa o provedor de Azure necessário para gerenciar Azure recursos com o Terraform.
terraform init
Criar um plano de execução do Terraform
Crie um plano de execução do Terraform usando o comando terraform plan. Este comando mostra os recursos que o Terraform criará ou modificará em sua assinatura Azure.
terraform plan
Aplicar a configuração do Terraform
Depois de examinar e confirmar o plano de execução, aplique a configuração do Terraform usando o terraform apply comando. Esse comando cria ou modifica os recursos definidos em seu arquivo main.tf em sua assinatura Azure.
terraform apply
Verificar a implantação do Terraform
Depois de aplicar a configuração do Terraform, você pode verificar a implantação usando o comando [az aks show][az-aks-show] e o parâmetro --query para filtrar a saída e exibir as informações de identidade. Por exemplo:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Conteúdo relacionado
Para saber mais sobre identidades gerenciadas no AKS, confira os seguintes artigos: