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
- Permite acesso à chamada à API
Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action
. Essa chamada à API lista as credenciais de administrador do cluster. - Baixa o kubeconfig para a função clusterAdmin.
- Permite acesso à chamada à API
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.
- Permite acesso à chamada à API
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:
- 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. - Use os comandos
az account show
eaz ad user show
para obter sua ID de usuário. - 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.
Azure Kubernetes Service