Compartilhar via


Usar o RBAC (controle de acesso baseado em função) do Azure para autorização do Kubernetes

Aplica-se a: AKS no Azure Stack HCI 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 Stack HCI 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 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 --control-plane-ip $controlplaneIP --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:

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

  2. 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.

  3. 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