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.
Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard
Este artigo mostra como autorizar chamadas para a API do Kubernetes no AKS (Serviço de Kubernetes do Azure) usando identidades Microsoft Entra ID. A autorização do Microsoft Entra ID para a API do Kubernetes usa atribuições de função do Azure RBAC para conceder acesso aos recursos do Kubernetes. Para recursos nativos do Kubernetes, atribua uma das funções internas do AKS (como Leitor de RBAC do Serviço de Kubernetes do Azure) no escopo do cluster ou namespace. Para recursos personalizados (CRDs), atribua uma função personalizada com condições do Azure ABAC que especifiquem a quais grupos ou tipos de CRD o destinatário tem acesso. As duas atribuições de função consistem no seguinte: uma concede acesso a recursos padrão do Kubernetes, e a outra concede acesso condicional a recursos personalizados específicos.
Para a maioria das cargas de trabalho de produção, o AKS Automático é a opção padrão recomendada pronta para produção para o AKS. Os clusters do AKS Automático são pré-configurados com a autorização RBAC do Azure para Kubernetes, para que você possa se concentrar em atribuir as funções corretas do Microsoft Entra a usuários, grupos e entidades de serviço.
Para obter uma visão geral conceitual das opções de autorização de API do Kubernetes disponíveis no AKS, consulte os conceitos de autorização de cluster.
Note
Ao usar a autenticação integrada entre a ID do Microsoft Entra e o AKS, você pode usar usuários, grupos ou entidades de serviço do Microsoft Entra como entidades no RBAC (controle de acesso baseado em função) do Kubernetes. Usando Microsoft Entra ID autorização, você não precisa gerenciar separadamente as identidades e as credenciais do usuário para o Kubernetes. No entanto, você ainda precisa configurar e gerenciar separadamente as atribuições de função do Microsoft Entra ID e quaisquer vinculações de RBAC do Kubernetes.
Note
Os clusters automáticos do AKS são pré-configurados para usar Azure RBAC para autorização do Kubernetes. Você não precisa habilitar --enable-azure-rbac em clusters automáticos do AKS. No AKS Standard, você pode habilitar ou desabilitar Azure RBAC com base na configuração do cluster.
Prerequisites
- Você precisa da CLI do Azure versão 2.24.0 ou posterior instalada e configurada. Execute
az --versionpara encontrar a versão. Se precisar instalar ou atualizar, consulte Instalar CLI do Azure. - Você precisa
kubectl, com uma versão mínima de 1.18.3. - Você precisa ter a integração gerenciada do Microsoft Entra habilitada no seu cluster antes de poder adicionar a autorização do Microsoft Entra ID para a API do Kubernetes. Se você precisar habilitar a integração gerenciada do Microsoft Entra, consulte Usar a ID do Microsoft Entra no AKS.
- Novas atribuições de função podem levar até cinco minutos para serem propagadas e atualizadas pelo servidor de autorização.
- A autorização do Microsoft Entra ID para a API do Kubernetes exige que o locatário do Microsoft Entra configurado para autenticação seja o mesmo que o locatário da assinatura que hospeda seu cluster do AKS.
Comportamento do modo de cluster do AKS
| Modo de agrupamento | Azure RBAC para Autorização do Kubernetes |
|---|---|
| AKS Automático | Pré-configurado (habilitado por padrão) |
| AKS Standard | Opcional (habilitar com --enable-azure-rbac) |
Criar um novo cluster do AKS com integração gerenciada do Microsoft Entra e autorização do Microsoft Entra ID
AKS Automático (recomendado para cargas de trabalho de produção)
Para novas cargas de trabalho de produção, use o AKS Automatic. O Azure RBAC para autorização do Kubernetes é pré-configurado em clusters AKS Automatic.
Crie um cluster automático do AKS seguindo Criar um cluster do AKS (Serviço de Kubernetes do Azure) Automático.
Opcional: verifique se a autorização do Azure RBAC para Kubernetes está habilitada em seu cluster usando o comando
az aks show.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "aadProfile.enableAzureRbac" \ --output tsv
AKS Standard
Crie um grupo de recursos Azure usando o comando
az group create.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONCrie um cluster do AKS Standard com integração gerenciada com o Microsoft Entra e autorização do Microsoft Entra ID usando o comando
az aks create.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysSeu resultado deve ser semelhante ao seguinte exemplo de saída:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Habilitar a autorização do Microsoft Entra ID em um cluster AKS existente
Para clusters do AKS Padrão existentes, habilite a autorização do Microsoft Entra ID para a API do Kubernetes usando o comando az aks update com o sinalizador --enable-azure-rbac.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Enable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Os clusters automáticos do AKS já vêm com o Azure RBAC para autorização do Kubernetes pré-configurado. Você não precisa executar --enable-azure-rbac para o AKS Automatic.
Funções predefinidas do AKS
O AKS fornece as seguintes funções internas:
| Função | Descrição |
|---|---|
| Leitor do RBAC do Serviço de Kubernetes do Azure | Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Não permite exibir funções nem associações de função. Essa função não permite a exibição de Secrets, pois a leitura do conteúdo dos Segredos permite acesso às credenciais de ServiceAccount no namespace, o que permitiria acesso à API como qualquer ServiceAccount no namespace (uma forma de elevação de privilégio). |
| Gravador do RBAC do Serviço de Kubernetes do Azure | Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Essa função não permite exibir ou modificar funções ou associações de função. No entanto, essa função permite acessar Secrets e executar Pods como qualquer ServiceAccount no namespace, portanto, ela pode ser usada para obter os níveis de acesso à API de qualquer ServiceAccount no namespace. |
| Administrador do RBAC do Serviço de Kubernetes do Azure | Permite acesso de administrador, destinado a ser concedido em um namespace. Permite acesso de leitura/gravação para a maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função no namespace. Essa função não permite acesso de gravação à cota de recursos ou ao próprio namespace. |
| Administrador do cluster RBAC do Serviço de Kubernetes do Azure | Permite o acesso de superusuário para executar ações em qualquer recurso. Ele fornece controle total sobre todos os recursos no cluster e em todos os namespaces. |
Criar atribuições de função para acesso ao cluster
Obtenha sua ID de recurso do AKS usando o
az aks showcomando.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)Crie uma atribuição de função usando o
az role assignment createcomando.<AAD-ENTITY-ID>pode ser um nome de usuário ou a ID do cliente de uma entidade de serviço. O exemplo a seguir cria uma atribuição de função para a função de administrador do RBAC Serviço de Kubernetes do Azure.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the Azure Kubernetes Service RBAC Admin role az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_IDNote
Você pode criar as atribuições das funções Serviço de Kubernetes do Azure RBAC Reader e Serviço de Kubernetes do Azure RBAC Writer com escopo definido para um namespace específico dentro do cluster usando o comando
az role assignment createe definindo o escopo para o namespace desejado.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Criar definições de funções personalizadas
Para recursos integrados do Kubernetes, as definições de funções personalizadas fazem referência às ações do grupo de API correspondente em Microsoft.ContainerService/managedClusters/. O exemplo a seguir permite que um usuário apenas leia as implantações e nada mais. Para obter a lista completa de possíveis ações, consulte as operações Microsoft.ContainerService.
Para recursos personalizados, a função personalizada deve conceder a ação de dados de recursos personalizados aplicável, como Microsoft.ContainerService/managedClusters/customresources/read. Uma função personalizada por si só não filtra o acesso por grupo ou tipo de CRD (definição de recurso personalizado). Para aplicar essa filtragem, adicione uma condição ABAC do Azure à atribuição de função. Para o procedimento completo, consulte Restringir o acesso a recursos personalizados usando condições ABAC.
Para criar suas próprias definições de função personalizadas, copie o arquivo a seguir, substitua
<YOUR-SUBSCRIPTION-ID>por sua própria ID de assinatura e salve-o comodeploy-view.json.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR-SUBSCRIPTION-ID>" ] }Crie a definição de função usando o comando
az role definition create, definindo--role-definitionpara o arquivodeploy-view.jsonque você criou na etapa anterior.az role definition create --role-definition @deploy-view.jsonAtribua a definição de função a um usuário ou outra identidade usando o
az role assignment createcomando.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS Deployment Reader role az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Restringir o acesso a recursos personalizados usando condições ABAC (versão prévia)
Importante
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
As condições ABAC permitem filtrar atribuições de função do Microsoft Entra ID para grupos e tipos específicos de recursos personalizados (CRD) – centralmente, direto do Microsoft Entra ID, sem precisar criar manifestos Role e RoleBinding de RBAC do Kubernetes por cluster. Para obter informações sobre Azure ABAC, consulte O que são condições de atribuição de função Azure?
Quando usar condições ABAC
Use esse recurso quando quiser:
- Restrinja quais grupos ou tipos de CRD um designado pode listar ou obter.
- Aplique centralmente limites de acesso a recursos personalizados a partir do Microsoft Entra ID sem precisar gerenciar o RBAC do Kubernetes e os objetos
RoleeRoleBindingem cada cluster. - Distinguir entre CRDs publicados por diferentes operadores (por exemplo, permitir
secrets-store.csi.x-k8s.ioenquanto bloqueiasecurity.istio.io).
Atributos de condição disponíveis
Os seguintes atributos de solicitação estão disponíveis ao criar condições para a API do Kubernetes em um cluster do AKS:
| Attribute | Descrição |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
O grupo de API do recurso personalizado que está sendo acessado (por exemplo, secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
O tipo do recurso personalizado que está sendo acessado (por exemplo, secretproviderclasses). |
Adicionar uma condição ABAC a uma atribuição de função
O exemplo a seguir cria uma função personalizada de Leitor de CRD do AKS que concede acesso de leitura a recursos personalizados. Em seguida, ele atribui a função com uma condição que só permite acesso a secretproviderclasses no grupo secrets-store.csi.x-k8s.io (o CRD usado pelo provedor do Azure Key Vault para o Secrets Store CSI Driver).
Salve a definição de função a seguir em um arquivo nomeado
crd-reader.json, substituindo<YOUR-SUBSCRIPTION-ID>por sua própria ID de assinatura.{ "Name": "AKS CRD Reader", "Description": "Lets you read custom resources in the cluster.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/customresources/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR-SUBSCRIPTION-ID>" ] }Crie a definição de função usando o
az role definition createcomando.az role definition create --role-definition @crd-reader.jsonSalve a seguinte condição em um arquivo chamado
abac-condition.txt. A condição permite que leituras de recursos não personalizados passem inalteradas e restringe leituras de recursos personalizados a um grupo e tipo específicos.( ( !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'}) ) OR ( @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io' AND @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses' ) )Crie a atribuição de função com a condição usando o
az role assignment createcomando.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS CRD Reader role with an ABAC condition az role assignment create \ --role "AKS CRD Reader" \ --assignee <AAD-ENTITY-ID> \ --scope $AKS_ID \ --condition "$(cat abac-condition.txt)" \ --condition-version "2.0" \ --description "Allow reads on SecretProviderClass resources only"
Você também pode adicionar uma condição por meio do portal do Azure. Na página Adicionar atribuição de função , selecione a guia Condições e, em seguida, selecione Adicionar condição e use o editor visual para criar a expressão.
Verificar a condição
Após a propagação da atribuição de função (o que pode levar até cinco minutos), faça login como o usuário designado e confirme se ele consegue ler o CRD autorizado, mas não os demais CRDs.
Obtenha as credenciais do cluster usando o
az aks get-credentialscomando.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the cluster credentials az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMELista
secretproviderclassesdo gruposecrets-store.csi.x-k8s.io, conforme permitido pela condição. O comando deve ter êxito e retornar os recursos existentes ou uma lista vazia (ou um erro não encontrado se o CRD não estiver instalado no cluster).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesLista
authorizationpoliciesdo grupo Istiosecurity.istio.ioque a condição bloqueia. O comando deve falhar com um erroForbiddendireto do webhook de autorização do Microsoft Entra ID (supondo que o CRD do Istio esteja instalado no cluster; caso contráriokubectlretorna um erro de página não encontrada antes que o servidor da API chegue ao webhook de autorização).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Limpar os recursos
Desabilitar a autorização do Microsoft Entra ID
Remova a autorização do Microsoft Entra ID usando o comando az aks update com a opção --disable-azure-rbac.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Disable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Excluir atribuição de função
Listar atribuições de função usando o
az role assignment listcomando.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # List role assignments for the AKS cluster az role assignment list --scope $AKS_ID --query [].id --output tsvExclua as atribuições de função usando o
az role assignment deletecomando.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Excluir definição de função
Exclua uma definição de função personalizada usando o az role definition delete comando.
az role definition delete --name "AKS Deployment Reader"
Excluir o grupo de recursos e o cluster AKS
Exclua o grupo de recursos (e o cluster do AKS que ele contém) usando o az group delete comando.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
# Delete the resource group and all resources in it
az group delete --name $RESOURCE_GROUP --yes --no-wait
Conteúdo relacionado
Para saber mais sobre o AKS, confira os seguintes artigos: