Access and identity options for Azure Kubernetes Service (AKS) (Opções de acesso e de identidade do Azure Kubernetes Service (AKS))

Você pode autenticar, autorizar, proteger e controlar o acesso aos clusters do Kubernetes de várias maneiras:

  • Usando o controle de acesso baseado em função do Kubernetes (Kubernetes RBAC), você pode conceder aos usuários, grupos e contas de serviço acesso apenas aos recursos de que precisam.
  • Com o Serviço Kubernetes do Azure (AKS), você pode aprimorar ainda mais a estrutura de segurança e permissões usando o Microsoft Entra ID e o Azure RBAC.

Kubernetes, RBAC e AKS ajudam você a proteger o acesso ao cluster e fornecem apenas as permissões mínimas necessárias para desenvolvedores e operadores.

Este artigo apresenta os principais conceitos que ajudam a autenticar e atribuir permissões no AKS.

RBAC do Kubernetes

O RBAC do Kubernetes fornece filtragem granular das ações do usuário. Com este mecanismo de controlo:

  • Você atribui permissão a usuários ou grupos de usuários para criar e modificar recursos ou exibir logs de cargas de trabalho de aplicativos em execução.
  • Você pode definir o escopo de permissões para um único namespace ou em todo o cluster AKS.
  • Você cria funções para definir permissões e, em seguida, atribui essas funções a usuários com associações de função.

Para obter mais informações, consulte Usando a autorização RBAC do Kubernetes.

Funções e ClusterRoles

Funções

Antes de atribuir permissões a usuários com o Kubernetes RBAC, você definirá as permissões de usuário como uma Função. Conceda permissões dentro de um namespace usando funções.

Nota

As funções do Kubernetes concedem permissões, não negam permissões.

Para conceder permissões em todo o cluster ou para recursos de cluster fora de um determinado namespace, você pode usar ClusterRoles.

ClusterRoles

Um ClusterRole concede e aplica permissões a recursos em todo o cluster, não a um namespace específico.

RoleBindings e ClusterRoleBindings

Depois de definir funções para conceder permissões a recursos, você atribui essas permissões RBAC do Kubernetes com um RoleBinding. Se o cluster AKS se integrar com o ID do Microsoft Entra, os RoleBindings concederão permissões aos usuários do Microsoft Entra para executar ações dentro do cluster. Veja como, em Controlar o acesso a recursos de cluster usando o Kubernetes, o controle de acesso baseado em função e as identidades do Microsoft Entra.

Vinculações de Funções

Atribua funções a usuários para um determinado namespace usando RoleBindings. Com RoleBindings, você pode segregar logicamente um único cluster AKS, permitindo apenas que os usuários acessem os recursos do aplicativo em seu namespace atribuído.

Para vincular funções em todo o cluster ou a recursos de cluster fora de um determinado namespace, use ClusterRoleBindings.

ClusterRoleBinding

Com um ClusterRoleBinding, você vincula funções a usuários e aplica a recursos em todo o cluster, não a um namespace específico. Essa abordagem permite que você conceda aos administradores ou engenheiros de suporte acesso a todos os recursos no cluster AKS.

Nota

A Microsoft/AKS executa quaisquer ações de cluster com o consentimento do usuário sob uma função aks-service Kubernetes interna e vinculação aks-service-rolebindingde função interna.

Essa função permite que o AKS solucione e diagnostique problemas de cluster, mas não pode modificar permissões nem criar funções ou associações de função ou outras ações de alto privilégio. O acesso à função só é habilitado em tíquetes de suporte ativo com acesso just-in-time (JIT). Leia mais sobre as políticas de suporte do AKS.

Contas de serviço do Kubernetes

As contas de serviço são um dos principais tipos de usuário no Kubernetes. A API do Kubernetes mantém e gerencia contas de serviço. As credenciais da conta de serviço são armazenadas como segredos do Kubernetes, permitindo que sejam usadas por pods autorizados para se comunicar com o Servidor de API. A maioria das solicitações de API fornece um token de autenticação para uma conta de serviço ou uma conta de usuário normal.

