Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard
Este artigo mostra como autorizar chamadas para a API Kubernetes no Azure Kubernetes Service (AKS) utilizando identidades do Microsoft Entra ID. A autorização do Microsoft Entra ID para a API Kubernetes utiliza atribuições de funções Azure RBAC para conceder acesso aos recursos Kubernetes. Para recursos Kubernetes incorporados, atribua um dos papéis incorporados do AKS (como o Azure Kubernetes Service RBAC Reader) no âmbito do cluster ou namespace. Para recursos personalizados (CRDs), atribua uma função personalizada com condições Azure ABAC que especifiquem a quais grupos ou tipos de CRD o destinatário pode aceder. As duas atribuições de função são compostas por: uma concede acesso aos 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 Automatic é a opção predefinida pronta para produção recomendada para o AKS. Os clusters automáticos do AKS estão pré-configurados com autorização Azure RBAC para Kubernetes, para que possa concentrar-se em atribuir as atribuições corretas de funções Microsoft Entra a utilizadores, grupos e principais de serviço.
Para uma visão conceptual das opções de autorização da API Kubernetes disponíveis no AKS, consulte conceitos de autorização de cluster.
Note
Quando utiliza autenticação integrada entre o Microsoft Entra ID e o AKS, pode usar utilizadores, grupos ou entidades de serviço do Microsoft Entra como sujeitos no controlo de acesso baseado em papéis Kubernetes (Kubernetes RBAC). Ao usar a autorização Microsoft Entra ID, não precisa de gerir separadamente as identidades e credenciais dos utilizadores para o Kubernetes. No entanto, continua a ser necessário configurar e gerir, em separado, as atribuições de funções do Microsoft Entra ID e quaisquer associações RBAC do Kubernetes.
Note
Os clusters automáticos do AKS estão pré-configurados para usar o Azure RBAC para a autorização do Kubernetes. Não precisas de ativar --enable-azure-rbac nos clusters automáticos do AKS. No AKS Standard, pode ativar ou desativar o Azure RBAC consoante a configuração do seu cluster.
Prerequisites
- Precisas que a versão 2.24.0 ou posterior do CLI do Azure esteja instalada e configurada. Executar
az --versionpara localizar a versão. Se precisar de instalar ou atualizar, consulte Install CLI do Azure. - Precisas de
kubectl, com uma versão mínima da 1.18.3. - Precisa de ter a integração gerida com o Microsoft Entra ativada no seu cluster antes de poder adicionar a autorização do Microsoft Entra ID para a API Kubernetes. Se precisar de ativar a integração gerida com o Microsoft Entra, consulte Usar o ID 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 inquilino do Microsoft Entra configurado para autenticação seja o mesmo inquilino da subscrição que contém o seu cluster do AKS.
Comportamento do modo cluster do AKS
| Modo de cluster | Azure RBAC para autorização no Kubernetes |
|---|---|
| AKS Automático | Pré-configurado (ativado por defeito) |
| Padrão AKS | Opcional (ativar com --enable-azure-rbac) |
Criar um novo cluster AKS com integração gerida com Microsoft Entra e autorização Microsoft Entra ID
AKS Automática (recomendado para cargas de trabalho de produção)
Para novas cargas de produção, use o AKS Automatic. A autorização Azure RBAC for Kubernetes está pré-configurada em clusters automáticos AKS.
Crie um cluster automático AKS seguindo Criar um cluster automático Azure Kubernetes Service (AKS).
Opcional: verifique se a autorização Azure RBAC for Kubernetes está ativada no seu cluster usando o
az aks showcomando.# 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
Padrão AKS
Crie um grupo de recursos do Azure usando o
az group createcomando.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONCrie um cluster AKS Standard com integração gerida com Microsoft Entra e autorização Microsoft Entra ID usando o
az aks createcomando.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysSua saída deve ser semelhante à saída de exemplo a seguir:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Ative a autorização do Microsoft Entra ID num cluster AKS existente
Para clusters AKS Standard existentes, ative a autorização do Microsoft Entra ID para a API Kubernetes usando o az aks update comando com a --enable-azure-rbac bandeira.
# 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á têm a autorização Azure RBAC for Kubernetes pré-configurada. Não é preciso executar --enable-azure-rbac para o AKS Automatic.
Funções predefinidas no AKS
O AKS fornece as seguintes funções incorporadas:
| Função | Description |
|---|---|
| Azure Kubernetes Service RBAC Reader | Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Ele não permite a visualização de funções ou associações de funções. Esta função não permite visualizar Secrets, pois ler o conteúdo dos Secrets possibilita o acesso às credenciais do ServiceAccount no namespace, o que permitiria acesso à API como qualquer ServiceAccount no namespace (uma forma de escalonamento de privilégios). |
| Escritor RBAC do Serviço Kubernetes do Azure | Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Esta função não permite visualizar ou modificar funções ou associações de funções. No entanto, este papel permite aceder Secrets e executar Pods como qualquer ServiceAccount no namespace, podendo assim ser usado para obter os níveis de acesso à API de qualquer ServiceAccount no namespace. |
| Azure Kubernetes Service RBAC Admin | Permite acesso de administrador, destinado a ser concedido dentro de um namespace. Permite acesso de leitura/gravação à maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função dentro do namespace. Esta função não permite acesso de escrita à quota de recursos nem ao próprio namespace. |
| Azure Kubernetes Service RBAC Cluster Admin | Permite o acesso de superusuário para executar qualquer ação em qualquer recurso. Dá controlo total sobre todos os recursos no cluster e em todos os namespaces. |
Criar atribuições de funções para acesso a clusters
- CLI do Azure
- portal do Azure
Obtenha o ID do seu recurso 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 utilizador ou o ID do cliente de um principal de serviço. O exemplo seguinte cria uma atribuição de papel para o papel de Administrador RBAC do Azure Kubernetes Service.# 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
Pode criar as atribuições de funções Azure Kubernetes Service RBAC Reader e Azure Kubernetes Service RBAC Writer delimitadas a um namespace específico no cluster, utilizando o comando
az role assignment createe definindo o âmbito para o namespace pretendido.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 Kubernetes incorporados, as definições de funções personalizadas referenciam a ação do grupo de API correspondente sob Microsoft.ContainerService/managedClusters/. O exemplo seguinte permite ao utilizador ler apenas implementações e nada mais. Para a lista completa de possíveis ações, consulte as operações do Microsoft.ContainerService.
Para recursos personalizados, a função personalizada tem de conceder a ação de dados do recurso personalizado aplicável, como Microsoft.ContainerService/managedClusters/customresources/read. Uma função personalizada só por si não filtra o acesso por grupo ou tipo de definição de recurso personalizado (CRD). Para aplicar essa filtragem, adicione uma condição Azure ABAC à atribuição de funções. Para o procedimento completo, veja Restringir o acesso a recursos personalizados usando condições ABAC.
Para criar as suas próprias definições de funções personalizadas, copie o ficheiro seguinte, substitua
<YOUR-SUBSCRIPTION-ID>pelo seu próprio ID de subscrição e depois guarde-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
az role definition createcomando, definindo o--role-definitionpara odeploy-view.jsonficheiro que criou no passo anterior.az role definition create --role-definition @deploy-view.jsonAtribuir a definição de função a um utilizador 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 (prévia)
Importante
Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
As condições ABAC permitem-lhe filtrar as atribuições de funções do Microsoft Entra ID para grupos e tipos específicos de recursos personalizados (CRD) — de forma centralizada, no Microsoft Entra ID, sem escrever manifestos Role de RBAC do Kubernetes e RoleBinding do Kubernetes para cada cluster. Para contexto sobre o Azure ABAC, veja Quais são as condições de atribuição de funções no Azure?
Quando usar as condições ABAC
Use esta funcionalidade quando quiser:
- Restringa que grupos ou tipos de CRD um cessionário pode listar ou obter.
- Aplicar limites personalizados de acesso a recursos de forma centralizada a partir do Microsoft Entra ID, sem a necessidade de gerir o RBAC do Kubernetes e os objetos em cada cluster.
- Distinguir entre CRDs publicados por diferentes operadores (por exemplo, permitir
secrets-store.csi.x-k8s.ioao mesmo tempo que bloqueiasecurity.istio.io).
Atributos de condição disponíveis
Os seguintes atributos de pedido estão disponíveis ao criar condições para a API Kubernetes num cluster AKS:
| Attribute | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
O grupo de API do recurso personalizado acedido (por exemplo, secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
O tipo do recurso personalizado a ser acedido (por exemplo, secretproviderclasses). |
Adicionar uma condição ABAC a uma atribuição de função
O exemplo seguinte cria a função personalizada AKS CRD Reader, que concede acesso de leitura a recursos personalizados. Depois, atribui a função com uma condição que só permite o acesso a secretproviderclasses no grupo secrets-store.csi.x-k8s.io (o CRD utilizado pelo fornecedor Azure Key Vault para o Secrets Store CSI Driver).
Guarde a seguinte definição de função num ficheiro chamado
crd-reader.json, substituindo<YOUR-SUBSCRIPTION-ID>pelo seu próprio ID de subscrição.{ "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 do papel usando o
az role definition createcomando.az role definition create --role-definition @crd-reader.jsonGuardar a seguinte condição num ficheiro chamado
abac-condition.txt. A condição permite que leituras de recursos não personalizadas passem sem alterações e restringe leituras personalizadas 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ções 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"
Também podes adicionar uma condição através do portal Azure. Na página Adicionar atribuição de funções , selecione o separador Condições , depois selecione Adicionar condição e use o editor visual para construir a expressão.
Verificar a condição
Depois de a atribuição da função se propagar (até cinco minutos), inicie sessão como designado e confirme que consegue ler o CRD permitido, mas não outros 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, permitido pela condição. O comando deve ter sucesso e devolver ou os recursos existentes ou uma lista vazia (ou um erro de 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.io, bloqueada pela condição. O comando deve falhar com umForbiddenerro do webhook de autorização do Microsoft Entra ID (assumindo que o CRD Istio está instalado no cluster; caso contráriokubectl, retorna um erro não encontrado antes do servidor API chegar ao webhook de autorização).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Limpeza de recursos
Desativar a autorização do Microsoft Entra ID
Remover a autorização do Microsoft Entra ID usando o az aks update comando com a --disable-azure-rbac bandeira.
# 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
- CLI do Azure
- portal do Azure
Liste as atribuições de funções 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 tsvApaga as atribuições de funções usando o
az role assignment deletecomando.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Excluir definição de função
Elimine uma definição de função personalizada usando o az role definition delete comando.
az role definition delete --name "AKS Deployment Reader"
Eliminar grupo de recursos e cluster AKS
- CLI do Azure
- portal do Azure
Elimina o grupo de recursos (e o cluster 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, consulte os seguintes artigos: