Acesso e opções de identidade para o Serviço de Kubernetes do Azure (AKS)

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

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

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

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

RBAC do Kubernetes

O RBAC Kubernetes oferece filtragem granular de ações de usuário. Com este mecanismo de controle:

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

Para obter mais informações, confira Usar a autorização do RBAC para Kubernetes.

Funções e ClusterRoles

Funções

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

Observação

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

Para conceder permissões em todo o cluster ou a recursos de cluster fora de um namespace específico, você pode usar ClusterRoles.

ClusterRoles

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

RoleBindings e ClusterRoleBindings

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

RoleBindings

Atribuir funções a usuários para um namespace específico usando RoleBindings. Com o RoleBindings, você pode separar logicamente um cluster AKS individual, permitindo apenas que os usuários acessem os recursos do aplicativo em seu namespace atribuído.

Para associar funções em todo o cluster ou a recursos de cluster fora de um namespace específico, você pode usar ClusterRoleBindings.

ClusterRoleBinding

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

Observação

A Microsoft/AKS realiza todas as ações de cluster com o consentimento do usuário em uma função do Kubernetes integrada e aks-service uma associação de função integradaaks-service-rolebinding.

Essa função permite que o AKS diagnostique e solucione problemas de cluster, mas não pode modificar permissões nem criar funções ou associações de função nem outras ações de alto privilégio. O acesso à função só é habilitado em tíquetes de suporte ativos com acesso JIT (just-in-time). 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 tipos de usuários primários no Kubernetes. A API Kubernetes mantém e gerencia contas de serviço. As credenciais de contas de serviço são armazenadas como segredos do Kubernetes, o que permite que sejam utilizadas por pods autorizados para se comunicar com o servidor de API. A maioria das solicitações de API fornecem um token de autenticação para uma conta de serviço ou uma conta de usuário normal.

Contas de usuário normal permitem o acesso mais tradicional para administradores humanos ou desenvolvedores, não apenas serviços e processos. Embora o Kubernetes não ofereça uma solução de gerenciamento de identidade para armazenar contas de usuário e senhas comuns, você pode integrar ao Kubernetes soluções de identidade externas. Para clusters do AKS, essa 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 de Kubernetes.

Controle de acesso baseado em função do Azure

O RBAC (controle de acesso baseado em função do Azure) é um sistema de autorização desenvolvido 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 em seu cluster do AKS.
RBAC do Azure Projetado para trabalhar em recursos em sua assinatura do Azure.

Com o RBAC do Azure, você cria um definição de função que descreve as permissões a serem aplicadas. Em seguida, você atribui essa definição de função a um usuário ou grupo, 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 por toda a assinatura.

Para saber mais, confira O que é o RBAC (controle de acesso baseado em função) do Azure.

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

RBAC do Azure para autorizar o acesso ao recurso do AKS

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

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

RBAC do Azure para a autorização do Kubernetes

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

Azure RBAC for Kubernetes authorization flow

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

Se a identidade que está fazendo a solicitação existir no Microsoft Entra ID, o Azure se unirá ao RBAC do Kubernetes 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 do Kubernetes normal.

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

Com esse recurso, você não só dá aos usuários permissões para o recurso do AKS nas 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 função Azure Kubernetes Service RBAC Reader no escopo da assinatura. O destinatário da função poderá listar e obter todos os objetos 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ções passo-a-passo, consulte o nosso guia de instruções Usar o RBAC do Azure para autorização de Kubernetes.

Funções internas

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

Função Descrição
Leitor de RBAC do Serviço de Kubernetes do Azure 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.
Não permite a exibição de Secrets. A leitura dos conteúdos de Secrets, permite o acesso às credenciais de ServiceAccount no namespace, o que permitiria o acesso à API como qualquer ServiceAccount no namespace (uma forma de elevação de privilégio).
Gravador de RBAC do Serviço de Kubernetes do Azure Permite acesso de leitura/gravação à maioria dos objetos em um namespace.
Não permite exibir nem modificar funções ou associações de função.
Permite acessar Secrets e executar pods como uma ServiceAccount no namespace, de modo que ela possa ser usada para obter os níveis de acesso de API de qualquer conta no namespace.
Administrador do RBAC do Serviço de Kubernetes do Azure Permite o acesso de administrador, destinado a ser concedido em um namespace.
Permite acesso de leitura/gravação para a maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função no namespace.
Não permite acesso de gravação à cota de recursos ou ao próprio namespace.
Administrador do Cluster do RBAC do Serviço de Kubernetes do Azure Permite o acesso de superusuário para executar ações em qualquer recurso.
Fornece controle total sobre cada recurso no cluster e em todos os namespaces.