Contas de usuário normais permitem acesso mais tradicional para administradores humanos ou desenvolvedores, não apenas serviços e processos. Embora o Kubernetes não forneça uma solução de gerenciamento de identidade para armazenar contas de usuário e senhas regulares, você pode integrar soluções de identidade externas ao Kubernetes. Para clusters AKS, esta solução de identidade integrada é o Microsoft Entra ID.

Para obter mais informações sobre as opções de identidade no Kubernetes, consulte Autenticação do Kubernetes.

Controlo de acesso baseado em funções do Azure

O RBAC (controle de acesso baseado em função) do Azure é um sistema de autorização criado no Azure Resource Manager que fornece gerenciamento de acesso refinado dos recursos do Azure.

Sistema RBAC Description
RBAC do Kubernetes Projetado para trabalhar em recursos do Kubernetes dentro do seu cluster AKS.
RBAC do Azure Projetado para trabalhar em recursos em sua assinatura do Azure.

Com o RBAC do Azure, você cria uma definição de função que descreve as permissões a serem aplicadas. Em seguida, você atribui a um usuário ou grupo essa definição de função por meio de uma atribuição de função para um escopo específico. O escopo pode ser um recurso individual, um grupo de recursos ou através da assinatura.

Para obter mais informações, consulte O que é o controle de acesso baseado em função do Azure (Azure RBAC)?

Há dois níveis de acesso necessários para operar totalmente um cluster AKS:

RBAC do Azure para autorizar o acesso ao recurso AKS

Com o RBAC do Azure, você pode fornecer aos seus usuários (ou identidades) acesso granular aos recursos do AKS em uma ou mais assinaturas. Por exemplo, você pode usar a função de Colaborador do Serviço Kubernetes do Azure para dimensionar e atualizar seu cluster. Enquanto isso, outro usuário com a função de Administrador do Cluster de Serviço do Kubernetes do Azure só tem permissão para puxar o Admin kubeconfig.

Use o RBAC do Azure para definir o acesso ao arquivo de configuração do Kubernetes no AKS.

Autorização do RBAC do Azure para Kubernetes

Com a integração do RBAC do Azure, o AKS usará um servidor webhook de Autorização do Kubernetes para que você possa gerenciar permissões e atribuições de recursos de cluster do Kubernetes integrado ao Microsoft Entra usando a definição de função e as atribuições de função do Azure.

Azure RBAC for Kubernetes authorization flow

Como mostrado no diagrama acima, ao usar a integração do Azure RBAC, todas as solicitações para a API do Kubernetes seguirão o mesmo fluxo de autenticação, conforme explicado na seção de integração do Microsoft Entra.

Se a identidade que faz a solicitação existir no Microsoft Entra ID, o Azure se unirá ao Kubernetes RBAC para autorizar a solicitação. Se a identidade existir fora do Microsoft Entra ID (ou seja, uma conta de serviço do Kubernetes), a autorização será adiada para o RBAC normal do Kubernetes.

Nesse cenário, você usa mecanismos e APIs do RBAC do Azure para atribuir funções internas aos usuários ou criar funções personalizadas, assim como faria com as funções do Kubernetes.

Com esse recurso, você não apenas concede aos usuários permissões para o recurso AKS em todas as assinaturas, mas também configura a função e as permissões para dentro de cada um desses clusters que controlam o acesso à API do Kubernetes. Por exemplo, você pode conceder a Azure Kubernetes Service RBAC Reader função no escopo da assinatura. O destinatário da função poderá listar e obter todos os objetos do Kubernetes de todos os clusters sem modificá-los.

Importante

Você precisa habilitar a autorização do RBAC do Azure para Kubernetes antes de usar esse recurso. Para obter mais detalhes e orientação passo a passo, siga nosso guia de instruções Usar o RBAC do Azure para Autorização do Kubernetes.

Funções incorporadas

O AKS fornece as seguintes quatro funções integradas. Eles são semelhantes às funções internas do Kubernetes com algumas diferenças, como o suporte a CRDs. Consulte a lista completa de ações permitidas por cada função interna do Azure.

