Usar o RBAC (controle de acesso baseado em função) do Azure para autorização do Kubernetes
Aplica-se a: AKS no Azure Local, versão 23H2
Os administradores de infraestrutura podem usar o RBAC do Azure (controle de acesso baseado em função) do Azure para controlar quem pode acessar o arquivo kubeconfig e as permissões que eles têm. Os operadores do Kubernetes podem interagir com clusters do Kubernetes usando a ferramenta kubectl com base nas permissões fornecidas. 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 clusters do AKS usando kubectl.
Ao usar 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 no RBAC (controle de acesso baseado em função) do Kubernetes. Com esse recurso, você não precisa gerenciar identidades e credenciais de usuários separadamente para o Kubernetes. No entanto, você ainda deve configurar e gerenciar o RBAC do Azure e o RBAC do Kubernetes separadamente.
Este artigo descreve como usar o RBAC do Azure para autorização de cluster do Kubernetes com a ID do Microsoft Entra e as atribuições de função do Azure.
Para obter uma visão geral conceitual, consulte RBAC do Azure para autorização do Kubernetes para AKS habilitado pelo Azure Arc.
Antes de começar
Antes de iniciar, verifique se você cumpre os seguintes pré-requisitos:
Atualmente, o AKS no Azure Local, versão 23H2, dá suporte à habilitação do RBAC do Azure somente durante a criação do cluster do Kubernetes. Você não pode habilitar o RBAC do Azure depois que o cluster do Kubernetes é criado.
Instale a versão mais recente das extensões da CLI do Azure aksarc e connectedk8s . Observe que você precisa executar a extensão aksarc versão 1.1.1 ou posterior para habilitar o RBAC do Azure. Execute
az --version
para encontrar a versão atual. Se você precisar instalar ou atualizar a CLI do Azure, consulte Instalar a CLI do Azure.az extension add --name aksarc az extension add --name connectedk8s
Se você já instalou a
aksarc
extensão, atualize-a para a versão mais recente:az extension update --name aksarc az extension update --name connectedk8s
Para interagir com clusters do Kubernetes, você deve instalar kubectl e kubelogin.
Você precisa das seguintes permissões para habilitar o RBAC do Azure ao criar um cluster do Kubernetes:
- Para criar um cluster do Kubernetes, você precisa da função Colaborador do Arc do Serviço de Kubernetes do Azure.
- Para usar o
--enable-azure-rbac
parâmetro, você precisa da função Administrador de Controle de Acesso Baseado em Função para acessar a permissão Microsoft.Authorization/roleAssignments/write . Para obter mais informações, veja Funções internas do Azure. - Novas atribuições de função podem levar até cinco minutos para serem propagadas e atualizadas pelo servidor de autorização.
Depois que o RBAC do Azure estiver habilitado, você poderá acessar o cluster do Kubernetes com as permissões fornecidas usando o modo direto ou o modo proxy.
- Para acessar o cluster do Kubernetes diretamente usando o
az aksarc get-credentials
comando, você precisa do Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que está incluído na permissão de função Usuário de Cluster do Arc do Serviço de Kubernetes do Azure. - Para acessar o cluster do Kubernetes de qualquer lugar com um modo proxy usando o
az connectedk8s proxy
comando ou do portal do Azure, você precisa da ação Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluída na permissão de função Usuário de Cluster do Kubernetes habilitada para Azure Arc. Enquanto isso, você deve verificar se os agentes e o computador que executa o processo de integração atendem aos requisitos de rede especificados em Requisitos de rede do Kubernetes habilitado para Azure Arc.
- Para acessar o cluster do Kubernetes diretamente usando o
Para usar o kubectl, você pode acessá-lo usando o RBAC do Azure ou o Grupo de Administradores do AAD.
- Para usar o kubectl com o RBAC do Azure, você precisa da função Visualizador do Kubernetes do Azure Arc com escopo para o recurso de cluster conectado.
- Para usar o kubectl com o Grupo de Administradores do AAD, você não precisa de nenhuma função específica, mas deve garantir que esteja em um dos grupos na lista add-admin-group do recurso de cluster conectado.
Etapa 1: Criar um cluster do Kubernetes habilitado para RBAC do Azure
Você pode criar um cluster do Kubernetes habilitado para RBAC do Azure para autorização e uma ID do Microsoft Entra para autenticação.
az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac
Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster.
Etapa 2: Criar atribuições de função para os usuários acessarem o cluster
O AKS habilitado pelo Arc fornece as cinco funções internas a seguir. Eles são semelhantes às funções internas do Kubernetes com algumas diferenças, como suporte a CRDs. Veja a lista completa de ações permitidas por cada função interna do Azure.
Função | Descrição |
---|---|
Usuário de cluster do Kubernetes habilitado para Azure Arc | Permite recuperar o arquivo kubeconfig baseado no Cluster Connect para gerenciar clusters de qualquer lugar. |
Visualizador do Kubernetes do Azure Arc | Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Não permite a exibição de segredos, pois a permissão de leitura em segredos permite o acesso às credenciais ServiceAccount no namespace. Essas credenciais, por sua vez, permitem o acesso à API por meio desse valor ServiceAccount (uma forma de escalonamento de privilégios). |
Gravador do Kubernetes do Azure Arc | Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Não permite exibir ou modificar funções ou associações de função. No entanto, essa função permite acessar segredos e executar pods como qualquer valor ServiceAccount no namespace, para que possa ser usada para obter os níveis de acesso à API de qualquer valor ServiceAccount no namespace. |
Administrador do Kubernetes do Azure Arc | Permite o acesso de administrador. Ele deve ser concedido em um namespace por meio de RoleBinding. Se você usá-lo em RoleBinding, ele permitirá acesso de leitura/gravação à maioria dos recursos em um namespace, incluindo a capacidade de criar funções e associações de função dentro do namespace. Essa função não permite acesso de gravação à cota de recursos ou ao próprio namespace. |
Administrador do Cluster do Kubernetes do Azure Arc | Permite o acesso de "superusuário" para executar qualquer ação em qualquer recurso. Quando você o usa em ClusterRoleBinding, ele fornece controle total sobre todos os recursos no cluster e em todos os namespaces. Quando você o usa em RoleBinding, ele fornece controle total sobre todos os recursos no namespace de associação de função, incluindo o próprio namespace. |
Você pode usar o az role assignment create
comando para criar atribuições de função.
Primeiro, obtenha o $ARM-ID
para o cluster de destino ao qual você deseja atribuir uma função.
$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)
Em seguida, use o az role assignment create
comando para atribuir funções ao cluster do Kubernetes. Você deve fornecer o $ARM_ID
da primeira etapa e o assignee-object-id
para esta etapa. Pode assignee-object-id
ser uma ID do Microsoft Entra ou uma ID do cliente da entidade de serviço.
O exemplo a seguir atribui a função Visualizador do Kubernetes do Azure Arc ao cluster do Kubernetes:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID
Neste exemplo, o escopo é a ID do Azure Resource Manager do cluster. Também pode ser o grupo de recursos que contém o cluster do Kubernetes.
Criar definições de função personalizada
Você pode optar por criar sua própria definição de função para uso em atribuições de função.
O exemplo a seguir mostra uma definição de função que permite que um usuário leia apenas implantações. Para saber mais, confira a lista completa de ações de dados que você pode usar para criar uma definição de função. Para obter mais informações sobre como criar uma função personalizada, consulte Etapas para criar uma função personalizada
Para criar suas próprias definições de função personalizadas, copie o objeto JSON a seguir em um arquivo chamado custom-role.json. Substitua o espaço reservado <subscription-id>
pela ID da assinatura real. A função personalizada usa uma das ações de dados e permite exibir todas as implantações no escopo (cluster ou namespace) em que a atribuição de função é criada.
{
"Name": "AKS Arc Deployment Reader",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}
Para obter informações sobre funções personalizadas e como criá-las, consulte Funções personalizadas do Azure.
Crie a definição de função usando o az role definition create
comando, definindo o --role-definition
parâmetro para o 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 az role assignment create
comando:
az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID
Etapa 3: acessar o cluster do Kubernetes
Agora você pode acessar seu cluster do Kubernetes com as permissões fornecidas, usando o modo direto ou o modo proxy.
Acessar seu cluster com kubectl (modo direto)
Para acessar o cluster do Kubernetes com as permissões fornecidas, o operador do Kubernetes precisa do kubeconfig do Microsoft Entra, que você pode obter usando o az aksarc get-credentials
comando. Esse comando fornece acesso ao kubeconfig baseado em administrador, bem como a um kubeconfig baseado em usuário. O arquivo kubeconfig baseado em administrador contém segredos e deve ser armazenado com segurança e girado periodicamente. Por outro lado, o kubeconfig da ID do Microsoft Entra baseado no usuário não contém segredos e pode ser distribuído para usuários que se conectam de seus computadores cliente.
Para executar esse comando da CLI do Azure, você precisa do Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que está incluído na permissão de função de usuário do cluster do Arc do Serviço de Kubernetes do Azure:
az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>
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 você executá-lo, você deve entrar, conforme mostrado no exemplo a seguir:
kubectl get nodes
Acessar o cluster de um dispositivo cliente (modo proxy)
Para acessar o cluster do Kubernetes de qualquer lugar com um modo proxy usando az connectedk8s proxy
o comando, você precisa do Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluído na permissão de função Usuário de Cluster do Kubernetes habilitado para Azure Arc.
Execute as seguintes etapas em outro dispositivo cliente:
Entrar usando a autenticação do Microsoft Entra
Obtenha o kubeconfig de conexão do cluster necessário para se comunicar com o cluster de qualquer lugar (mesmo de fora do firewall ao redor do cluster):
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
Observação
Este comando abre o proxy e bloqueia o shell atual.
Em uma sessão de shell diferente, use
kubectl
para enviar solicitações ao cluster:kubectl get pods -A
Agora você deve ver uma resposta do cluster que contém a lista de todos os pods no default
namespace.
Para obter mais informações, consulte Acessar o cluster de um dispositivo cliente.
Limpar os recursos
Excluir atribuição de função
# List role assignments
az role assignment list --scope $ARM_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 Arc Deployment Reader"
Próximas etapas
- Controle de acesso baseado em função do Azure (RBAC)
- Opções de acesso e identidade para o AKS habilitadas pelo Azure Arc
- Criar uma entidade de serviço do Azure com a CLI do Azure
- Permissões disponíveis do Azure para Hybrid + Multicloud