Compartilhar via


Opções de acesso e identidade para AKS (Serviço de Kubernetes do Azure)

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 AKS (Serviço de Kubernetes do Azure), você pode aprimorar ainda mais a estrutura de segurança e permissões usando Microsoft Entra ID e Azure RBAC.

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 Como usar a autorização do RBAC do 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

O Microsoft/AKS executa todas as operações no cluster com o consentimento do usuário, utilizando uma função interna do Kubernetes aks-service e uma vinculação de função padrão aks-service-rolebinding, que associa essa função à identidade do serviço de Suporte da Microsoft aks-support.

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 é Microsoft Entra ID.

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

Azure controle de acesso baseado em função

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

Sistema RBAC Descrição
RBAC do Kubernetes Projetado para trabalhar em recursos do Kubernetes em seu cluster do AKS.
AZURE RBAC Projetado para trabalhar em recursos dentro de sua assinatura do Azure.

Com Azure RBAC, você cria uma definição role 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 obter mais informações, consulte O que é Azure controle de acesso baseado em função (Azure RBAC)?

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

Azure RBAC para autorizar o acesso ao recurso do AKS

Com Azure RBAC, você pode fornecer aos usuários (ou identidades) acesso granular aos recursos do AKS em uma ou mais assinaturas. Por exemplo, você pode usar a função Serviço de Kubernetes do Azure Colaborador 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 Azure RBAC para definir o acesso ao arquivo de configuração do Kubernetes no AKS.

Azure RBAC para 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.

Fluxo de autorização do Azure RBAC para Kubernetes

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

Se a identidade que está fazendo a solicitação existir no Microsoft Entra ID, 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 Azure mecanismos RBAC e APIs para atribuir funções internas aos usuários ou criar funções personalizadas, da mesma forma que 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 Serviço de Kubernetes do Azure 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 Azure RBAC para autorização do Kubernetes antes de usar esse recurso. Para obter mais detalhes e diretrizes passo a passo, siga nosso guia de instruções Use Azure RBAC para Autorização do 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. Consulte a lista completa de ações permitidas por cada função incorporada 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 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 de Cluster 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 Microsoft Entra

Aprimore a segurança do seu cluster AKS com a integração do Microsoft Entra. Baseado em décadas de gerenciamento de identidade empresarial, 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 Microsoft Entra ID, você pode integrar identidades locais em clusters do AKS para fornecer uma única fonte para gerenciamento e segurança da conta.

Integração do Microsoft Entra com clusters AKS

Com clusters AKS integrados ao Microsoft Entra, você pode conceder acesso aos recursos do Kubernetes a usuários ou grupos 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 de 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

Fluxo de autenticação do servidor de API e de webhook

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

  1. kubectl utiliza o aplicativo cliente do Microsoft Entra para autenticar usuários por meio do fluxo de concessão de autorização de dispositivo do OAuth 2.0.
  2. Microsoft Entra ID fornece um access_token, 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 se a assinatura do Token Web JSON é válida verificando a chave de assinatura pública do Microsoft Entra.
  7. Se o usuário for membro de mais de 200 grupos, o aplicativo de servidor usará as credenciais fornecidas pelo usuário para consultar associações de grupo do usuário conectado do API do Graph MS. Para usuários com associações de grupo de 200 ou menos, a declaração de grupos já existe no token do cliente. Nenhuma consulta será executada.
  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 ao Microsoft Entra ID com nosso guia de integração do Microsoft Entra gerenciada 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 espaços de trabalho do Log Analytics e o monitoramento do Azure para contêineres.
Microsoft.Network/virtualNetworks/joinLoadBalancer/action Necessário para configurar os pools de back-end Load Balancer baseados 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.

Acesso 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 ao 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 Microsoft Entra integração estiver habilitada. Em todos os casos, a sequência de comandos do usuário é:

  1. Execute az login para se 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 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 é exibido na guia Configuração.
    • Também encontrado com o nome do parâmetro --aad-admin-group-object-ids no CLI do Azure.
Descrição Concessão de função necessária Administrador de clusters dos grupos do Microsoft Entra Quando usar
Logon de administrador herdado usando o certificado do cliente Serviço de Kubernetes do Azure Função de Administrador de Cluster. 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 Cluster do Serviço 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 Azure Kubernetes. 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 Cluster do Serviço de 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 Azure RBAC para autorização do 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).
Segundo, um dos "Serviço de Kubernetes do Azure 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 Azure RBAC para autorização no Kubernetes está habilitado. Você está usando Azure RBAC para autorização do 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: