Share via


Controlar o acesso com Microsoft Entra ID e o RBAC do Kubernetes no AKS ativado pelo Azure Arc

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

Azure Kubernetes Service (AKS) pode ser configurado para utilizar Microsoft Entra ID para autenticação de utilizador. Nesta configuração, vai iniciar sessão num cluster do Kubernetes com um token de autenticação Microsoft Entra. Depois de autenticado, pode utilizar o controlo de acesso baseado em funções do Kubernetes (RBAC do Kubernetes) incorporado para gerir o acesso a espaços de nomes e recursos de cluster com base na identidade ou associação a grupos de um utilizador.

Este artigo descreve como controlar o acesso com o RBAC do Kubernetes num cluster do Kubernetes com base na associação Microsoft Entra grupo no AKS Arc. Pode criar um grupo de demonstração e utilizadores no Microsoft Entra ID. Em seguida, crie funções e enlaces de função no cluster para conceder as permissões adequadas para criar e ver recursos.

Pré-requisitos

Antes de configurar o RBAC do Kubernetes com Microsoft Entra identidade, precisa de:

  • Um cluster do Kubernetes criado no AKS Arc

    Precisa de um cluster do Kubernetes criado no AKS Arc. Se precisar de configurar o cluster, pode encontrar instruções para utilizar o Windows Admin Center ou o PowerShell para implementar o AKS.

  • Ligação ao Azure Arc

    Tem de ter uma ligação do Azure Arc ao cluster do Kubernetes. Para obter informações sobre como ativar o Azure Arc, veja Connect an Azure Kubernetes Service on Azure Stack HCI cluster to Azure Arc-enabled Kubernetes (Ligar um Azure Kubernetes Service no cluster do Azure Stack HCI ao Kubernetes compatível com o Azure Arc).

  • Precisa de acesso às seguintes ferramentas de linha de comandos:

    • 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 tem a CLI do Azure, abra uma ferramenta de linha de comandos e escreva: az -v. Além disso, terá de instalar a extensão connectedk8s para abrir um canal no cluster do Kubernetes.

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

    • Kubectl

      A ferramenta de linha de comandos do Kubernetes, kubectl, permite-lhe executar comandos destinados aos clusters do Kubernetes. Para verificar se instalou o kubectl, abra uma ferramenta de linha de comandos e escreva: kubectl version --client. Certifique-se de que a versão do cliente kubectl é, pelo menos v1.24.0, .

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

    • PowerShell e o módulo AksHci do PowerShell

      O PowerShell é uma solução de automatização de tarefas multiplataformas composta por uma shell de linha de comandos, uma linguagem de scripts e uma arquitetura de gestão de configuração. Se tiver instalado o AKS Arc, terá acesso ao módulo AksHci do PowerShell.

Primeiros passos opcionais

Se ainda não tiver um grupo de 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 como trabalhar com o RBAC do Microsoft Entra ID e do Kubernetes, pode criar um grupo de Microsoft Entra para programadores de aplicações que pode ser utilizado para mostrar como o RBAC do Kubernetes e Microsoft Entra ID controlar o acesso aos recursos do cluster. Em ambientes de produção, pode utilizar utilizadores e grupos existentes num inquilino Microsoft Entra.

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

Em primeiro lugar, crie o grupo no Microsoft Entra ID no seu inquilino para os programadores de aplicações com o comando az ad group create. O exemplo seguinte permite-lhe iniciar sessão no inquilino do Azure e, em seguida, criar um grupo com o nome 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 os nossos programadores de aplicações, vamos adicionar um utilizador ao appdev grupo. Irá utilizar esta conta de utilizador para iniciar sessão no cluster do AKS e testar a integração do RBAC do Kubernetes.

Adicione um utilizador ao grupo appdev criado na secção anterior com o comando az ad group member add . Se sair da sessão, volte a ligar ao Azure com 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 um enlace de função RBAC do Kubernetes personalizado no recurso de cluster do AKS para o grupo de Microsoft Entra

Configure o cluster do AKS para permitir que o seu grupo de Microsoft Entra aceda ao cluster. Se quiser adicionar um grupo e utilizadores, consulte Create grupos de demonstração no Microsoft Entra ID.

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

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Create um espaço de nomes no cluster do Kubernetes com o comando kubectl create namespace. O exemplo seguinte cria um espaço de nomes com o nome dev:

    kubectl create namespace dev
    

    No Kubernetes, as Funções definem as permissões a conceder e roleBindings aplicam as permissões aos utilizadores ou grupos pretendidos. Estas atribuições podem ser aplicadas a um determinado espaço de nomes ou a todo um cluster. Para obter mais informações, veja Using Kubernetes RBAC authorization (Utilizar a autorização RBAC do Kubernetes).

    Create uma função para o espaço de nomes de programador. Esta função concede permissões completas ao espaço de nomes. Em ambientes de produção, poderá querer especificar permissões mais granulares para diferentes utilizadores ou grupos.

  3. Create um ficheiro com o nome 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 com o comando kubectl apply e especifique o nome de ficheiro do seu manifesto YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  5. Obtenha o ID de recurso do grupo appdev com o comando az ad group show . Este grupo é definido como o assunto de um RoleBinding no próximo passo:

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

    O az ad group show comando devolve o valor que irá utilizar como groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. Create um ficheiro com o nome rolebinding-dev-namespace.yaml e cole o seguinte manifesto YAML. Está a estabelecer o enlace de função que permite ao grupo appdev utilizar a função role-dev-namespace para acesso ao espaço de nomes. 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 quiser criar o RoleBinding para um único utilizador, especifique e substitua kind: UsergroupObjectId pelo nome principal de utilizador (UPN) no exemplo.

  7. Create RoleBinding com o comando kubectl apply e especifique o nome de ficheiro do seu manifesto YAML:

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

