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

Você pode interagir com clusters Kubernetes usando a kubectl ferramenta. A CLI do Azure fornece uma maneira fácil de obter as credenciais de acesso e o arquivo de configuração kubeconfig para se conectar aos seus clusters AKS usando kubectlo . Você pode usar o controle de acesso baseado em função do Azure (Azure RBAC) 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 AKS.

Antes de começar

  • Este artigo pressupõe que você tenha um cluster AKS existente. Se você precisar de um cluster AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
  • Este artigo também requer que você esteja executando a CLI do Azure versão 2.0.65 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

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

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

O az aks get-credentials comando permite obter as credenciais de acesso para um cluster AKS e mescla essas credenciais no arquivo kubeconfig . Você pode usar o RBAC do Azure para controlar o acesso a essas credenciais. Essas funções do Azure permitem definir quem pode recuperar o arquivo kubeconfig e quais permissões eles têm 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 de Serviço do Kubernetes do Azure

    • Permite o acesso à chamada da Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action API. Esta chamada de API lista as credenciais de administrador do cluster.
    • Downloads kubeconfig para a função clusterAdmin .
  • Função de Usuário do Cluster de Serviço do Kubernetes do Azure

    • Permite o acesso à chamada da Microsoft.ContainerService/managedClusters/listClusterUserCredential/action API. Esta chamada de API lista as credenciais de usuário do cluster.
    • Downloads kubeconfig para clusterUser role.

Nota

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 login. Uma vez 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 de recurso do cluster AKS e a ID da conta de usuário ou grupo do Microsoft Entra usando as seguintes etapas:

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

O exemplo a seguir atribui a Função de Administração do Cluster de Serviço do Kubernetes do Azure a uma conta de 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 mostrado no exemplo anterior com a ID do objeto para o --assigneegrupo em vez do usuário.

Para obter a ID do objeto para um grupo, use o az ad group show comando. 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 userPrincipalName do usuário do Microsoft Entra. Por exemplo, se o user.name da sua conta for user@contoso.com, esta 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 que as funções forem atribuídas, use o az aks get-credentials comando para obter a definição kubeconfig para seu cluster AKS. O exemplo a seguir obtém as credenciais --admin , que funcionam corretamente se o usuário tiver recebido a Função de Administrador de Cluster:

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

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

$ kubectl config view

Sua saída deve ser semelhante à saída de exemplo a seguir:

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 az role assignment delete comando. Especifique o ID da conta e o ID do recurso de cluster que você obteve nas etapas anteriores. Se você atribuiu a função a um grupo em vez de um usuário, especifique o ID de objeto de grupo apropriado em vez do ID de objeto de conta para o --assignee parâmetro.

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

Próximos passos

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