Usar o controle de acesso baseado em função do Azure para autorização do Kubernetes
Este artigo aborda como usar o RBAC do Azure para Autorização do Kubernetes, o que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, AKS e Kubernetes. Para saber mais, confira RBAC do Azure para autorização do Kubernetes.
Observação
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 de controle de acesso baseado em função (RBAC do Kubernetes) do Kubernetes. Com esse recurso, você não precisa gerenciar separadamente identidades e credenciais de usuários para o Kubernetes. No entanto, você ainda precisa configurar e gerenciar o RBAC do Azure e o RBAC do Kubernetes separadamente.
Antes de começar
- Será necessária a CLI do Azure versão 2.24.0 ou posterior instalada e configurada. Execute
az --version
para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure. - Você precisa de
kubectl
, com uma versão mínima de 1.18.3. - Você precisa da integração gerenciada do Microsoft Entra habilitada no seu cluster antes de adicionar o RBAC do Azure para autorização do Kubernetes. Se você precisar habilitar a integração gerenciada do Microsoft Entra, consulte Usar a ID do Microsoft Entra no AKS.
- Se você tem CRDs e está fazendo definições de função personalizadas, a única maneira de cobrir CRDs hoje é usar
Microsoft.ContainerService/managedClusters/*/read
. Para os objetos restantes, você pode usar Grupos de API específicos, como:Microsoft.ContainerService/apps/deployments/read
. - Novas atribuições de função podem levar até cinco minutos para serem propagadas e atualizadas pelo servidor de autorização.
- O RBAC do Azure para Autorização do Kubernetes requer que o locatário do Microsoft Entra configurado para autenticação seja o mesmo que o locatário da assinatura que contém o cluster do AKS.
Crie um novo cluster do AKS com a integração gerenciada do Microsoft Entra e RBAC do Azure para Autorização do Kubernetes
Crie um grupo de recursos do Azure usando o comando
az group create
.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
Crie um cluster do AKS com a integração gerenciada do Microsoft Entra e o RBAC do Azure para Autorização do Kubernetes 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-keys
Seu 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 o RBAC do Azure em um cluster AKS existente
Habilite o RBAC do Azure para autorização do Kubernetes em um cluster existente do AKS, usando o comando
az aks update
com o sinalizador--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Desabilitar a autorização do RBAC do Azure para Kubernetes de um cluster do AKS
Remova o RBAC do Azure para autorização de Kubernetes de um cluster existente do AKS, usando o comando
az aks update
com o sinalizador--disable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Funções internas do AKS
O AKS fornece as seguintes funções internas:
Função | Descrição |
---|---|
Leitor de 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 de 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 uma ServiceAccount no namespace, de modo que ela pode ser usada para obter os níveis de acesso de API de qualquer conta no namespace. |
Administrador do RBAC do Serviço de Kubernetes do Azure | Permite o 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 do RBAC do Serviço de Kubernetes do Azure | Permite o acesso de superusuário para executar ações em qualquer recurso. Fornece controle total sobre cada recurso 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 comando
az aks show
.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 comando
az role assignment create
.<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 do Serviço de Kubernetes do Azure.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Observação
Você pode criar as atribuições de função RBACLeitor do Serviço de Kubernetes do Azure e Gravador dedo Serviço de Kubernetes do Azure com escopo para um namespace específico dentro do cluster usando o comando
az role assignment create
e 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ção personalizadas
Veja a seguir um exemplo de definição de função personalizada que permite que um usuário leia somente implantações e nada mais. Para obter a lista completa de possíveis ações, consulte Operações do Microsoft.ContainerService.
Para criar suas próprias definições de função personalizadas, copie o arquivo a seguir, substituindo
<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-definition
como arquivodeploy-view.json
que você criou na etapa anterior.az role definition create --role-definition @deploy-view.json
Atribua a definição de função a um usuário ou outra identidade usando o comando
az role assignment create
.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Usar o RBAC do Azure para Autorização do Kubernetes com kubectl
Verifique se você tem a função interna Usuário de Cluster do Serviço de Kubernetes do Azure e obtenha o kubeconfig do cluster do AKS usando o comando
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Agora você pode usar
kubectl
para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usandokubectl get nodes
.kubectl get nodes
Exemplo de saída:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Usar o RBAC do Azure para Autorização do Kubernetes com kubelogin
O AKS criou o plug-in kubelogin
para ajudar a desbloquear cenários adicionais, como logons não interativos, versões mais antigas do kubectl
ou aproveitar o SSO em vários clusters sem a necessidade de entrar em um novo cluster.
Você pode use o plugin
kubelogin
executando o seguinte comando:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Agora você pode usar
kubectl
para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usandokubectl get nodes
.kubectl get nodes
Exemplo de saída:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Limpar os recursos
Excluir atribuição de função
Listar atribuições de função usando o comando
az role assignment list
.az role assignment list --scope $AKS_ID --query [].id --output tsv
Exclua atribuições de função usando o comando
az role assignment delete
.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Excluir definição de função
Exclua a definição de função personalizada usando o comando
az role definition delete
.az role definition delete --name "AKS Deployment Reader"
Excluir grupo de recursos e cluster do AKS
Exclua o grupo de recursos e o cluster do AKS usando o comando
az group delete
.az group delete --name $RESOURCE_GROUP --yes --no-wait
Próximas etapas
Para saber mais sobre autenticação do AKS, autorização, RBAC do Kubernetes e RBAC do Azure, confira:
Azure Kubernetes Service