Partilhar via


Controle o acesso usando o Microsoft Entra ID e o Kubernetes RBAC

Aplica-se a: AKS no Azure Local, versão 23H2

Você pode configurar o Serviço Kubernetes do Azure (AKS) para usar o Microsoft Entra ID para autenticação do usuário. Nessa configuração, você entra em um cluster Kubernetes usando um token de autenticação do Microsoft Entra. Depois de autenticado, você pode usar o controle de acesso baseado em função do Kubernetes interno (Kubernetes RBAC) para gerenciar o acesso a namespaces e recursos de cluster com base na identidade de um usuário ou na associação ao grupo.

Este artigo descreve como controlar o acesso usando o Kubernetes RBAC em um cluster Kubernetes com base na associação de grupo do Microsoft Entra no AKS. Criar um grupo de demonstração e usuários no Microsoft Entra ID. Em seguida, você cria funções e associações de função no cluster para conceder as permissões apropriadas para criar e exibir recursos.

Pré-requisitos

Antes de configurar o Kubernetes RBAC usando o Microsoft Entra ID, você deve ter os seguintes pré-requisitos:

  • Um AKS habilitado pelo cluster do Azure Arc. Se você precisar configurar seu cluster, consulte as instruções para usar o portal do Azure ou a CLI do Azure.
  • CLI do Azure instalada e configurada. Se você precisar instalar a CLI ou atualizar, consulte Instalar a CLI do Azure.
  • CLI do Azure e a extensão connectedk8s. A interface de linha de comandos do Azure (CLI do Azure) é um conjunto de comandos utilizados para criar e gerir recursos do Azure. Para verificar se você tem a CLI do Azure, abra uma ferramenta de linha de comando e digite: az -v. Além disso, instale a extensão connectedk8s para abrir um canal para o cluster do Kubernetes. Para obter instruções de instalação, consulte Como instalar a CLI do Azure.
  • Kubectl. A ferramenta de linha de comando do Kubernetes, kubectl, permite executar comandos direcionados aos clusters do Kubernetes. Para verificar se você instalou o kubectl, abra uma ferramenta de linha de comando e digite: kubectl version --client. Certifique-se de que sua versão do cliente kubectl é pelo menos v1.24.0. Para obter instruções de instalação, consulte kubectl.
  • Você pode acessar seu cluster Kubernetes com as permissões especificadas com 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 nas permissões de função de Usuário do Cluster Arc do Serviço Kubernetes do Azure
    • Para acessar o cluster Kubernetes de qualquer lugar com um modo proxy usando az connectedk8s proxy o comando, você precisa da Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluída na permissão de função Usuário do Cluster Kubernetes habilitado para Azure Arc. Enquanto isso, você precisa verificar se os agentes e a máquina que executa o processo de integração atendem aos requisitos de rede nos requisitos de rede do Kubernetes habilitado para Azure Arc.

Primeiros passos opcionais

Se ainda não tiver um grupo do Microsoft Entra que contenha membros, poderá querer criar um grupo e adicionar alguns membros, para que possa seguir as instruções neste artigo.

Para demonstrar o trabalho com o Microsoft Entra ID e o Kubernetes RBAC, você pode criar um grupo do Microsoft Entra para desenvolvedores de aplicativos que pode ser usado para mostrar como o RBAC do Kubernetes e o ID do Microsoft Entra controlam o acesso aos recursos do cluster. Em ambientes de produção, você pode usar usuários e grupos existentes em um locatário do Microsoft Entra.

Criar um grupo de demonstração no Microsoft Entra ID

Primeiro, crie o grupo no Microsoft Entra ID em seu locatário para os desenvolvedores de aplicativos usando o az ad group create comando. O exemplo a seguir solicita que você entre em seu locatário do Azure e, em seguida, cria um grupo chamado appdev:

az login
az ad group create --display-name appdev --mail-nickname appdev

Adicionar utilizadores ao seu grupo

Com o grupo de exemplo criado no Microsoft Entra ID para desenvolvedores de aplicativos, adicione um usuário ao appdev grupo. Você usa essa conta de usuário para entrar no cluster AKS e testar a integração RBAC do Kubernetes.

Adicione um usuário ao grupo appdev criado na seção anterior usando o az ad group member add comando. Se você sair da sessão, reconecte-se ao Azure usando az logino .

$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID

Criar uma ligação de função RBAC do Kubernetes personalizada no recurso de cluster AKS para o grupo Microsoft Entra

Configure o cluster AKS para permitir que seu grupo do Microsoft Entra acesse o cluster. Se você quiser adicionar um grupo e usuários, consulte Criar grupos de demonstração no Microsoft Entra ID.

  1. Use o az aksarc get-credentials comando para obter as credenciais de administrador do cluster:

    az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
    
  2. Crie um namespace no cluster do Kubernetes usando o kubectl create namespace comando. O exemplo a seguir cria um namespace chamado dev:

    kubectl create namespace dev
    

No Kubernetes, Roles define as permissões a serem concedidas e RoleBindings aplica as permissões aos usuários ou grupos desejados. Essas atribuições podem ser aplicadas a um determinado namespace ou em um cluster inteiro. Para obter mais informações, consulte Usando a autorização RBAC do Kubernetes.