Integração no Microsoft Entra

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

Microsoft Entra integration with AKS clusters

Com os clusters do AKS integrados ao Microsoft Entra, você pode conceder aos usuários ou grupos acesso aos recursos do Kubernetes em um namespace ou em todo o cluster.

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

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

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

Servidor de API e de webhook

Webhook and API server authentication flow

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

  1. kubectl usa o aplicativo cliente do Microsoft Entra para conectar usuários com o fluxo de concessão de autorização do dispositivo OAuth 2.0.
  2. O Microsoft Entra ID fornece um access_token, um id_token e um refresh_token.
  3. O usuário faz uma solicitação para o kubectl com um access_token do kubeconfig.
  4. O kubectl envia o access_token ao servidor de API.
  5. O servidor de API está configurado com o servidor de webhook de autenticação para executar a validação.
  6. O servidor de webhook de autenticação confirma que a assinatura do Token Web JSON é válida verificando a chave de assinatura pública do Microsoft Entra.
  7. O aplicativo de servidor usa as credenciais fornecidas pelo usuário para consultar associações de grupo do usuário conectado na API do MS Graph.
  8. Uma resposta é enviada ao servidor de API com informações do usuário, como a declaração de UPN 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 na função/Rolebinding do Kubernetes.
  10. Depois de autorizado, o servidor de API retorna uma resposta ao kubectl.
  11. O kubectl fornece uma resposta ao usuário.

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

Permissões de serviço do 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 é diferente da permissão de identidade do cluster, que é criada durante a criação do cluster.

Identidade que cria e opera as permissões do cluster

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

Permissão Motivo
Microsoft.Compute/diskEncryptionSets/read Necessário para ler a ID do conjunto de criptografia de disco.
Microsoft.Compute/proximityPlacementGroups/write Necessário para atualizar os grupos de posicionamento por proximidade.
Microsoft.Network/applicationGateways/read
Microsoft.Network/applicationGateways/write
Microsoft.Network/virtualNetworks/subnets/join/action
Necessário para configurar os gateways de aplicativo 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 Standard Load Balancer.
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 os workspaces do Log Analytics e o monitoramento do Azure para contêineres.
Microsoft.Network/virtualNetworks/joinLoadBalancer/action Necessária para configurar os pools de back-end do Load Balancer baseado em IP.

Permissões de identidade do cluster AKS

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

Permissão Motivo
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 o 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 o AzureFile ou o 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 as tabelas de roteamento e as rotas dos nós.
Microsoft.Compute/virtualMachines/read Necessário para encontrar 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 encontrar informações para máquinas virtuais em um conjunto de dimensionamento de máquinas virtuais, como zonas, domínio de falha, tamanho e discos de dados.
Microsoft.Network/networkInterfaces/write Necessário para adicionar uma máquina virtual de 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áquinas virtuais a um pool de endereços de back-end do balanceador de carga e aos nós de expansão em um conjunto de dimensionamento de máquinas virtuais.
Microsoft.Compute/virtualMachineScaleSets/delete Necessário para excluir um conjunto de dimensionamento de máquinas virtuais de um pool de endereços de back-end do balanceador de carga e dos nós de redução vertical em um conjunto de dimensionamento de máquinas virtuais.
Microsoft.Compute/virtualMachineScaleSets/virtualmachines/write Necessário para anexar AzureDisks e adicionar uma máquina virtual de um conjunto de dimensionamento de máquinas virtuais ao balanceador de carga.
Microsoft.Network/networkInterfaces/read Necessário para pesquisar IPs internos e pools de endereços de back-end de 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 de balanceador de carga para uma máquina virtual em um conjunto de dimensionamento de máquinas virtuais.
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/ipconfigurations/publicipaddresses/read Necessário para encontrar IPs públicos para uma máquina virtual em um conjunto de dimensionamento de máquinas virtuais.
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 do AzureDisk.
Microsoft.Compute/locations/vmSizes/read
Microsoft.Compute/locations/operations/read
Necessário para encontrar tamanhos de máquina virtual a fim de encontrar os limites de volume do AzureDisk.

Permissões adicionais de identidade do cluster

