Compartilhar via


Controlar o acesso usando a ID do Microsoft Entra e o RBAC do Kubernetes

Aplica-se a: AKS no Azure Stack HCI 23H2

Você pode configurar o AKS (Serviço de Kubernetes do Azure) para usar a ID do Microsoft Entra para autenticação de usuário. Nessa configuração, você entra em um cluster do Kubernetes usando um token de autenticação do 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 na associação de grupo do Microsoft Entra no AKS. Você cria um grupo de demonstração e usuários na ID do Microsoft Entra. 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 a ID do Microsoft Entra, você deve ter os seguintes pré-requisitos:

  • Um AKS habilitado pelo cluster do Azure Arc. Se você precisar configurar o cluster, consulte as instruções para usar o portal do Azure ou a CLI.
  • 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 CLI do Azure (interface de linha de comando do Azure) é um conjunto de comandos usado para criar e gerenciar 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, 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 verificar se você instalou o kubectl, abra uma ferramenta de linha de comando e digite: kubectl version --client. Certifique-se de que a versão do cliente kubectl seja pelo menos v1.24.0. Para obter instruções de instalação, consulte kubectl.
  • Você pode acessar seu cluster do 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 do Arc do Serviço de Kubernetes do Azure
    • 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. 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.

Primeiros passos opcionais

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

Para demonstrar o trabalho com a ID do Microsoft Entra e o RBAC do Kubernetes, você pode criar um grupo do Microsoft Entra para desenvolvedores de aplicativos que pode ser usado para mostrar como o RBAC do Kubernetes e a 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 na ID do Microsoft Entra

Primeiro, crie o grupo na ID do Microsoft Entra em seu locatário para os desenvolvedores de aplicativos usando o az ad group create comando. O exemplo a seguir solicita que você entre no locatário do Azure e cria 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 na ID do Microsoft Entra para desenvolvedores de aplicativos, adicione um usuário ao appdev grupo. Use 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 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 associação de função RBAC do Kubernetes personalizada no recurso de cluster do AKS para o grupo do Microsoft Entra

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

  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, 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 Usar a autorização do RBAC para Kubernetes.

Crie uma função para o namespace dev . 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.

  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 comando e especifique o nome do arquivo do manifesto kubectl apply YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  3. Obtenha a ID do recurso do 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ê usa como groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. Crie um arquivo chamado rolebinding-dev-namespace.yaml e copie/cole o manifesto YAML a seguir. Você estabelece 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 pelo ID do objeto de grupo produzido 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 (nome UPN) no exemplo.

  5. Crie o RoleBinding usando o comando e especifique o nome do arquivo do manifesto kubectl apply 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 (admin, edit, view)

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

Funções voltadas para o usuário

ClusterRole padrão ClusterRoleBinding padrão Descrição
administrador de cluster Sistema:Grupo de Mestres Permite o acesso de superusuários, para executar 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.
admin 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 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 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.
edit 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 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.
view 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 a exibição de segredos, pois 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 interna do Kubernetes com a ID do Microsoft Entra

Para usar uma função RBAC interna do Kubernetes com a ID do Microsoft Entra, 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>
    

Acesse o cluster do Kubernetes

Agora você pode acessar seu cluster do Kubernetes com as permissões especificadas, 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 especificadas, o operador do Kubernetes precisa do Microsoft Entra kubeconfig, 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 nas permissões 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 o 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. 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 de fora do firewall ao redor do cluster):

    az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
    

    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

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 de 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óximas etapas