Crie uma função para o namespace dev . Essa função concede permissões totais ao namespace. Em ambientes de produção, convém especificar permissões mais granulares para diferentes usuários ou grupos.

  1. Crie um arquivo chamado role-dev-namespace.yaml e copie/cole o seguinte manifesto YAML:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-full-access
      namespace: dev
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    - apiGroups: ["batch"]
      resources:
      - jobs
      - cronjobs
      verbs: ["*"]
    
  2. Crie a função usando o kubectl apply comando e especifique o nome do arquivo do seu manifesto YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  3. Obtenha o ID do recurso para o grupo appdev usando o az ad group show comando. Este grupo é definido como o assunto de um RoleBinding na próxima etapa:

    az ad group show --group appdev --query objectId -o tsv
    

    O az ad group show comando retorna o valor que você usa como groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. Crie um arquivo chamado rolebinding-dev-namespace.yaml e copie/cole o seguinte manifesto YAML. Você estabelece a associação de função que permite que o grupo appdev use a função para acesso ao role-dev-namespace namespace. Na última linha, substitua groupObjectId pelo ID do az ad group show objeto de grupo produzido pelo comando:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-access
      namespace: dev
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: dev-user-full-access
    subjects:
    - kind: Group
      namespace: dev
      name: groupObjectId
    

    Gorjeta

    Se você quiser criar o RoleBinding para um único usuário, especifique kind: User e substitua groupObjectId pelo nome principal do usuário (UPN) no exemplo.

  5. Crie o RoleBinding usando o kubectl apply comando e especifique o nome do arquivo do seu manifesto YAML:

    kubectl apply -f rolebinding-dev-namespace.yaml
    
    rolebinding.rbac.authorization.k8s.io/dev-user-access created
    

Use funções RBAC do Kubernetes integradas para seu recurso de cluster AKS

O Kubernetes também fornece funções internas voltadas para o usuário. Essas funções internas incluem:

  • Funções de superusuário (administrador de cluster)
  • Funções destinadas a serem concedidas em todo o cluster usando ClusterRoleBindings
  • Funções destinadas a serem concedidas dentro de namespaces específicos usando RoleBindings (admin, edit, view)

Para obter mais informações sobre funções RBAC internas do Kubernetes, consulte Funções voltadas para o usuário do Kubernetes RBAC.

Funções voltadas para o usuário

ClusterRole padrão ClusterRoleBinding padrão Description
cluster-admin sistema:grupo de mestres Permite o acesso de superusuário, para executar qualquer ação em qualquer recurso. Quando usada em um ClusterRoleBinding, essa função dá controle total sobre todos os recursos no cluster e em todos os namespaces. Quando usado em um RoleBinding, ele dá controle total sobre todos os recursos no namespace da associação de função, incluindo o namespace em si.
administração Nenhuma Permite acesso de administrador, destinado a ser concedido dentro de um namespace usando uma associação de função. Se usado em uma associação de função, permite 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. Essa função também não permite acesso de gravação a pontos de extremidade em clusters criados usando o Kubernetes v1.22+. Para obter mais informações, consulte Acesso de gravação para pontos de extremidade.
Editar… Nenhuma Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Esta função 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 ServiceAccount no namespace, para que possa ser usada para obter os níveis de acesso à API de qualquer ServiceAccount no namespace. Essa função também não permite acesso de gravação a pontos de extremidade em clusters criados usando o Kubernetes v1.22+. Para obter mais informações, consulte Acesso de gravação para pontos de extremidade.
ver Nenhuma Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Ele não permite a visualização de funções ou associações de funções. Essa função não permite a exibição de segredos, uma vez que a leitura do conteúdo dos segredos permite o acesso às credenciais ServiceAccount no namespace, o que permitiria o acesso à API como qualquer ServiceAccount no namespace (uma forma de escalonamento de privilégios).

Usar uma função RBAC do Kubernetes integrada com o ID do Microsoft Entra

Para usar uma função RBAC interna do Kubernetes com o Microsoft Entra ID, siga estas etapas:

  1. Aplique a função RBAC interna view do Kubernetes ao seu grupo do Microsoft Entra:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
    
  2. Aplique a função RBAC interna view do Kubernetes a cada um dos usuários do Microsoft Entra:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
    

Acessar o cluster do Kubernetes

Agora você pode acessar seu cluster Kubernetes com as permissões especificadas, usando o modo direto ou o modo proxy.

Acesse seu cluster com kubectl (modo direto)

Para acessar o cluster Kubernetes com as permissões especificadas, 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 das permissões de função de Usuário do Cluster do Arco do Serviço do Azure Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action:

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 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 Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluída na permissão de função Usuário do Cluster Kubernetes habilitado para Arco do Azure.

Execute as seguintes etapas em outro dispositivo cliente:

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

  2. Obtenha a conexão kubeconfig de cluster necessária para se comunicar com o cluster de qualquer lugar (mesmo fora do firewall ao redor do cluster):

    az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
    

    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

Criar e exibir recursos de cluster fora do namespace atribuído

Para tentar visualizar pods fora do namespace dev , use o kubectl get pods comando com o --all-namespaces sinalizador:

kubectl get pods --all-namespaces

A associação ao grupo do usuário não tem uma função do Kubernetes que permita essa ação. Sem a permissão, o comando gera um erro:

Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope

Próximos passos