Ao criar um cluster com atributos específicos, você precisará das permissões adicionais a seguir para a identidade do cluster. Essas permissões não são atribuídas automaticamente, portanto, você deve adicioná-las à identidade do cluster após a criação da mesma.

Permissão Motivo
Microsoft.Network/networkSecurityGroups/write
Microsoft.Network/networkSecurityGroups/read
Necessá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
Necessá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
Necessário se estiver usando uma sub-rede associada a uma tabela de roteamento em outro grupo de recursos, como uma VNET personalizada com uma tabela de roteamento personalizada. Necessário para verificar se uma sub-rede já existe 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 uma sub-rede já existe para o balanceador de carga interno no grupo de recursos.
Microsoft.Network/privatednszones/* Necessário se estiver usando uma zona DNS privada em outro grupo de recursos, como um privateDNSZone personalizado.

Acesso ao nó de AKS

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

Access Motivo
kubelet Necessário para permitir acesso ao ACR por MSI.
http app routing Necessário para permissão de gravação para "nome aleatorio".aksapp.io.
container insights Necessário para conceder permissão para o workspace do Log Analytics.

Resumo

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

  1. Executar az login para autenticar no Azure.

  2. Executar az aks get-credentials para baixar as credenciais do cluster no .kube/config.

  3. Executar comandos de kubectl.

    • Pode ser que o pimeiro comandos dispare 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) indicada na segunda coluna é mostrada na guia Controle de acesso.
  • O grupo Administrador de cluster do Microsoft Entra é mostrado na guia Configuração.
    • Também encontrado com o nome de parâmetro --aad-admin-group-object-ids na CLI do Azure.
Descrição Concessão de função necessária Grupo(s) do Microsoft Entra de administrador do cluster Quando usar
Logon de administrador herdado usando o certificado do cliente Função de Administrador do Serviço de Kubernetes do Azure. Essa função permite que az aks get-credentials seja usado com o sinalizador --admin, que baixa um certificado de administrador de cluster herdado (não do Microsoft Entra) no .kube/config do usuário. Essa é a única finalidade da "Função de Administrador de 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 cluster.
Microsoft Entra ID com (Cluster)RoleBindings manuais Função de Usuário do Cluster do Serviço de Kubernetes do Azure. A função "Usuário" permite que az aks get-credentials seja usada sem o sinalizador --admin. (Essa é a única finalidade da "Função de Usuário do Kubernetes do Azure".) O resultado, em um cluster habilitado para o Microsoft Entra ID, é o download de uma entrada vazia em .kube/config, o que dispara a autenticação baseada em navegador quando é usado pela primeira vez por kubectl. O usuário não está em nenhum desses grupos. Como o usuário não está em nenhum grupo de Administração de Cluster, seus direitos serão controlados inteiramente por quaisquer RoleBindings ou ClusterRoleBindings que tenham sido configurados pelos administradores de cluster. Os (Cluster)RoleBindings nomeiam usuários do Microsoft Entra ou grupos do Microsoft Entra como seus subjects. Se nenhuma dessas associações tiver sido configurada, o usuário não poderá executar nenhum comando kubectl. Se você quiser um controle de acesso refinado e não estiver usando a Autorização do RBAC do Azure para Kubernetes. Observe que o usuário que configura as associações deve fazer logon por um dos outros métodos listados nesta tabela.
Microsoft Entra ID por membro do grupo de administradores O mesmo que o descrito acima O usuário é um membro de um dos grupos listados aqui. O AKS gera automaticamente um ClusterRoleBinding que associa todos os grupos listados à função cluster-admin do Kubernetes. Portanto, os usuários nesses grupos podem executar todos os comandos kubectl como cluster-admin. Se você quiser conceder direitos de administrador aos usuários de forma conveniente e não estiver usando a autorização do RBAC do Azure para Kubernetes.
Microsoft Entra ID com o RBAC do Azure para Autorização do Kubernetes Duas funções:
Primeiro, Função de Usuário do Cluster do Serviço de Kubernetes do Azure (como acima ).
Em segundo lugar, uma das funções de "RBAC do Serviço de Kubernetes do Azure..." listadas acima ou sua própria alternativa personalizada.
O campo de funções de administrador na guia Configuração é irrelevante quando a Autorização do RBAC do Azure para Kubernetes está habilitado. Você está usando a Autorização do RBAC do Azure para Kubernetes. Esta abordagem oferece um controle refinado, sem a necessidade de configurar RoleBindings ou ClusterRoleBindings.

Próximas etapas

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