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 menosv1.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.
- Para acessar o cluster do Kubernetes diretamente usando o
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 login
o .
$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.
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
Crie um namespace no cluster do Kubernetes usando o
kubectl create namespace
comando. O exemplo a seguir cria um namespace chamadodev
: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.
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: ["*"]
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
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 comogroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
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, substituagroupObjectId
pelo ID doaz 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 substituagroupObjectId
pelo nome principal do usuário (UPN) no exemplo.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:
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>
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:
Entre usando a autenticação do Microsoft Entra.
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.
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