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 Local

Os administradores de infraestrutura podem usar o RBAC (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. Esse recurso libera você de ter que gerenciar separadamente as identidades e credenciais do usuário 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 utilizar o RBAC do Azure para a autorização de clusters Kubernetes com o Microsoft Entra ID e as atribuições de função do Azure.

Para obter uma visão geral conceitual, consulte a Autorização do RBAC do Azure para Kubernetes para AKS habilitada pelo Azure Arc.

Antes de começar

Antes de começar, verifique se você tem os seguintes pré-requisitos:

  • Atualmente, o AKS no Azure Local 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 kubernetes é criado.

  • Você pode habilitar o RBAC do Azure usando a CLI do Azure ou o portal do Azure. Para usar a CLI do Azure, você deve instalar as versões mais recentes das extensões da CLI do Azure aksarc e connectedk8s . Observe que você precisa da 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 o CLI do Azure, veja Instalar o CLI do Azure.

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Se você já tiver instalado a aksarc extensão, atualize a extensão 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 o kubectl e o kubelogin.

  • As seguintes permissões são necessárias para habilitar o RBAC do Azure ao criar um cluster do Kubernetes:

  • 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 comando az aksarc get-credentials, você precisa do Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que está incluído na permissão da função Usuário do cluster de arco do serviço do Kubernetes do Azure.
    • Para acessar o cluster do Kubernetes de qualquer lugar com um modo proxy usando o comando az connectedk8s proxy, ou do portal do Azure, você precisa da ação Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluído na permissão da função Usuário do cluster Kubernetes habilitado para o Azure Arc. Enquanto isso, você precisa verificar se os agentes e o computador que executa o processo de integração atendem aos requisitos de rede nos Requisitos de rede do Kubernetes habilitados para Azure Arc especificados.
  • 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 está em um dos grupos na lista de grupos de administradores adicionais do recurso de cluster conectado.

Etapa 1: Criar um cluster do Kubernetes com RBAC habilitado no Azure

Você pode criar um cluster Kubernetes habilitado para RBAC do Azure para autorização e um Microsoft Entra ID 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. Elas 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 do cluster Kubernetes habilitado para Azure Arc Permite que você recupere o arquivo kubeconfig baseado em 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 visualização de segredos, pois a permissão de leitura em segredos viabiliza o acesso às credenciais do ServiceAccount no namespace. Essas credenciais, por sua vez, permitem acesso à API por meio desse valor ServiceAccount (uma forma de escalonamento de privilégios).
Gravador do Azure Arc Kubernetes 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 outro valor ServiceAccount no namespace, para que possa ser usado para obter os níveis de acesso à API de qualquer valor do tipo ServiceAccount no namespace.
Administrador do Kubernetes do Azure Arc Permite o acesso de administrador. Pretende-se que ele seja concedido dentro de um namespace por meio do RoleBinding. Se usado em RoleBinding, permitirá acesso de leitura/gravação para a maioria dos recursos em um namespace, incluindo a capacidade de criar funções e associações de função no 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 no ClusterRoleBinding, ele fornece controle total sobre todos os recursos no cluster e em todos os namespaces. Quando você o usa no RoleBinding, ele fornece controle total sobre todos os recursos no namespace de associação de função, incluindo o namespace em si.

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. 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 de Visualizador de 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. Ele 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 as 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 seguinte objeto JSON 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 criar, consulte as 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 o 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 kubernetes com as permissões fornecidas, o operador 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 no usuário. O arquivo kubeconfig gerenciado por administrador contém segredos e deve ser armazenado com segurança e rotacionado periodicamente. Por outro lado, o kubeconfig do Microsoft Entra ID baseado no usuário não contém segredos e pode ser distribuído aos usuários que se conectam a partir de suas máquinas clientes.

Para executar este 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 Azure Kubernetes Service Arc :

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

Agora você pode usar o kubectl para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usando kubectl get nodes. Na primeira vez que executá-lo, você deve fazer login, como mostrado no exemplo abaixo:

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 o comando az connectedk8s proxy, você precisa do Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluído na permissão de função Usuário do cluster Kubernetes habilitado para o Azure Arc.

Execute as seguintes etapas em outro dispositivo cliente:

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

  2. Obtenha o kubeconfig necessário para conexão ao cluster e comunicação a partir de qualquer lugar, até mesmo fora do firewall que circunda o cluster.

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Observação

    Esse 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 namespace default.

Para obter mais informações, consulte Acessar seu 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