Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Serviço Kubernetes do Azure (AKS) pode ser configurado para usar o Microsoft Entra ID para autenticação do usuário. Nessa configuração, você entra em um cluster AKS usando um token de autenticação do Microsoft Entra. Uma vez autenticado, pode usar o controlo de acesso baseado em papéis (RBAC) incorporado do Kubernetes para gerir o acesso a namespaces e recursos de cluster com base na identidade do utilizador ou na pertença ao grupo.
Este artigo mostra-lhe como:
Controle o acesso usando o Kubernetes RBAC em um cluster AKS com base na associação ao grupo Microsoft Entra.
Crie grupos e usuários de exemplo no Microsoft Entra ID.
Criar Funções e RoleBindings num cluster AKS, concedendo as permissões apropriadas para criar e visualizar recursos.
Pré-requisitos
Você tem um cluster AKS existente com a integração do Microsoft Entra habilitada. Se precisar de um cluster AKS com esta configuração, consulte Integrar o Microsoft Entra ID com o AKS.
O RBAC do Kubernetes é ativado por padrão durante a criação do cluster AKS. Para atualizar um cluster existente com integração Microsoft Entra e Kubernetes RBAC, consulte Ativar integração Microsoft Entra no seu cluster AKS existente.
Certifique-se de que a CLI do Azure versão 2.0.61 ou posterior está instalada e configurada. Para localizar a versão, execute
az --version. Para instalar ou atualizar, consulte Install CLI do Azure.
Use o portal do Azure ou a CLI do Azure para verificar se a integração do Microsoft Entra com o RBAC do Kubernetes está habilitada.
Para verificar usando o portal do Azure:
- Inicie sessão no portal Azure e navegue até ao seu recurso do cluster AKS.
- No menu de serviço, em Configurações, selecione Configuração de segurança.
- Na seção Autenticação e Autorização, verifique se a opção Autenticação do Microsoft Entra com RBAC do Kubernetes está selecionada.
Se planeia usar o Terraform para configurar o RBAC do Kubernetes neste artigo, também precisa de:
- Terraform versão 1.6.0 ou posterior instalada.
-
Kubectl instalado e configurado para se ligar ao teu cluster AKS.
kubectlé instalado automaticamente quando executaaz aks install-cliou como parte do Azure Cloud Shell. - Permissão para criar atribuições de funções no Azure no âmbito do seu cluster AKS, e permissão para gerir os recursos Kubernetes no cluster.
- Dois grupos existentes do Microsoft Entra e, opcionalmente, dois utilizadores de teste existentes do Microsoft Entra para validar o acesso. Se ainda não tem estes recursos, complete o Criar grupos no Microsoft Entra ID e Criar utilizadores no Microsoft Entra ID antes de continuar. No entanto, ignore o comando
az role assignment createnessa secção, pois a configuração do Terraform neste artigo cria as atribuições de funções por si.
Note
Se ainda não tiver um cluster AKS com integração com o Microsoft Entra e RBAC do Kubernetes ativado para realizar testes, o exemplo de Terraform deste artigo inclui uma configuração prequisite que cria esse cluster por si. Para mais informações, consulte Implementar o cluster AKS pré-requisito com o Terraform.
Crie grupos no Microsoft Entra ID
Esta secção ensina-te a criar dois papéis de utilizador para mostrar como o RBAC do Kubernetes e o ID Microsoft Entra controlam os recursos do cluster de acesso. Os seguintes dois papéis exemplos são:
Desenvolvedor de aplicativos
- Um usuário chamado aksdev que faz parte do grupo appdev .
Site Reliability Engineer (SRE)
- Um usuário chamado akssre que faz parte do grupo opssre .
Em ambientes de produção, você pode usar usuários e grupos existentes em um locatário do Microsoft Entra.
Primeiro, obtenha o ID do recurso do seu cluster AKS usando o
az aks showcomando. Em seguida, atribua o ID do recurso a uma variável chamada AKS_ID para que ela possa ser referenciada em outros comandos.AKS_ID=$(az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query id -o tsv)Crie o primeiro grupo de exemplo no Microsoft Entra ID para os desenvolvedores de aplicativos usando o
az ad group createcomando. O exemplo a seguir cria um grupo chamado appdev:APPDEV_ID=$(az ad group create --display-name appdev --mail-nickname appdev --query id -o tsv)Crie uma atribuição de função do Azure para o grupo appdev usando o
az role assignment createcomando. Essa atribuição permite que qualquer membro do grupo usekubectlpara interagir com um cluster AKS, concedendo-lhes a Função de Usuário do Cluster de Serviço Kubernetes do Azure.az role assignment create \ --assignee $APPDEV_ID \ --role "Azure Kubernetes Service Cluster User Role" \ --scope $AKS_IDImportante
O nome da função que você especificar deve corresponder exatamente ao nome da definição da função do Azure, incluindo capitalização e espaçamento.
Tip
Se você receber um erro como
Principal 35bfec9328bd4d8d9b54dea6dac57b82 doesn't exist in the directory a5443dcd-cd0e-494d-a387-3039b419f0d5., aguarde alguns segundos para que a ID do objeto de grupo do Microsoft Entra se propague pelo diretório e tente oaz role assignment createcomando novamente.Ignora este comando. A configuração do Terraform no Deploy Kubernetes RBAC com Terraform cria esta atribuição de função para si.
Criar usuários no Microsoft Entra ID
Depois de criar os exemplos de grupos Microsoft Entra ID para programadores de aplicações e SREs, o passo seguinte é criar duas contas de utilizador correspondentes. Estes utilizadores são usados para iniciar sessão no cluster AKS e validar a integração Kubernetes RBAC descrita mais adiante neste artigo.
Antes de começar, deve definir o nome principal de utilizador (UPN) e a palavra-passe para os programadores da aplicação. O UPN deve incluir o nome de domínio verificado do seu inquilino. Por exemplo, um utilizador programador de aplicações, aksdev@contoso.com. Para identificar ou definir os nomes de domínio verificados no seu locatário, consulte Gerir nomes de domínio personalizados no ID do Microsoft Entra.
O comando a seguir solicita o UPN e o define como AAD_DEV_UPN para que possa ser usado em um comando posterior:
echo "Please enter the UPN for application developers: " && read AAD_DEV_UPN
O comando a seguir solicita a senha e a define como AAD_DEV_PW para uso em um comando posterior:
echo "Please enter the secure password for application developers: " && read AAD_DEV_PW
Criar contas de utilizador
Crie a primeira conta de usuário no Microsoft Entra ID usando o
az ad user createcomando. O exemplo seguinte cria um utilizador com o nome de exibição AKS Dev, o UPN e a palavra-passe segura usando os valores em AAD_DEV_UPN e AAD_DEV_PW:AKSDEV_ID=$(az ad user create \ --display-name "AKS Dev" \ --user-principal-name $AAD_DEV_UPN \ --password $AAD_DEV_PW \ --query id -o tsv)Adicione o utilizador ao grupo de appdev criado na secção anterior usando o
az ad group member addcomando:az ad group member add --group appdev --member-id $AKSDEV_ID
Criar recursos de clusters AKS
Temos nossos grupos do Microsoft Entra, usuários e atribuições de função do Azure criados. Agora, você configura o cluster AKS para permitir que esses diferentes grupos acessem recursos específicos.
Obtenha as credenciais de administrador do cluster usando o
az aks get-credentialscomando. Numa das secções seguintes, obterás as credenciais de cluster de utilizador regular para ver o fluxo de autenticação do Microsoft Entra em ação.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --adminCrie um namespace no cluster AKS usando o
kubectl create namespacecomando. O exemplo a seguir cria um nome de namespace dev:kubectl create namespace devNote
No Kubernetes, as Funções definem as permissões a serem concedidas e as RoleBindings as aplicam aos usuários ou grupos desejados. Essas atribuições podem ser aplicadas a um determinado namespace ou em todo o cluster. Para obter mais informações, consulte Usar a autorização RBAC do Kubernetes.
Se o utilizador para o qual conceder a vinculação RBAC do Kubernetes estiver no mesmo inquilino Microsoft Entra, atribua permissões com base no UPN. Se o utilizador estiver num inquilino diferente do Microsoft Entra, consulte e utilize a propriedade objectId .
Crie uma Função para o namespace dev , que concede permissões totais ao namespace. Em ambientes de produção, você pode especificar permissões mais granulares para diferentes usuários ou grupos. Crie um arquivo chamado
role-dev-namespace.yamle 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 applycomando e especifique o nome do arquivo do seu manifesto YAML.kubectl apply -f role-dev-namespace.yamlObtenha o ID do recurso para o grupo appdev usando o
az ad group showcomando. Este grupo é definido como o "objeto" de um RoleBinding na próxima etapa.az ad group show --group appdev --query id -o tsvCrie um RoleBinding para o grupo appdev usar o Role criado anteriormente para acesso ao namespace. Crie um arquivo chamado
rolebinding-dev-namespace.yamle cole o seguinte manifesto YAML. Na última linha, substitua groupObjectId pela saída de ID do objeto de grupo do comando anterior.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 # Replace the placeholder below with the group's objectId (GUID) name: groupObjectIdTip
Se quiser criar o RoleBinding para um único utilizador, especifique type: User e substitua groupObjectId pelo UPN na amostra anterior.
Crie o RoleBinding usando o
kubectl applycomando e especifique o nome do arquivo do seu manifesto YAML:kubectl apply -f rolebinding-dev-namespace.yaml
Revise o código do Terraform
Note
O código de exemplo para este artigo está localizado no repositório GitHub do Azure Terraform. Você pode visualizar o arquivo de log que contém os resultados do teste das versões atual e anterior do Terraform.
Veja mais artigos e código de exemplo mostrando como usar o Terraform para gerenciar recursos do Azure.
O exemplo utiliza duas configurações Terraform, cada uma no seu próprio diretório com o seu próprio estado:
- A configuração
prequisitecria um grupo de recursos e um cluster AKS com integração com o Microsoft Entra e RBAC do Kubernetes ativado, que são utilizados pelos testes end-to-end do próprio repositório para validar a configuração do cenário num cluster real. Se já tiver um cluster AKS que cumpra os pré-requisitos deste artigo, evite esta configuração e use o nome do seu próprio grupo de recursos, nome do cluster e IDs de objetos do grupo Microsoft Entra com a configuração do cenário. - A configuração do cenário, na raiz da amostra, atribui o Azure Kubernetes Service Cluster User Role aos grupos appdev e opssre no âmbito do cluster. Também cria os namespaces do Kubernetes dev e sre, com Roles e RoleBindings delimitados ao namespace, que concedem a cada grupo acesso apenas ao respetivo namespace.
O Terraform autentica-se usando o seu contexto de início de sessão na CLI do Azure. Antes de continuar, certifique-se de que tem sessão iniciada usando az login e de que selecionou a subscrição correta usando az account set --subscription <subscription-id>.
Implemente o cluster AKS necessário utilizando o Terraform
Note
Esta fase é opcional. Conclua-o apenas se ainda não tiver, para testar, um cluster do AKS com integração com o Microsoft Entra e o RBAC do Kubernetes ativado, e com o Azure RBAC para Autorização do Kubernetes desativado.
Cria um diretório com nome
prequisitee faz dele o teu diretório atual.Crie um arquivo chamado
versions.tfe insira o seguinte código:terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } random = { source = "hashicorp/random" version = "~> 3.6" } } } provider "azurerm" { features { resource_group { prevent_deletion_if_contains_resources = false } } }Crie um ficheiro com nome
variables.tfe adicione o seguinte código:variable "location" { type = string default = "eastus" description = "Location of the resources." } variable "node_count" { type = number default = 1 description = "Number of nodes in the default node pool of the AKS cluster." }Crie um ficheiro com nome
main.tfe adicione o seguinte código:data "azurerm_client_config" "current" {} resource "random_string" "suffix" { length = 6 special = false upper = false } resource "azurerm_resource_group" "rg" { location = var.location name = "rg-101-aks-entra-k8s-rbac-${random_string.suffix.result}" } resource "azurerm_kubernetes_cluster" "aks" { location = azurerm_resource_group.rg.location name = "aks-101-entra-k8s-rbac-${random_string.suffix.result}" resource_group_name = azurerm_resource_group.rg.name dns_prefix = "aks-${random_string.suffix.result}" # Kubernetes RBAC is required by the example, Azure RBAC for Kubernetes # Authorization must stay disabled. role_based_access_control_enabled = true default_node_pool { name = "agentpool" node_count = var.node_count vm_size = "Standard_D2s_v3" } identity { type = "SystemAssigned" } azure_active_directory_role_based_access_control { azure_rbac_enabled = false tenant_id = data.azurerm_client_config.current.tenant_id } }Crie um arquivo chamado
outputs.tfe insira o seguinte código:output "resource_group_name" { description = "Name of the resource group that contains the AKS cluster." value = azurerm_resource_group.rg.name } output "aks_cluster_name" { description = "Name of the AKS cluster with Microsoft Entra integration and Kubernetes RBAC enabled." value = azurerm_kubernetes_cluster.aks.name } output "appdev_group_object_id" { description = "Object ID of the existing test principal used for developer access." value = data.azurerm_client_config.current.object_id } output "opssre_group_object_id" { description = "Object ID of the existing test principal used for SRE access." value = azurerm_kubernetes_cluster.aks.identity[0].principal_id }Inicialize, formate e valide a configuração.
terraform init terraform fmt terraform validateRevê e aplica a configuração.
terraform plan -out main.tfplan terraform apply main.tfplanObter as saídas. Usas estes valores como entrada para a configuração do cenário na secção seguinte.
terraform output -raw resource_group_name terraform output -raw aks_cluster_name terraform output -raw appdev_group_object_id terraform output -raw opssre_group_object_id
Importante
As saídas appdev_group_object_id e opssre_group_object_id da configuração prequisite são IDs de principais de teste, não grupos reais do Microsoft Entra. Correspondem ao ID do objeto da conta do CLI do Azure com sessão iniciada e ao ID da entidade de segurança da identidade gerida do cluster AKS, e existem apenas para que os testes automatizados do repositório possam validar que a configuração do cenário é aplicada com êxito. Para testar o grupo Microsoft Entra e a experiência do utilizador descrita neste artigo, utilize os IDs de objetos de grupo dos grupos Create no Microsoft Entra ID em vez disso.
Implementar o RBAC do Kubernetes com o Terraform
Cria um novo diretório, separado de
prequisite, e faz dele o teu diretório atual. Esta configuração tem o seu próprio estado Terraform e não gere nem depende do estado daprequisiteconfiguração.Crie um ficheiro com nome
main.tfe adicione o seguinte código:terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.30" } } } provider "azurerm" { features {} } variable "resource_group_name" { type = string description = "Name of the resource group that contains the existing AKS cluster." } variable "aks_cluster_name" { type = string description = "Name of the existing AKS cluster with Microsoft Entra integration and Kubernetes RBAC enabled." } variable "appdev_group_object_id" { type = string description = "Object ID of an existing Microsoft Entra group used for developer access to the dev namespace." } variable "opssre_group_object_id" { type = string description = "Object ID of an existing Microsoft Entra group used for SRE access to the sre namespace." } data "azurerm_kubernetes_cluster" "aks" { name = var.aks_cluster_name resource_group_name = var.resource_group_name } provider "kubernetes" { host = data.azurerm_kubernetes_cluster.aks.kube_admin_config[0].host client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_admin_config[0].client_certificate) client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_admin_config[0].client_key) cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_admin_config[0].cluster_ca_certificate) } resource "azurerm_role_assignment" "appdev_cluster_user" { scope = data.azurerm_kubernetes_cluster.aks.id role_definition_name = "Azure Kubernetes Service Cluster User Role" principal_id = var.appdev_group_object_id } resource "azurerm_role_assignment" "opssre_cluster_user" { scope = data.azurerm_kubernetes_cluster.aks.id role_definition_name = "Azure Kubernetes Service Cluster User Role" principal_id = var.opssre_group_object_id } resource "kubernetes_namespace" "dev" { metadata { name = "dev" } } resource "kubernetes_namespace" "sre" { metadata { name = "sre" } } resource "kubernetes_role" "dev_full_access" { metadata { name = "dev-user-full-access" namespace = kubernetes_namespace.dev.metadata[0].name } rule { api_groups = ["", "extensions", "apps"] resources = ["*"] verbs = ["*"] } rule { api_groups = ["batch"] resources = ["jobs", "cronjobs"] verbs = ["*"] } } resource "kubernetes_role" "sre_full_access" { metadata { name = "sre-user-full-access" namespace = kubernetes_namespace.sre.metadata[0].name } rule { api_groups = ["", "extensions", "apps"] resources = ["*"] verbs = ["*"] } rule { api_groups = ["batch"] resources = ["jobs", "cronjobs"] verbs = ["*"] } } resource "kubernetes_role_binding" "dev_user_access" { metadata { name = "dev-user-access" namespace = kubernetes_namespace.dev.metadata[0].name } role_ref { api_group = "rbac.authorization.k8s.io" kind = "Role" name = kubernetes_role.dev_full_access.metadata[0].name } subject { kind = "Group" name = var.appdev_group_object_id api_group = "rbac.authorization.k8s.io" } } resource "kubernetes_role_binding" "sre_user_access" { metadata { name = "sre-user-access" namespace = kubernetes_namespace.sre.metadata[0].name } role_ref { api_group = "rbac.authorization.k8s.io" kind = "Role" name = kubernetes_role.sre_full_access.metadata[0].name } subject { kind = "Group" name = var.opssre_group_object_id api_group = "rbac.authorization.k8s.io" } }Cria um ficheiro com nome
terraform.tfvarse fornece o nome do grupo de recursos e do cluster do AKS que queres configurar, bem como os IDs dos objetos dos grupos de appdev e opssre .resource_group_name = "<resource-group-name>" aks_cluster_name = "<aks-cluster-name>" appdev_group_object_id = "<appdev-group-object-id>" opssre_group_object_id = "<opssre-group-object-id>"Inicialize, formate e valide a configuração.
terraform init terraform fmt terraform validateRevê e aplica a configuração.
terraform plan -out main.tfplan terraform apply main.tfplanA configuração cria as atribuições de papéis do Azure para ambos os grupos, os namespaces Kubernetes dev e sre, e os Roles e RoleBindings com âmbito de namespace, que concedem ao grupo appdev acesso ao dev e ao grupo opssre acesso ao sre.
Verificar o acesso ao espaço de nomes
Obtenha as credenciais de administrador do cluster usando o
az aks get-credentialscomando.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --adminVerifique se ambos os namespaces existem usando o
kubectl get namespacescomando.kubectl get namespacesA saída mostra os namespaces dev e sre , juntamente com os namespaces padrão criados para o cluster.
Para testar se os grupos appdev e opssre só conseguem aceder ao seu espaço de nomes atribuído, continue a aceder aos recursos do cluster AKS com identidades Microsoft Entra.
Limpeza dos recursos do Terraform
Importante
Destrói a configuração do cenário antes da prequisite configuração. O fornecedor Kubernetes da configuração do cenário precisa que o cluster AKS continue a existir para que o Terraform possa remover os namespaces, Roles e RoleBindings que criou.
No diretório de configuração do cenário, remova as atribuições de funções do Azure, os espaços de nomes, as Funções e as Associações de Funções que este criou.
terraform destroySe implementaste o
prequisitecluster AKS apenas para testar este exemplo e já não precisares dele, remove-o doprequisitediretório depois de a configuração do cenário terminar de destruir os seus recursos.terraform destroy
Aceda aos recursos do cluster AKS com identidades Microsoft Entra
Agora, teste se as permissões esperadas funcionam quando você cria e gerencia recursos em um cluster AKS. Nesses exemplos, você agenda e exibe pods no namespace atribuído pelo usuário e tenta agendar e exibir pods fora do namespace atribuído.
Redefina o contexto kubeconfig usando o
az aks get-credentialscomando. Em uma seção anterior, você define o contexto usando as credenciais de administrador do cluster. O usuário administrador ignora os prompts de entrada do Microsoft Entra. Sem o parâmetro--admin, é aplicado o contexto de usuário que requer que todas as solicitações sejam autenticadas usando o Microsoft Entra ID.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existingAgende um pod NGINX básico usando o
kubectl runcomando no namespace dev :kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace devIntroduza as credenciais da conta do grupo de appdev (introduza as suas próprias credenciais) no prompt de iniciação de sessão. Depois que você entrar com êxito, o token da conta será armazenado em cache para comandos futuros
kubectl. O NGINX é agendado com sucesso, conforme mostrado no seguinte exemplo de saída:$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code B24ZD6FP8 to authenticate. pod/nginx-dev createdUtilize o comando
kubectl get podspara visualizar os pods no namespace dev:kubectl get pods --namespace devVerifique se o status do pod NGINX está em execução. A saída se parece com a seguinte saída:
$ kubectl get pods --namespace dev NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Teste o acesso SRE aos recursos do cluster AKS
Para confirmar que a nossa adesão ao grupo Microsoft Entra e o RBAC Kubernetes funcionam corretamente entre diferentes utilizadores e grupos, experimente os comandos anteriores quando estiver iniciado como utilizador akssre .
Redefina o contexto kubeconfig usando o
az aks get-credentialscomando que limpa o token de autenticação armazenado anteriormente em cache para o utilizador aksdev.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existingAgendar e visualizar pods no namespace SRE atribuído. Quando solicitado, inicie sessão com as credenciais da conta do grupo opssre (introduza as suas próprias credenciais).
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre kubectl get pods --namespace sreComo mostrado na saída de exemplo a seguir, você pode criar e visualizar com êxito os pods:
$ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace srePara entrar, use um browser para abrir a página https://microsoft.com/devicelogin e insira o código BM4RHP3FD para autenticar.
pod/nginx-sre created $ kubectl get pods --namespace sre NAME READY STATUS RESTARTS AGE nginx-sre 1/1 Running 0Tente exibir ou agendar pods fora do namespace SRE atribuído.
kubectl get pods --all-namespaces kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace devEsses
kubectlcomandos falham, conforme mostrado na saída de exemplo a seguir. A associação de grupo do utilizador e a Função e os Vínculos de Funções do Kubernetes não concedem permissões para criar ou gerir recursos noutros namespaces.$ kubectl get pods --all-namespaces Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot list pods at the cluster scope $ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot create pods in the namespace "dev"
Criar e exibir recursos de cluster fora do namespace atribuído
Para ver pods fora do namespace dev. Use o kubectl get pods comando usando --all-namespaces:
kubectl get pods --all-namespaces
A associação ao grupo do usuário não tem uma Função Kubernetes que permita essa ação, conforme mostrado na saída de exemplo a seguir:
Error from server (Forbidden): pods is forbidden: User "aksdev@contoso.com" cannot list resource "pods" in API group "" at the cluster scope
Da mesma forma, agende um pod num namespace diferente, como o namespace SRE. A associação de grupo do usuário não se alinha com uma Função do Kubernetes e RoleBinding para conceder essas permissões, conforme mostrado na saída de exemplo a seguir:
$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre
Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot create resource "pods" in API group "" in the namespace "sre"
Limpar os recursos do cluster
Para limpar todos os recursos, execute os seguintes comandos.
Obtenha o contexto de kubeconfig de administrador e elimine os namespaces dev e sre. Esta ação também elimina os pods, Roles e RoleBindings.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
kubectl delete namespace dev
kubectl delete namespace sre
Se usou o Terraform para criar os espaços de nomes dev e sre, os Roles e os RoleBindings, consulte Limpar recursos do Terraform em vez de executar kubectl delete namespace.
Elimine as contas de utilizador do Microsoft Entra ID para aksdev e akssre.
az ad user delete --upn-or-object-id $AKSDEV_ID
az ad user delete --upn-or-object-id $AKSSRE_ID
Elimina os grupos de Microsoft Entra ID para appdev e opssre. Esta ação também elimina quaisquer atribuições de funções no Azure restantes.
az ad group delete --group appdev
az ad group delete --group opssre
Passos seguintes
Para obter mais informações sobre como proteger clusters Kubernetes, consulte Opções de acesso e identidade para AKS.
Para boas práticas em controlo de identidade e recursos, consulte Conceitos de autenticação e autorização no AKS.