Função Description
Azure Kubernetes Service RBAC Reader Permite acesso somente leitura para ver a maioria dos objetos em um namespace.
Não permite a visualização de funções ou associações de funções.
Não permite a visualização Secrets. A leitura do Secrets conteúdo permite o acesso a credenciais no namespace, o que permitiria o acesso à ServiceAccount API como qualquer ServiceAccount outro no namespace (uma forma de escalonamento de privilégios).
Gravador RBAC do Serviço Kubernetes do Azure Permite acesso de leitura/gravação à maioria dos objetos em um namespace.
Não permite visualizar ou modificar funções ou associações de funções.
Permite acessar Secrets e executar pods como qualquer ServiceAccount no namespace, para que possa ser usado para obter os níveis de acesso à API de qualquer ServiceAccount no namespace.
Azure Kubernetes Service RBAC Admin Permite acesso de administrador, destinado a ser concedido dentro de um namespace.
Permite acesso de leitura/gravação à maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função dentro do namespace.
Não permite acesso de gravação à cota de recursos ou ao namespace em si.
Azure Kubernetes Service RBAC Cluster Admin Permite o acesso de superusuário para executar qualquer ação em qualquer recurso.
Dá controle total sobre todos os recursos no cluster e em todos os namespaces.

Integração com o Microsoft Entra

Melhore a segurança do seu cluster AKS com a integração do Microsoft Entra. Desenvolvido com base em décadas de gerenciamento de identidades corporativas, o Microsoft Entra ID é um serviço de gerenciamento de diretórios e identidades multilocatário baseado em nuvem que combina serviços de diretório principais, gerenciamento de acesso a aplicativos e proteção de identidade. Com o Microsoft Entra ID, você pode integrar identidades locais em clusters AKS para fornecer uma única fonte de gerenciamento e segurança de contas.

Microsoft Entra integration with AKS clusters

Com os clusters AKS integrados do Microsoft Entra, você pode conceder aos usuários ou grupos acesso aos recursos do Kubernetes dentro de um namespace ou através do cluster.

  1. Para obter um contexto de kubectl configuração, um usuário executa o comando az aks get-credentials .
  2. Quando um usuário interage com o cluster AKS com kubectlo , ele é solicitado a entrar com suas credenciais do Microsoft Entra.

Essa abordagem fornece uma única fonte para gerenciamento de conta de usuário e credenciais de senha. O usuário só pode acessar os recursos conforme definido pelo administrador do cluster.

A autenticação do Microsoft Entra é fornecida para clusters AKS com OpenID Connect. OpenID Connect é uma camada de identidade construída sobre o protocolo OAuth 2.0. Para obter mais informações sobre o OpenID Connect, consulte a documentação do OpenID Connect. De dentro do cluster Kubernetes, a Autenticação de Token Webhook é usada para verificar tokens de autenticação. A autenticação do token Webhook é configurada e gerenciada como parte do cluster AKS.

Webhook e servidor API

Webhook and API server authentication flow

Como mostrado no gráfico acima, o servidor API chama o servidor de webhook AKS e executa as seguintes etapas:

  1. kubectl usa o aplicativo cliente Microsoft Entra para entrar em usuários com fluxo de concessão de autorização de dispositivo OAuth 2.0.
  2. O Microsoft Entra ID fornece um access_token, id_token e um refresh_token.
  3. O usuário faz uma solicitação para kubectl com um access_token de kubeconfig.
  4. kubectl envia o access_token para o API Server.
  5. O Servidor de API é configurado com o Auth WebHook Server para executar a validação.
  6. O servidor webhook de autenticação confirma que a assinatura do Web Token JSON é válida verificando a chave de assinatura pública do Microsoft Entra.
  7. O aplicativo de servidor usa credenciais fornecidas pelo usuário para consultar associações de grupo do usuário conectado a partir da API do MS Graph.
  8. Uma resposta é enviada ao Servidor de API com informações do usuário, como a declaração UPN (nome principal do usuário) do token de acesso e a associação de grupo do usuário com base na ID do objeto.
  9. A API executa uma decisão de autorização com base no Kubernetes Role/RoleBinding.
  10. Uma vez autorizado, o servidor de API retorna uma resposta para kubectl.
  11. kubectl fornece feedback ao utilizador.