Utilizar funções RBAC do Kubernetes incorporadas para o recurso de cluster do AKS

O Kubernetes também fornece funções incorporadas voltadas para o utilizador. Estas funções incorporadas incluem:

  • Funções de superutilizador (administrador de cluster)
  • Funções destinadas a serem concedidas em todo o cluster com ClusterRoleBindings
  • Funções que se destinam a ser concedidas em espaços de nomes específicos com RoleBindings (administrador, editar, ver)

Para saber mais sobre as funções RBAC do Kubernetes incorporadas, veja Funções do RBAC do Kubernetes

Funções direcionadas para o utilizador

ClusterRole Predefinido ClusterRoleBinding Predefinido Description
administrador do cluster system:masters group Permite o acesso de superutilizador para efetuar qualquer ação em qualquer recurso. Quando utilizada num ClusterRoleBinding, esta função dá controlo total sobre todos os recursos no cluster e em todos os espaços de nomes. Quando utilizado num RoleBinding, dá controlo total sobre todos os recursos no espaço de nomes do enlace de função, incluindo o próprio espaço de nomes.
administração Nenhuma Permite o acesso de administrador, que se destina a ser concedido num espaço de nomes através de um enlace de função. Se for utilizado num enlace de função, permite o acesso de leitura/escrita à maioria dos recursos num espaço de nomes, incluindo a capacidade de criar funções e enlaces de função no espaço de nomes. Esta função não permite o acesso de escrita à quota de recursos ou ao próprio espaço de nomes. Esta função também não permite o acesso de escrita a pontos finais em clusters criados com o Kubernetes v1.22 ou superior. Para obter mais informações, veja Acesso de Escrita para Pontos Finais.
editar Nenhuma Permite o acesso de leitura/escrita à maioria dos objetos num espaço de nomes. Esta função não permite a visualização ou modificação de funções ou enlaces de funções. No entanto, esta função permite aceder a segredos e executar pods como qualquer ServiceAccount no espaço de nomes, para que possa ser utilizada para obter os níveis de acesso da API de qualquer ServiceAccount no espaço de nomes. Esta função também não permite o acesso de escrita a pontos finais em clusters criados com o Kubernetes v1.22 ou superior. Para obter mais informações, veja Acesso de Escrita para Pontos Finais.
ver Nenhuma Permite o acesso só de leitura para ver a maioria dos objetos num espaço de nomes. Não permite a visualização de funções ou enlaces de funções. Esta função não permite a visualização de segredos, uma vez que ler os conteúdos dos segredos permite o acesso às credenciais de ServiceAccount no espaço de nomes, o que permitiria o acesso à API como qualquer ServiceAccount no espaço de nomes (uma forma de escalamento de privilégios).

Utilizar uma função RBAC do Kubernetes incorporada com Microsoft Entra ID

Para utilizar uma função RBAC do Kubernetes incorporada com Microsoft Entra ID, siga os seguintes passos:

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

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

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

Trabalhar com recursos de cluster com identidades de Microsoft Entra

Agora, teste as permissões esperadas quando criar e gerir recursos num cluster do Kubernetes. Nestes exemplos, vai agendar e ver pods no espaço de nomes atribuído pelo utilizador. Em seguida, tenta agendar e ver pods fora do espaço de nomes atribuído.

  1. Inicie sessão no Azure com a $AKSDEV_ID conta de utilizador que 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 de o canal proxy ser estabelecido, abra outra sessão e agende um pod NGINX com o comando kubectl run no espaço de nomes dev :

    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, verá o seguinte resultado:

    pod/nginx-dev created
    
  3. Agora, utilize o comando kubectl get pods para ver pods no dev espaço de nomes:

    kubectl get pods --namespace dev
    

    Quando o NGINX estiver em Execução com êxito, verá o seguinte resultado:

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

Create e ver recursos do cluster fora do espaço de nomes atribuído

Para tentar ver pods fora do espaço de nomes de programador , utilize o comando kubectl get pods com o --all-namespaces sinalizador.

kubectl get pods --all-namespaces

A associação ao grupo do utilizador não tem uma função do Kubernetes que permita esta ação. Sem a permissão, o comando emitirá um erro.

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

Passos seguintes