Usar o controle de acesso baseado em função do Azure para definir o acesso ao arquivo de configuração do Kubernetes no AKS (Serviço de Kubernetes do Azure)

Você pode interagir com um cluster Kubernetes usando a ferramenta kubectl. A CLI do Azure fornece uma maneira fácil de obter as credenciais de acesso e informações de arquivo de configuração kubeconfig para se conectar aos seus clusters do AKS usando o kubectl. Você pode usar o RBAC (controle de acesso baseado em função) do Azure para limitar quem pode obter acesso ao arquivo kubeconfig e as permissões que eles têm.

Este artigo mostra como atribuir funções do Azure que limitam quem pode obter as informações de configuração para um cluster do AKS.

Antes de começar

  • Este artigo considera que já existe um cluster do AKS. Se você precisar de um cluster do AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
  • Este artigo exige que você esteja executando a versão 2.0.65 ou posterior da CLI do Azure. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Permissões disponíveis para funções de cluster

Quando você interage com um cluster do AKS usando a ferramenta kubectl, um arquivo de configuração, chamado kubeconfig, define as informações de conexão do cluster. Esse arquivo de configuração normalmente é armazenado em ~/.kube/config. Vários clusters podem ser definidos neste arquivo kubeconfig. Você pode alternar entre clusters usando o comando kubectl config use-context.

O comando az aks get-credentials permite que você obtenha as credenciais de acesso para um cluster do AKS e mescle-as ao arquivo kubeconfig. Você pode usar o RBAC do Azure para controlar o acesso a essas credenciais. Essas funções do Azure permitem que você defina quem pode recuperar o arquivo kubeconfig e, se alguém o fizer, quais permissões esse alguém terá dentro do cluster.

Há duas funções do Azure que você pode aplicar a um usuário ou grupo do Microsoft Entra:

  • Função de Administrador do Cluster do Serviço de Kubernetes do Azure

  • Função de Usuário do Cluster do Serviço de Kubernetes do Azure

    • Permite acesso à chamada à API Microsoft.ContainerService/managedClusters/listClusterUserCredential/action. Essa chamada à API lista as credenciais de usuário do cluster.
    • Baixa kubeconfig para a função clusterUser.

Observação

Em clusters que usam o Microsoft Entra ID, os usuários com a função clusterUser têm um arquivo kubeconfig vazio que solicita um logon. Depois de conectados, os usuários têm acesso com base em suas configurações de usuário ou grupo do Microsoft Entra. Os usuários com a função clusterAdmin têm acesso de administrador.

Em clusters que não usam o Microsoft Entra ID, a função clusterUser tem o mesmo efeito da função clusterAdmin.

Atribuir permissões de função a um usuário ou grupo

Para atribuir uma das funções disponíveis, você precisa obter a ID do recurso do cluster do AKS e a ID da conta de usuário ou grupo do Microsoft Entra usando as seguintes etapas:

  1. Obtenha a ID de recurso de cluster usando o comando az aks show para o cluster chamado myAKSCluster no grupo de recursos myResourceGroup. Fornecem seu próprio cluster e nome de grupo de recursos, conforme necessário.
  2. Use os comandos az account show e az ad user show para obter sua ID de usuário.
  3. Atribua uma função usando o comando az role assignment create.

O exemplo a seguir atribui a Função de Administrador do Cluster do Serviço de Kubernetes do Azure à conta de um usuário individual:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Se você quiser atribuir permissões a um grupo do Microsoft Entra, atualize o parâmetro --assignee mostrado no exemplo anterior com a ID do objeto para o grupo em vez do usuário.

Para obter a ID de objeto de um grupo, use o comando az ad group show. O comando a seguir obtém a ID do objeto para o grupo do Microsoft Entra chamado appdev:

az ad group show --group appdev --query objectId -o tsv

Importante

Em alguns casos, como usuários convidados do Microsoft Entra, o user.name na conta é diferente do userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

Nesse caso, defina o valor de ACCOUNT_UPN para o userPrincipalName do usuário do Microsoft Entra. Por exemplo, se sua conta user.name for user@contoso.com, essa ação será semelhante ao exemplo a seguir:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Obter e verificar as informações de configuração

Depois de atribuídas as funções do Azure, use o comando az aks get-credentials para obter a definição kubeconfig para o cluster do AKS. O exemplo a seguir obtém as credenciais -- admin, o que funcionará corretamente se a função de administrador do cluster tiver sido concedida ao usuário:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

Em seguida, você pode usar o comando kubectl config view para verificar se o contexto do cluster mostra que as informações de configuração do administrador foram aplicadas.

$ kubectl config view

Seu resultado deve ser semelhante ao seguinte exemplo de saída:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Remover permissões de função

Para remover atribuições de função, use o comando az role assignment delete. Especifique a ID da conta e a ID de recurso de cluster obtidas nas etapas anteriores. Se você atribuiu a função a um grupo em vez de a um usuário, especifique a ID de objeto de grupo apropriada em vez da ID de objeto de conta para o parâmetro --assignee.

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Próximas etapas

Para maior segurança no acesso a clusters do AKS, integre a autenticação do Microsoft Entra.