Saiba como integrar o AKS com o Microsoft Entra ID com o nosso guia de instruções de integração do Microsoft Entra gerenciado pelo AKS.

Permissões do serviço AKS

Ao criar um cluster, o AKS gera ou modifica os recursos de que precisa (como VMs e NICs) para criar e executar o cluster em nome do usuário. Essa identidade é distinta da permissão de identidade do cluster, que é criada durante a criação do cluster.

Identidade criando e operando as permissões de cluster

As permissões a seguir são necessárias para a identidade que cria e opera o cluster.

Permissão Razão
Microsoft.Compute/diskEncryptionSets/read Necessário para ler o ID do conjunto de criptografia de disco.
Microsoft.Compute/proximityPlacementGroups/write Necessário para atualizar grupos de posicionamento de proximidade.
Microsoft.Network/applicationGateways/read
Microsoft.Network/applicationGateways/write
Microsoft.Network/virtualNetworks/subnets/join/action
Necessário para configurar gateways de aplicativos e ingressar na sub-rede.
Microsoft.Network/virtualNetworks/subnets/join/action Necessário para configurar o Grupo de Segurança de Rede para a sub-rede ao usar uma VNET personalizada.
Microsoft.Network/publicIPAddresses/join/action
Microsoft.Network/publicIPPrefixes/join/action
Necessário para configurar os IPs públicos de saída no Balanceador de Carga Padrão.
Microsoft.OperationalInsights/workspaces/sharedkeys/read
Microsoft.OperationalInsights/workspaces/read
Microsoft.OperationsManagement/solutions/write
Microsoft.OperationsManagement/solutions/read
Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Necessário para criar e atualizar espaços de trabalho do Log Analytics e monitoramento do Azure para contêineres.
Microsoft.Network/virtualNetworks/joinLoadBalancer/action Necessário para configurar os Pools de Back-end do Balanceador de Carga baseados em IP.

Permissões de identidade de cluster AKS

As permissões a seguir são usadas pela identidade do cluster AKS, que é criada e associada ao cluster AKS. Cada permissão é usada pelos motivos abaixo:

