Usar uma identidade gerenciada no Serviço Kubernetes do Azure (AKS)
Os clusters do Serviço Kubernetes do Azure (AKS) exigem uma identidade para acessar recursos do Azure, como balanceadores de carga e discos gerenciados. A identidade pode ser uma identidade gerenciada ou uma entidade de serviço.
Este artigo fornece detalhes sobre como habilitar os seguintes tipos de identidade gerenciada em um cluster AKS novo ou existente:
- Identidade gerida atribuída pelo sistema
- Traga sua própria identidade gerenciada atribuída pelo usuário
- Identidade gerenciada pré-criada do Kubelet
Descrição geral
Quando você implanta um cluster AKS, uma identidade gerenciada atribuída ao sistema é criada automaticamente e gerenciada pela plataforma Azure, portanto, não exige que você provisione ou gire nenhum segredo. Para obter mais informações, consulte identidades gerenciadas para recursos do Azure.
O AKS não cria automaticamente uma entidade de serviço, então você precisa criar uma. Os clusters que usam uma entidade de serviço eventualmente expiram, e a entidade de serviço deve ser renovada para evitar afetar a autenticação de cluster com a identidade. O gerenciamento de entidades de serviço adiciona complexidade, por isso é mais fácil usar identidades gerenciadas. Os mesmos requisitos de permissão se aplicam a entidades de serviço e identidades gerenciadas. As identidades gerenciadas usam autenticação baseada em certificado. As credenciais de cada identidade gerenciada têm uma expiração de 90 dias e são roladas após 45 dias.
O AKS usa tipos de identidade gerenciada atribuídos pelo sistema e pelo usuário, e essas identidades são imutáveis. Esses tipos de identidade não devem ser confundidos com uma identidade do Microsoft Entra Workload, que se destina ao uso por um aplicativo em execução em um pod.
Importante
A identidade gerenciada por pod do Microsoft Entra de código aberto (visualização) no Serviço Kubernetes do Azure foi preterida em 24/10/2022 e o projeto arquivado em setembro de 2023. Para obter mais informações, consulte o aviso de descontinuação. O complemento AKS Managed começa a ser descontinuado em setembro de 2024.
Recomendamos que você primeiro revise a visão geral do Microsoft Entra Workload ID . A autenticação de ID de Carga de Trabalho do Entra substitui a identidade gerenciada pelo pod do Microsoft Entra (visualização) e é o método recomendado para permitir que um aplicativo em execução em um pod se autentique em relação a outros serviços do Azure que oferecem suporte a ele.
Antes de começar
Verifique se você tem a CLI do Azure versão 2.23.0 ou posterior instalada. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).Para usar uma identidade gerenciada kubelet pré-criada, você precisa da CLI do Azure versão 2.26.0 ou posterior instalada.
Para atualizar a identidade gerenciada em um cluster existente, você precisa da CLI do Azure versão 2.49.0 ou posterior instalada.
Limitações
- Não há suporte para locatários que movem ou migram um cluster gerenciado habilitado para identidade.
- Se o cluster tiver a identidade gerenciada pelo pod do Microsoft Entra (
aad-pod-identity
) habilitada, os pods NMI (Node-Managed Identity) modificarão os iptables dos nós para intercetar chamadas para o ponto de extremidade IMDS (Instance Metadata) do Azure. Essa configuração significa que qualquer solicitação feita ao ponto de extremidade de metadados é intercetada pelo NMI, mesmo que o pod não useaad-pod-identity
. AzurePodIdentityException CRD pode ser configurado para informaraad-pod-identity
sobre quaisquer solicitações para o ponto de extremidade de metadados originadas de um pod que corresponda a rótulos definidos em CRD devem ser intermediadas por proxy sem qualquer processamento no NMI. Os pods do sistema comkubernetes.azure.com/managedby: aks
rótulo no namespace kube-system devem ser excluídos configurandoaad-pod-identity
o CRD AzurePodIdentityException.- Para obter mais informações, consulte Desabilitar o ID-pod-identity do Microsoft Entra para um pod ou aplicativo específico.
- Para configurar uma exceção, instale o mic-exception YAML.
- O AKS não suporta o uso de uma identidade gerenciada atribuída ao sistema ao usar uma zona DNS privada personalizada.
Resumo das identidades gerenciadas
O AKS usa várias identidades gerenciadas para serviços e complementos integrados.
Identidade | Nome | Caso de utilização | Permissões padrão | Traga a sua própria identidade |
---|---|---|---|---|
Plano de controlo | Nome do cluster AKS | Usado por componentes do plano de controle AKS para gerenciar recursos de cluster, incluindo balanceadores de carga de entrada e IPs públicos gerenciados pelo AKS, Autoscaler de Cluster, Disco do Azure, Arquivo, drivers CSI de Blob. | Função de colaborador para o grupo de recursos Nó | Suportado |
Kubelet | AKS Cluster-agentpool de nomes | Autenticação com o Azure Container Registry (ACR). | N/A (para kubernetes v1.15+) | Suportado |
Suplemento | AzureNPM | Não é necessária identidade. | N/A | Não |
Suplemento | Monitoramento de rede AzureCNI | Não é necessária identidade. | N/A | Não |
Suplemento | azure-policy (gatekeeper) | Não é necessária identidade. | N/A | Não |
Suplemento | azure-policy | Não é necessária identidade. | N/A | Não |
Suplemento | Calico | Não é necessária identidade. | N/A | Não |
Suplemento | Dashboard | Não é necessária identidade. | N/A | Não |
Suplemento | roteamento de aplicativos | Gerencia o DNS do Azure e os certificados do Azure Key Vault | Segredos do Cofre da Chave Função de utilizador para o Cofre da Chave, função de Colaborador da Zona DNZ para zonas DNS, função de Colaborador da Zona DNS Privada para zonas DNS privadas | Não |
Suplemento | HTTPApplicationRouting | Gerencia os recursos de rede necessários. | Função de leitor para grupo de recursos de nó, função de colaborador para zona DNS | Não |
Suplemento | Gateway de aplicativo de ingresso | Gerencia os recursos de rede necessários. | Função de colaborador para o grupo de recursos do nó | Não |
Suplemento | omsagent | Usado para enviar métricas AKS para o Azure Monitor. | Função de Publicador de Métricas de Monitoramento | Não |
Suplemento | Nó virtual (ACIConnector) | Gerencia os recursos de rede necessários para as Instâncias de Contêiner do Azure (ACI). | Função de colaborador para o grupo de recursos do nó | Não |
Suplemento | Análise de custos | Usado para coletar dados de alocação de custos | ||
Identidade da carga de trabalho | ID da carga de trabalho do Microsoft Entra | Permite que os aplicativos acessem recursos de nuvem com segurança com o ID de carga de trabalho do Microsoft Entra. | N/A | Não |
Habilitar identidades gerenciadas em um novo cluster AKS
Nota
O AKS cria uma identidade kubelet atribuída pelo usuário no grupo de recursos do nó se você não especificar sua própria identidade gerenciada pelo kubelet.
Nota
Se o cluster já estiver usando a identidade gerenciada e a identidade tiver sido alterada, por exemplo, você atualizar o tipo de identidade do cluster de atribuído pelo sistema para atribuído pelo usuário, haverá um atraso para que os componentes do plano de controle alternem para a nova identidade. Os componentes do plano de controle continuam usando a identidade antiga até que seu token expire. Depois que o token é atualizado, eles mudam para a nova identidade. Este processo pode demorar várias horas.
Crie um grupo de recursos do Azure usando o
az group create
comando.az group create --name myResourceGroup --location westus2
Crie um cluster AKS usando o
az aks create
comando.az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
Obtenha credenciais para acessar o cluster usando o
az aks get-credentials
comando.az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Habilitar identidades gerenciadas em um cluster AKS existente
Para atualizar seu cluster AKS existente que está usando uma entidade de serviço para usar uma identidade gerenciada atribuída ao sistema, execute o az aks update
comando.
az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity
Depois de atualizar o cluster, o plano de controle e os pods usam a identidade gerenciada. O Kubelet continua usando uma entidade de serviço até que você atualize seu agentpool. Você pode usar o az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only
comando em seus nós para atualizar para uma identidade gerenciada. Uma atualização do pool de nós causa tempo de inatividade para o cluster AKS, pois os nós nos pools de nós são isolados/drenados e recriados.
Nota
Lembre-se das seguintes informações ao atualizar o cluster:
Uma atualização só funciona se houver uma atualização 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.
A CLI do Azure garante que a permissão do seu addon seja definida corretamente após a migração. Se você não estiver usando a CLI do Azure para executar a operação de migração, precisará manipular 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-acr
para extrair imagens do Registro de Contêiner do Azure, você precisará executar oaz aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID>
comando depois de atualizar o cluster para permitir que o kubelet recém-criado usado para identidade gerenciada obtenha a permissão para extrair do ACR. Caso contrário, você não poderá extrair do ACR após a atualização.
Adicionar atribuição de função para identidade gerenciada
Quando você cria e usa sua própria rede virtual, anexa discos do Azure, endereço IP estático, tabela de rotas ou identidade kubelet atribuída pelo usuário onde os recursos estão fora do grupo de recursos do nó de trabalho, a CLI do Azure adiciona a atribuição de função automaticamente. Se você estiver usando um modelo ARM ou outro método, precisará usar a ID Principal da identidade gerenciada pelo cluster para executar uma atribuição de função.
Se você não estiver usando a CLI do Azure, mas estiver usando sua própria rede virtual, anexar discos do Azure, endereço IP estático, tabela de rotas ou identidade kubelet atribuída pelo usuário que esteja fora do grupo de recursos do nó de trabalho, recomendamos usar a identidade gerenciada atribuída pelo usuário para o plano de controle. Para que o plano de controle use uma identidade gerenciada atribuída ao sistema, não é possível obter a ID de identidade antes de criar o cluster, o que atrasa a atribuição de função de entrar em vigor.
Obter o ID principal da identidade gerenciada
Obtenha o ID principal da identidade existente usando o
az identity show
comando.az identity show --ids <identity-resource-id>
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", "location": "eastus", "name": "myIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Adicionar atribuição de função
Para uma rede virtual, disco do Azure anexado, endereço IP estático ou tabela de rotas fora do grupo de recursos do nó de trabalho padrão, você precisa atribuir a Contributor
função no grupo de recursos personalizado.
Atribua a
Contributor
função no grupo de recursos personalizado usando oaz role assignment create
comando.az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
Para uma identidade kubelet atribuída pelo usuário fora do grupo de recursos do nó de trabalho padrão, você precisa atribuir a função de Operador de Identidade Gerenciada na identidade kubelet para identidade gerenciada do plano de controle.
Atribua a
Managed Identity Operator
função na identidade kubelet usando oaz role assignment create
comando.az role assignment create --assignee <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
Nota
Pode levar até 60 minutos para que as permissões concedidas à identidade gerenciada do cluster sejam preenchidas.
Traga sua própria identidade gerenciada
Criar um cluster usando a identidade gerenciada atribuída pelo usuário
Uma identidade gerenciada personalizada atribuída pelo usuário para o plano de controle permite o acesso à identidade existente antes da criação do cluster. Esse recurso permite cenários como o uso de uma VNet personalizada ou outboundType de UDR com uma identidade gerenciada pré-criada.
Nota
As regiões USDOD Central, USDOD East e USGov Iowa na nuvem do Azure US Government não são suportadas.
O AKS cria uma identidade kubelet atribuída pelo usuário no grupo de recursos do nó se você não especificar sua própria identidade gerenciada pelo kubelet.
Se você não tiver uma identidade gerenciada, crie uma usando o
az identity create
comando.az identity create --name myIdentity --resource-group myResourceGroup
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", "location": "westus2", "name": "myIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Nota
Pode levar até 60 minutos para que as permissões concedidas à identidade gerenciada do cluster sejam preenchidas.
Antes de criar o cluster, adicione a atribuição de função para identidade gerenciada usando o
az role assignment create
comando.Crie o cluster com identidade gerenciada atribuída pelo usuário.
az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --network-plugin azure \ --vnet-subnet-id <subnet-id> \ --dns-service-ip 10.2.0.10 \ --service-cidr 10.2.0.0/24 \ --enable-managed-identity \ --assign-identity <identity-resource-id>
Atualizar identidade gerenciada em um cluster existente
Nota
A migração de uma identidade gerenciada para o plano de controle, de atribuída pelo sistema para atribuída pelo usuário, não causa nenhum tempo de inatividade para o plano de controle e os pools de agentes. Enquanto isso, os componentes do plano de controle continuam usando a antiga identidade atribuída ao sistema por várias horas até a próxima atualização de token.
Se você não tiver uma identidade gerenciada, crie uma usando o
az identity create
comando.az identity create --name myIdentity --resource-group myResourceGroup
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", "location": "westus2", "name": "myIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Depois de criar a identidade gerenciada personalizada atribuída pelo usuário para o plano de controle, adicione a atribuição de função para a identidade gerenciada usando o
az role assignment create
comando.Atualize seu cluster com suas identidades existentes usando o
az aks update
comando. Certifique-se de fornecer a ID de recurso da identidade gerenciada para o plano de controle incluindo oassign-identity
argumento.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-managed-identity \ --assign-identity <identity-resource-id>
Sua saída para uma atualização de cluster bem-sucedida usando sua própria identidade gerenciada kubelet deve ser semelhante à saída de exemplo a seguir:
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": { "clientId": "<client-id>", "principalId": "<principal-id>" } } },
Use uma identidade gerenciada kubelet pré-criada
Uma identidade kubelet permite o acesso à identidade existente antes da criação do cluster. Esse recurso permite cenários como conexão com ACR com uma identidade gerenciada pré-criada.
Limitações de identidade kubelet pré-criadas
- Só funciona com um cluster gerenciado atribuído pelo usuário.
- As regiões Leste da China e Norte da China no Microsoft Azure operadas pela 21Vianet não são suportadas.
Criar identidades gerenciadas atribuídas pelo usuário
Identidade gerenciada do plano de controle
Se você não tiver uma identidade gerenciada para o plano de controle, crie uma usando o
az identity create
.az identity create --name myIdentity --resource-group myResourceGroup
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", "location": "westus2", "name": "myIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
identidade gerenciada kubelet
Se você não tiver uma identidade gerenciada pelo kubelet, crie uma usando o
az identity create
comando.az identity create --name myKubeletIdentity --resource-group myResourceGroup
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", "location": "westus2", "name": "myKubeletIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Criar um cluster usando a identidade kubelet atribuída pelo usuário
Agora você pode criar seu cluster AKS com suas identidades existentes. Certifique-se de fornecer o ID de recurso da identidade gerenciada para o plano de controle incluindo o assign-identity
argumento e a identidade gerenciada kubelet usando o assign-kubelet-identity
argumento.
Crie um cluster AKS com suas identidades existentes usando o
az aks create
comando.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --network-plugin azure \ --vnet-subnet-id <subnet-id> \ --dns-service-ip 10.2.0.10 \ --service-cidr 10.2.0.0/24 \ --enable-managed-identity \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id>
Uma criação de cluster AKS bem-sucedida usando sua própria identidade gerenciada kubelet deve ser semelhante à seguinte saída de exemplo:
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": { "clientId": "<client-id>", "principalId": "<principal-id>" } } }, "identityProfile": { "kubeletidentity": { "clientId": "<client-id>", "objectId": "<object-id>", "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity" } },
Atualizar um cluster existente usando a identidade kubelet
Aviso
A atualização da identidade gerenciada kubelet atualiza os pools de nós, o que causa tempo de inatividade para o cluster AKS à medida que os nós nos pools de nós são isolados/drenados e recriados.
Nota
Se o cluster estava usando --attach-acr
para extrair imagens do Registro de Contêiner do Azure, você precisará executar o az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID>
comando depois de atualizar o cluster para permitir que o kubelet recém-criado usado para identidade gerenciada obtenha a permissão para extrair do ACR. Caso contrário, você não poderá extrair do ACR após a atualização.
Obtenha a identidade gerenciada do plano de controle atual para seu cluster AKS
Confirme se o cluster AKS está usando a identidade gerenciada atribuída pelo usuário usando o
az aks show
comando.az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
Se o cluster estiver usando uma identidade gerenciada, a saída será exibida
clientId
com um valor msi. Um cluster usando uma entidade de serviço mostra uma ID de objeto. Por exemplo:{ "clientId": "msi" }
Depois de confirmar que o cluster está usando uma identidade gerenciada, localize o ID de recurso da identidade gerenciada usando o
az aks show
comando.az aks show -g <RGName> -n <ClusterName> --query "identity"
Para uma identidade gerenciada atribuída pelo usuário, sua saída deve ser semelhante à saída de exemplo a seguir:
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": <identity-resource-id> "clientId": "<client-id>", "principalId": "<principal-id>" },
Atualize seu cluster com a identidade kubelet
Se você não tiver uma identidade gerenciada pelo kubelet, crie uma usando o
az identity create
comando.az identity create --name myKubeletIdentity --resource-group myResourceGroup
Sua saída deve ser semelhante à saída de exemplo a seguir:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", "location": "westus2", "name": "myKubeletIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Atualize seu cluster com suas identidades existentes usando o
az aks update
comando. Certifique-se de fornecer o ID de recurso da identidade gerenciada para o plano de controle incluindo oassign-identity
argumento e a identidade gerenciada kubelet paraassign-kubelet-identity
argumento.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-managed-identity \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id>
Sua saída para uma atualização de cluster bem-sucedida usando sua própria identidade gerenciada kubelet deve ser semelhante à saída de exemplo a seguir:
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": { "clientId": "<client-id>", "principalId": "<principal-id>" } } }, "identityProfile": { "kubeletidentity": { "clientId": "<client-id>", "objectId": "<object-id>", "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity" } },
Próximos passos
- Use os modelos do Azure Resource Manager para criar um cluster gerenciado habilitado para identidade.
- Saiba como [usar kubelogin][kubelogin-authentication] para todos os métodos de autenticação Microsoft Entra suportados no AKS.