Controlar o acesso usando Microsoft Entra ID e o RBAC do Kubernetes no AKS habilitado pelo Azure Arc

Aplica-se a: AKS no Azure Stack HCI 22H2, AKS no Windows Server

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

Este artigo descreve como controlar o acesso usando o RBAC do Kubernetes em um cluster do Kubernetes com base em Microsoft Entra associação de grupo no AKS Arc. Você cria 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 RBAC do Kubernetes usando Microsoft Entra identidade, você precisa:

  • Um cluster do Kubernetes criado no AKS Arc

    Você precisa de um cluster do Kubernetes criado no AKS Arc. Se você precisar configurar o cluster, poderá encontrar instruções para usar Windows Admin Center ou o PowerShell para implantar o AKS.

  • Conexão do Azure Arc

    Você deve ter uma conexão do Azure Arc com o cluster do Kubernetes. Para obter informações sobre como habilitar o Azure Arc, consulte Conectar um Serviço de Kubernetes do Azure no cluster do Azure Stack HCI ao Kubernetes habilitado para Azure Arc.

  • Você precisa ter acesso às seguintes ferramentas de linha de comando:

    • CLI do Azure e a extensão connectedk8s

      A CLI do Azure (interface de linha de comando do Azure) é um conjunto de comandos usado para criar e gerenciar recursos do Azure. Para marcar se você tem a CLI do Azure, abra uma ferramenta de linha de comando e digite: az -v. Além disso, você precisará instalar a extensão connectedk8s para abrir um canal no cluster do Kubernetes.

      Para obter instruções de instalação, confira Como instalar a CLI do Azure.

    • kubectl

      A ferramenta de linha de comando do Kubernetes, kubectl, permite que você execute comandos direcionados aos clusters do Kubernetes. Para marcar se você instalou o kubectl, abra uma ferramenta de linha de comando e digite: kubectl version --client. Verifique se a versão do cliente kubectl é pelo menos v1.24.0.

      Para obter instruções de instalação, consulte kubectl.

    • PowerShell e o módulo do AksHci PowerShell

      O PowerShell é uma solução de automação de tarefas multiplataforma que consiste em um shell de linha de comando, em uma linguagem de script e uma estrutura de gerenciamento de configuração. Se você instalou o AKS Arc, terá acesso ao módulo do AksHci PowerShell.

Primeiras etapas opcionais

Se você ainda não tiver um grupo Microsoft Entra que contenha membros, convém criar um grupo e adicionar alguns membros, para que você possa seguir as instruções neste artigo.

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

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

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

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

Adicionar usuários ao seu grupo

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

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

$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

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

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

  1. Obtenha as credenciais de administrador do cluster usando o comando Get-AksHciCredential :

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Create um namespace no cluster do Kubernetes usando o comando kubectl create namespace. O exemplo a seguir cria um namespace chamado dev:

    kubectl create namespace dev
    

    No Kubernetes, as Funções definem as permissões a serem concedidas e As RoleBindings aplicam 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, confira Como usar a autorização do RBAC do Kubernetes.

    Create uma função para o namespace de desenvolvimento. Essa função concede permissões completas para o namespace. Em ambientes de produção, talvez você queira especificar permissões mais granulares para diferentes usuários ou grupos.

  3. Create um arquivo chamado role-dev-namespace.yaml e 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: ["*"]
    
  4. Create a função usando o comando kubectl apply e especifique o nome do arquivo do manifesto YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  5. Obtenha a ID do recurso para o grupo appdev usando o comando az ad group show . Esse 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ê usará como groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. Create um arquivo chamado rolebinding-dev-namespace.yaml e cole no manifesto YAML a seguir. Você está estabelecendo a associação de função que permite que o grupo appdev use a role-dev-namespace função para acesso ao namespace. Na última linha, substitua groupObjectId pela ID do objeto de grupo produzida pelo az ad group show 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
    

    Dica

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

  7. Create RoleBinding usando o comando kubectl apply e especifique o nome do arquivo do manifesto YAML:

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

Usar funções RBAC internas do Kubernetes para o recurso de cluster do 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 em namespaces específicos usando RoleBindings (administrador, edição, exibição)

Para saber mais sobre as funções RBAC internas do Kubernetes, confira Funções voltadas para o usuário do RBAC do Kubernetes

Funções voltadas para o usuário

ClusterRole padrão ClusterRoleBinding padrão Descrição
cluster-admin system:masters group Permite que o acesso de superusuário execute qualquer ação em qualquer recurso. Quando usada em um ClusterRoleBinding, essa função fornece controle total sobre todos os recursos no cluster e em todos os namespaces. Quando usado em um RoleBinding, ele fornece controle total sobre todos os recursos no namespace da associação de função, incluindo o próprio namespace.
administrador Nenhum Permite o acesso de administrador, destinado a ser concedido em um namespace usando uma associação de função. Se usado em uma associação de função, permite o 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. Essa função também não permite o 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 Nenhum Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Essa função 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 ServiceAccount no namespace, para que ela possa ser usada para obter os níveis de acesso à API de qualquer ServiceAccount no namespace. Essa função também não permite o 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.
exibição Nenhum Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Não permite exibir funções nem associações de função. Essa função não permite exibir segredos, pois a leitura do conteúdo de 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 interna do Kubernetes com Microsoft Entra ID

Para usar uma função RBAC interna do Kubernetes com Microsoft Entra ID, execute as seguintes etapas:

  1. Aplique a função RBAC interna do view Kubernetes ao grupo 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 do view 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>
    

Trabalhar com recursos de cluster usando identidades Microsoft Entra

Agora, teste as permissões esperadas ao criar e gerenciar recursos em um cluster do Kubernetes. Nesses exemplos, você agenda e exibe pods no namespace atribuído do usuário. Em seguida, você tenta agendar e exibir pods fora do namespace atribuído.

  1. Entre no Azure usando a $AKSDEV_ID conta de usuário que você passou como uma entrada para o az ad group member add comando. Execute o az connectedk8s proxy comando para abrir um canal para o cluster:

    az connectedk8s proxy -n <cluster-name> -g <resource-group>
    
  2. Depois que o canal proxy for estabelecido, abra outra sessão e agende um pod NGINX usando o comando kubectl run no namespace de desenvolvimento :

    kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
    

    Quando o NGINX tiver sido agendado com êxito, você verá a seguinte saída:

    pod/nginx-dev created
    
  3. Agora, use o comando kubectl get pods para exibir pods no dev namespace:

    kubectl get pods --namespace dev
    

    Quando o NGINX for executado com êxito, você verá a seguinte saída:

    $ kubectl get pods --namespace dev
    
    NAME        READY   STATUS    RESTARTS   AGE
    nginx-dev   1/1     Running   0          4m
    

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

Para tentar exibir pods fora do namespace de desenvolvimento , use o comando kubectl get pods com o --all-namespaces sinalizador .

kubectl get pods --all-namespaces

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

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

Próximas etapas