Permissão Razão
Microsoft.ContainerService/managedClusters/*
Necessário para criar usuários e operar o cluster
Microsoft.Network/loadBalancers/delete
Microsoft.Network/loadBalancers/read
Microsoft.Network/loadBalancers/write
Necessário para configurar o balanceador de carga para um serviço LoadBalancer.
Microsoft.Network/publicIPAddresses/delete
Microsoft.Network/publicIPAddresses/read
Microsoft.Network/publicIPAddresses/write
Necessário para localizar e configurar IPs públicos para um serviço LoadBalancer.
Microsoft.Network/publicIPAddresses/join/action Necessário para configurar IPs públicos para um serviço LoadBalancer.
Microsoft.Network/networkSecurityGroups/read
Microsoft.Network/networkSecurityGroups/write
Necessário para criar ou excluir regras de segurança para um serviço LoadBalancer.
Microsoft.Compute/disks/delete
Microsoft.Compute/disks/read
Microsoft.Compute/disks/write
Microsoft.Compute/locations/DiskOperations/read
Necessário para configurar AzureDisks.
Microsoft.Storage/storageAccounts/delete
Microsoft.Storage/storageAccounts/listKeys/action
Microsoft.Storage/storageAccounts/read
Microsoft.Storage/storageAccounts/write
Microsoft.Storage/operations/read
Necessário para configurar contas de armazenamento para AzureFile ou AzureDisk.
Microsoft.Network/routeTables/read
Microsoft.Network/routeTables/routes/delete
Microsoft.Network/routeTables/routes/read
Microsoft.Network/routeTables/routes/write
Microsoft.Network/routeTables/write
Necessário para configurar tabelas de rotas e rotas para nós.
Microsoft.Compute/virtualMachines/read Necessário para localizar informações para máquinas virtuais em um VMAS, como zonas, domínio de falha, tamanho e discos de dados.
Microsoft.Compute/virtualMachines/write Necessário para anexar AzureDisks a uma máquina virtual em um VMAS.
Microsoft.Compute/virtualMachineScaleSets/read
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/read
Microsoft.Compute/virtualMachineScaleSets/virtualmachines/instanceView/read
Necessário para localizar informações para máquinas virtuais em um conjunto de dimensionamento de máquina virtual, como zonas, domínio de falha, tamanho e discos de dados.
Microsoft.Network/networkInterfaces/write Necessário para adicionar uma máquina virtual em um VMAS a um pool de endereços de back-end do balanceador de carga.
Microsoft.Compute/virtualMachineScaleSets/write Necessário para adicionar um conjunto de dimensionamento de máquina virtual a um balanceador de carga, back-end, pools de endereços e dimensionar nós em um conjunto de dimensionamento de máquina virtual.
Microsoft.Compute/virtualMachineScaleSets/delete Necessário para excluir um conjunto de dimensionamento de máquina virtual para um conjunto de endereços de back-end de balanceador de carga e reduzir nós em um conjunto de dimensionamento de máquina virtual.
Microsoft.Compute/virtualMachineScaleSets/virtualmachines/write Necessário para anexar AzureDisks e adicionar uma máquina virtual de um conjunto de escala de máquina virtual ao balanceador de carga.
Microsoft.Network/networkInterfaces/read Necessário para pesquisar IPs internos e pools de endereços de back-end do balanceador de carga para máquinas virtuais em um VMAS.
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/read Necessário para pesquisar IPs internos e pools de endereços de back-end do balanceador de carga para uma máquina virtual em um conjunto de dimensionamento de máquina virtual.
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/ipconfigurations/publicipaddresses/read Necessário para localizar IPs públicos para uma máquina virtual em um conjunto de escala de máquina virtual.
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/read
Necessário para verificar se existe uma sub-rede para o balanceador de carga interno em outro grupo de recursos.
Microsoft.Compute/snapshots/delete
Microsoft.Compute/snapshots/read
Microsoft.Compute/snapshots/write
Necessário para configurar instantâneos para AzureDisk.
Microsoft.Compute/locations/vmSizes/read
Microsoft.Compute/locations/operations/read
Necessário para localizar tamanhos de máquinas virtuais para localizar limites de volume do AzureDisk.

Permissões adicionais de identidade de cluster

Ao criar um cluster com atributos específicos, você precisará das seguintes permissões adicionais para a identidade do cluster. Como essas permissões não são atribuídas automaticamente, você deve adicioná-las à identidade do cluster depois que ele for criado.

Permissão Razão
Microsoft.Network/networkSecurityGroups/write
Microsoft.Network/networkSecurityGroups/read
Obrigatório se estiver usando um grupo de segurança de rede em outro grupo de recursos. Necessário para configurar regras de segurança para um serviço LoadBalancer.
Microsoft.Network/virtualNetworks/subnets/read
Microsoft.Network/virtualNetworks/subnets/join/action
Obrigatório se estiver usando uma sub-rede em outro grupo de recursos, como uma VNET personalizada.
Microsoft.Network/routeTables/routes/read
Microsoft.Network/routeTables/routes/write
Obrigatório se estiver usando uma sub-rede associada a uma tabela de rotas em outro grupo de recursos, como uma VNET personalizada com uma tabela de rotas personalizada. Necessário para verificar se já existe uma sub-rede para a sub-rede no outro grupo de recursos.
Microsoft.Network/virtualNetworks/subnets/read Necessário se estiver usando um balanceador de carga interno em outro grupo de recursos. Necessário para verificar se já existe uma sub-rede para o balanceador de carga interno no grupo de recursos.
Microsoft.Network/privatednszones/* Obrigatório se estiver usando uma zona DNS privada em outro grupo de recursos, como um DNSZone privado personalizado.

Acesso ao nó AKS

Por padrão, o acesso ao nó não é necessário para o AKS. O acesso a seguir é necessário para o nó se um componente específico for aproveitado.

Access Razão
kubelet Necessário para conceder acesso MSI ao ACR.
http app routing Necessário para permissão de gravação para "nome aleatório".aksapp.io.
container insights Necessário para conceder permissão ao espaço de trabalho do Log Analytics.

Resumo

Veja a tabela para obter um resumo rápido de como os usuários podem se autenticar no Kubernetes quando a integração do Microsoft Entra está habilitada. Em todos os casos, a sequência de comandos do usuário é:

  1. Execute az login para autenticar no Azure.

  2. Execute az aks get-credentials para baixar credenciais para o cluster em .kube/config.

  3. Executar kubectl comandos.

    • O primeiro comando pode acionar a autenticação baseada em navegador para autenticar no cluster, conforme descrito na tabela a seguir.

No portal do Azure, você pode encontrar:

  • A Concessão de Função (concessão de função do RBAC do Azure) referida na segunda coluna é mostrada na guia Controle de Acesso.
  • O grupo Cluster Admin Microsoft Entra é mostrado na guia Configuração .
    • Também encontrado com o nome --aad-admin-group-object-ids do parâmetro na CLI do Azure.
Description Concessão de função necessária Grupo(s) do Microsoft Entra de administrador de cluster Quando utilizar o
Login de administrador herdado usando certificado de cliente Função de Administrador do Serviço Kubernetes do Azure. Essa função permite az aks get-credentials ser usada com o --admin sinalizador, que baixa um certificado de administrador de cluster herdado (não Microsoft Entra) no ..kube/config Esta é a única finalidade da "Função de Administração do Kubernetes do Azure". n/d Se você estiver permanentemente bloqueado por não ter acesso a um grupo válido do Microsoft Entra com acesso ao seu cluster.
ID do Microsoft Entra com manual (Cluster)RoleBindings Função de Usuário do Cluster de Serviço do Kubernetes do Azure. A função "Usuário" permite az aks get-credentials ser usada sem o --admin sinalizador. (Esta é a única finalidade da "Função de Usuário do Cluster de Serviço do Kubernetes do Azure".) O resultado, em um cluster habilitado para ID do Microsoft Entra, é o download de uma entrada vazia no , que aciona a autenticação baseada em .kube/confignavegador quando é usada pela primeira vez pelo kubectl. O usuário não está em nenhum desses grupos. Como o usuário não está em nenhum grupo de administradores de cluster, seus direitos serão controlados inteiramente por quaisquer RoleBindings ou ClusterRoleBindings que tenham sido configurados por administradores de cluster. Os (Cluster)RoleBindings nomeiam usuários do Microsoft Entra ou grupos do Microsoft Entra como seus subjects. Se tais ligações não tiverem sido configuradas, o usuário não poderá excutar nenhum kubectl comando. Se você quiser um controle de acesso refinado e não estiver usando o RBAC do Azure para Autorização do Kubernetes. Observe que o usuário que configura as associações deve fazer login por um dos outros métodos listados nesta tabela.
ID do Microsoft Entra por membro do grupo de administração Mesmo que acima O usuário é membro de um dos grupos listados aqui. O AKS gera automaticamente um ClusterRoleBinding que vincula todos os grupos listados à cluster-admin função Kubernetes. Assim, os usuários desses grupos podem executar todos os kubectl comandos como cluster-admin. Se você quiser conceder convenientemente aos usuários direitos de administrador completos e não estiver usando o RBAC do Azure para autorização do Kubernetes.
Microsoft Entra ID com autorização do Azure RBAC para Kubernetes Duas funções:
Primeiro, a Função de Usuário do Cluster de Serviço do Kubernetes do Azure (como acima).
Em segundo lugar, um dos "Azure Kubernetes Service RBAC..." funções listadas acima, ou sua própria alternativa personalizada.
O campo de funções de administrador na guia Configuração é irrelevante quando o RBAC do Azure para Autorização do Kubernetes está habilitado. Você está usando o RBAC do Azure para autorização do Kubernetes. Essa abordagem oferece controle refinado, sem a necessidade de configurar RoleBindings ou ClusterRoleBindings.

Próximos passos

Para obter mais informações sobre os principais conceitos de Kubernetes e AKS, consulte os seguintes artigos: