Usar o controle de acesso baseado em função do Azure para autorização do Kubernetes
Ao aproveitar 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 identidades e credenciais de usuários separadamente para o Kubernetes. No entanto, você ainda precisa configurar e gerenciar o RBAC do Azure e o RBAC do Kubernetes separadamente.
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.
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
.
az group create --name myResourceGroup --location westus2
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
.
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac
A saída será parecida com o 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
Adicione o RBAC do Azure para autorização de Kubernetes em um cluster existente do AKS, usando o comando az aks update
com o sinalizador enable-azure-rbac
.
az aks update -g myResourceGroup -n myAKSCluster --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 -g myResourceGroup -n myAKSCluster --disable-azure-rbac
Criar atribuições de função para usuários acessarem o cluster
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. |
Atribuições de função com escopo definido para todo o cluster do AKS podem ser feitas na folha de Controle de Acesso (IAM) do recurso de cluster no portal do Azure ou usando os seguintes comandos da CLI do Azure:
Obtenha sua ID de recurso do AKS usando o comando az aks show
.
AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o 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.
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>
Observação
No portal do Azure, depois de criar atribuições de função com escopo para um namespace desejado, você não poderá ver "atribuições de função" para o namespace em um escopo. Você pode encontrá-lo usando o comando az role assignment list
, ou listar atribuições de função para um usuário ou grupo ao qual atribuiu a função.
az role assignment list --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 como deploy-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 arquivo deploy-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 -g myResourceGroup -n myManagedCluster
Agora você pode usar kubectl
para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usando kubectl get nodes
. Na primeira vez que executá-lo, você precisará entrar, conforme mostrado no exemplo a seguir:
kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
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 usar o plugin kubelogin
executando o seguinte comando:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig
Semelhante ao kubectl
, você precisa fazer logon na primeira vez que executá-lo, conforme mostrado no exemplo a seguir:
kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
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 recursos
Excluir atribuição de função
# List role assignments
az role assignment list --scope $AKS_ID --query [].id -o tsv
# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Excluir definição de função
az role definition delete -n "AKS Deployment Reader"
Excluir grupo de recursos e cluster do AKS
az group delete -n myResourceGroup
Próximas etapas
Para saber mais sobre autenticação do AKS, autorização, RBAC do Kubernetes e RBAC do Azure, confira: