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 menosv1.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.
- Para acessar o cluster do Kubernetes diretamente usando o
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 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 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.
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, 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.
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 comando e especifique o nome do arquivo do manifesto
kubectl apply
YAML:kubectl apply -f role-dev-namespace.yaml
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 comogroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
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, substituagroupObjectId
pelo ID do objeto de grupo produzido peloaz 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 substituagroupObjectId
pelo nome UPN (nome UPN) no exemplo.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:
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>
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:
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 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.
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