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: