Partilhar via


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 controle de acesso baseado em função do Azure (Azure RBAC) para controlar quem pode acessar o arquivo kubeconfig e as permissões que eles têm. Os operadores do Kubernetes podem interagir com clusters 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 seus clusters AKS usando kubectl.

Ao usar a autenticação integrada entre o ID do Microsoft Entra e o AKS, você pode usar usuários, grupos ou entidades de serviço do Microsoft Entra como sujeitos no controle de acesso baseado em função do Kubernetes (Kubernetes RBAC). Esse recurso libera você de ter que gerenciar separadamente identidades de usuário e credenciais 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 o Microsoft Entra ID e atribuições de função do Azure.

Para obter uma visão geral conceitual, consulte Azure RBAC for Kubernetes Authorization for AKS enabled by Azure Arc.

Antes de começar

Antes de começar, certifique-se de que tem os seguintes pré-requisitos:

  • O AKS no Azure Local, versão 23H2, atualmente oferece suporte à habilitação do RBAC do Azure somente durante a criação do cluster Kubernetes. Não é possível habilitar o RBAC do Azure após a criação do cluster Kubernetes.

  • Instale a versão mais recente das extensões aksarc e connectedk8s Azure CLI. Observe que você precisa executar a extensão aksarc versão 1.1.1 ou posterior para habilitar o Azure RBAC. 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 Kubernetes, você deve instalar kubectl e kubelogin.

  • Você precisa das seguintes permissões para habilitar o RBAC do Azure ao criar um cluster Kubernetes:

    • Para criar um cluster Kubernetes, você precisa da função Colaborador do Arco de Serviço do 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, consulte Funções incorporadas 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 seu cluster Kubernetes com as permissões fornecidas usando o modo direto ou o modo proxy.

    • Para acessar o cluster Kubernetes diretamente usando o az aksarc get-credentials comando, você precisa da função Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que está incluída na permissão de função Usuário do Cluster Arc do Serviço Kubernetes do Azure.
    • Para acessar o cluster 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 do Cluster do Kubernetes habilitado para o Azure Arc. Enquanto isso, você deve verificar se os agentes e a máquina que executa o processo de integração atendem aos requisitos de rede especificados nos requisitos de rede do Kubernetes habilitados para Arco do Azure.
  • Para usar o kubectl, você pode acessá-lo usando o RBAC do Azure ou o Grupo de Administração do AAD.

    • Para usar kubectl com o RBAC do Azure, você precisa da função Azure Arc Kubernetes Viewer com escopo para o recurso de cluster conectado.
    • Para usar o kubectl com o Grupo de Administração do AAD, você não precisa de nenhuma função específica, mas deve garantir que está em um dos grupos na lista add-admin-group do recurso de cluster conectado.

Etapa 1: Criar um cluster Kubernetes habilitado para RBAC do Azure

Você pode criar um cluster 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 conclui e retorna informações formatadas em JSON sobre o cluster.

Etapa 2: Criar atribuições de função para os usuários acessarem o cluster

O AKS habilitado pela Arc fornece as seguintes cinco funções integradas. Eles são semelhantes às funções internas do Kubernetes com algumas diferenças, como o suporte a CRDs. Consulte a lista completa de ações permitidas por cada função interna do Azure.

Função Description
Usuário do Cluster Kubernetes habilitado para Azure Arc Permite recuperar o arquivo kubeconfig baseado no Cluster Connect para gerenciar clusters de qualquer lugar.
Azure Arc Kubernetes Viewer Permite acesso somente leitura para ver a maioria dos objetos em um namespace.
Não permite a visualização de segredos, porque 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).
Azure Arc Kubernetes Writer Permite acesso de leitura/gravação à maioria dos objetos em um namespace.
Não permite visualizar ou modificar funções ou associações de funções. 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.
Azure Arc Kubernetes Admin Permite acesso de administrador. Destina-se a ser concedido dentro de 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 namespace em si.
Azure Arc Kubernetes Cluster Admin Permite o acesso de "superusuário" para executar qualquer ação em qualquer recurso. Quando você o usa em ClusterRoleBinding, ele dá controle total sobre todos os recursos no cluster e em todos os namespaces. Quando você o usa em RoleBinding, ele dá controle total sobre todos os recursos no namespace de vinculaçã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 desde o primeiro passo e o assignee-object-id para este passo. O assignee-object-id pode ser um ID do Microsoft Entra ou um ID do cliente da entidade de serviço.

O exemplo a seguir atribui a função Azure Arc Kubernetes Viewer ao cluster 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 personalizadas

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 obter mais informações, consulte a lista completa de ações de dados que você pode usar para construir 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 seguinte objeto JSON em um arquivo chamado custom-role.json. Substitua o espaço reservado <subscription-id> pela ID de 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) onde 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 de 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 Kubernetes com as permissões fornecidas, usando o modo direto ou o modo proxy.

Acesse seu cluster com kubectl (modo direto)

Para acessar o cluster Kubernetes com as permissões fornecidas, o operador Kubernetes precisa do Microsoft Entra kubeconfig, que você pode obter usando o az aksarc get-credentials comando. Este comando fornece acesso ao kubeconfig baseado em admin, bem como a um kubeconfig baseado em usuário. O arquivo kubeconfig baseado em admin contém segredos e deve ser armazenado com segurança e girado periodicamente. Por outro lado, o Microsoft Entra ID kubeconfig baseado no usuário não contém segredos e pode ser distribuído para usuários que se conectam a partir de suas máquinas cliente.

Para executar este comando da CLI do Azure, você precisa da permissão de usuário Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que está incluída na permissão de função Usuário do Azure Kubernetes Service Arc Cluster :

az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>

Agora você pode usar kubectl gerenciar seu cluster. Por exemplo, você pode listar os nós em seu cluster usando kubectl get nodes. Na primeira vez que executá-lo, você deve entrar, conforme mostrado no exemplo a seguir:

kubectl get nodes

Aceder ao cluster a partir de um dispositivo cliente (modo proxy)

Para acessar o cluster Kubernetes de qualquer lugar com um modo proxy usando az connectedk8s proxy o comando, você precisa da permissão Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluída na permissão de função Usuário do Cluster Kubernetes habilitado para Azure Arc.

Execute as seguintes etapas em outro dispositivo cliente:

  1. Entre usando a autenticação do Microsoft Entra

  2. Obtenha o kubeconfig de conexão de 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
    

    Nota

    Este comando abre o proxy e bloqueia o shell atual.

  3. Em uma sessão de shell diferente, use kubectl para enviar solicitações para o cluster:

    kubectl get pods -A
    

Agora você deve ver uma resposta do cluster contendo a lista de todos os pods sob o default namespace.

Para obter mais informações, consulte Acessar seu cluster a partir de um dispositivo cliente.

Clean up resources (Limpar 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óximos passos