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 menosv1.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.
Obtenha as credenciais de administrador do cluster com o comando Get-AksHciCredential :
Get-AksHciCredential -name <name-of-your-cluster>
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.
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: ["*"]
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
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 comogroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
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, 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 quiser criar o RoleBinding para um único utilizador, especifique e substitua
kind: User
groupObjectId
pelo nome principal de utilizador (UPN) no exemplo.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:
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>
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.
Inicie sessão no Azure com a
$AKSDEV_ID
conta de utilizador que passou como uma entrada para oaz ad group member add
comando. Execute oaz connectedk8s proxy
comando para abrir um canal para o cluster:az connectedk8s proxy -n <cluster-name> -g <resource-group>
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
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
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários