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

Pode autenticar, autorizar, proteger e controlar o acesso aos clusters do Kubernetes de várias formas:

  • Com o controlo de acesso baseado em funções do Kubernetes (RBAC do Kubernetes), pode conceder aos utilizadores, grupos e contas de serviço acesso apenas aos recursos de que necessitam.
  • Com Azure Kubernetes Service (AKS), pode melhorar ainda mais a estrutura de segurança e permissões com o Azure Active Directory e o RBAC do Azure.

O RBAC e o AKS do Kubernetes ajudam-no a proteger o acesso ao cluster e a fornecer apenas as permissões mínimas necessárias para programadores e operadores.

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

RBAC do Kubernetes

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

  • Atribui permissão a utilizadores ou grupos de utilizadores para criar e modificar recursos ou ver registos a partir da execução de cargas de trabalho de aplicações.
  • Pode definir o âmbito de permissões para um único espaço de nomes ou em todo o cluster do AKS.
  • Pode criar funções para definir permissões e, em seguida, atribuir essas funções aos utilizadores com enlaces de função.

Para obter mais informações, veja Using Kubernetes RBAC authorization (Utilizar autorização RBAC do Kubernetes).

Funções e ClusterRoles

Funções

Antes de atribuir permissões a utilizadores com o RBAC do Kubernetes, irá definir as permissões de utilizador como uma Função. Conceda permissões num espaço de nomes com 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 a recursos de cluster fora de um determinado espaço de nomes, pode, em vez disso, utilizar ClusterRoles.

ClusterRoles

Um ClusterRole concede e aplica permissões a recursos em todo o cluster e não a um espaço de nomes específico.

RoleBindings e ClusterRoleBindings

Depois de definir funções para conceder permissões a recursos, atribua essas permissões RBAC do Kubernetes com um RoleBinding. Se o cluster do AKS se integrar com o Azure Active Directory (Azure AD), as RoleBindings concedem permissões a Azure AD utilizadores para efetuar ações no cluster. Veja como em Controlar o acesso aos recursos do cluster com o controlo de acesso baseado em funções do Kubernetes e as identidades do Azure Active Directory.

RoleBindings

Atribua funções aos utilizadores para um determinado espaço de nomes com RoleBindings. Com o RoleBindings, pode segregar logicamente um único cluster do AKS, permitindo apenas que os utilizadores acedam aos recursos da aplicação no respetivo espaço de nomes atribuído.

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

ClusterRoleBinding

Com um ClusterRoleBinding, vincula as funções aos utilizadores e aplica-se a recursos em todo o cluster e não a um espaço de nomes específico. Esta abordagem permite-lhe conceder aos administradores ou suportar o acesso dos engenheiros a todos os recursos no cluster do AKS.

Nota

O Microsoft/AKS efetua quaisquer ações de cluster com o consentimento do utilizador ao abrigo de uma função aks-service incorporada do Kubernetes e do enlace de função aks-service-rolebindingincorporado.

Esta função permite ao AKS resolver problemas e diagnosticar problemas de cluster, mas não pode modificar permissões nem criar funções ou enlaces de funções ou outras ações de privilégios elevados. O acesso a funções só está ativado em pedidos de suporte ativos 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 utilizador no Kubernetes. A API do Kubernetes detém e gere contas de serviço. As credenciais da conta de serviço são armazenadas como segredos do Kubernetes, permitindo que sejam utilizadas por pods autorizados para comunicar com o Servidor de API. A maioria dos pedidos de API fornece um token de autenticação para uma conta de serviço ou uma conta de utilizador normal.

As contas de utilizador normais permitem um acesso mais tradicional para administradores humanos ou programadores e não apenas serviços e processos. Embora o Kubernetes não forneça uma solução de gestão de identidades para armazenar contas de utilizador e palavras-passe normais, pode integrar soluções de identidade externa no Kubernetes. Para clusters do AKS, esta solução de identidade integrada é Azure AD.

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

Controlo de acesso baseado em funções do Azure

O controlo de acesso baseado em funções (RBAC) do Azure é um sistema de autorização criado no Azure Resource Manager que fornece uma gestão de acesso detalhada dos recursos do Azure.

Sistema RBAC Description
RBAC do Kubernetes Concebido para trabalhar em recursos do Kubernetes no cluster do AKS.
RBAC do Azure Concebido para trabalhar em recursos na sua subscrição do Azure.

Com o RBAC do Azure, cria uma definição de função que descreve as permissões a aplicar. Em seguida, atribui a um utilizador ou agrupa esta definição de função através de uma atribuição de função para um âmbito específico. O âmbito pode ser um recurso individual, um grupo de recursos ou uma subscrição.

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

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

RBAC do Azure para autorizar o acesso ao recurso do AKS

Com o RBAC do Azure, pode fornecer aos seus utilizadores (ou identidades) acesso granular aos recursos do AKS numa ou mais subscrições. Por exemplo, pode utilizar a função contribuidor Azure Kubernetes Service para dimensionar e atualizar o cluster. Entretanto, outro utilizador com a função Administração Azure Kubernetes Service Cluster só tem permissão para solicitar o Administração kubeconfig.

Utilize o RBAC do Azure para definir o acesso ao ficheiro 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 utilizará um servidor webhook de Autorização do Kubernetes para que possa gerir as atribuições e as permissões de recursos do cluster do Kubernetes integradas Azure AD com a definição de funções e atribuições de funções do Azure.

Fluxo de autorização do RBAC do Azure para Kubernetes

Conforme mostrado no diagrama acima, ao utilizar a integração rbac do Azure, todos os pedidos à API do Kubernetes seguirão o mesmo fluxo de autenticação, conforme explicado na secção de integração do Azure Active Directory.

Se a identidade que faz o pedido existir no Azure AD, o Azure fará equipa com o RBAC do Kubernetes para autorizar o pedido. Se a identidade existir fora do Azure AD (ou seja, uma conta de serviço do Kubernetes), a autorização será diferida para o RBAC normal do Kubernetes.

Neste cenário, vai utilizar mecanismos e APIs RBAC do Azure para atribuir funções incorporadas aos utilizadores ou criar funções personalizadas, tal como faria com as funções do Kubernetes.

Com esta funcionalidade, não só concede permissões aos utilizadores para o recurso do AKS entre subscrições, como também configura a função e as permissões para cada um desses clusters que controlam o acesso à API do Kubernetes. Por exemplo, pode conceder a Azure Kubernetes Service RBAC Reader função no âmbito da subscrição. O destinatário da função poderá listar e obter todos os objetos do Kubernetes de todos os clusters sem os modificar.

Importante

Tem de ativar o RBAC do Azure para a autorização do Kubernetes antes de utilizar esta funcionalidade. Para obter mais detalhes e orientações passo a passo, siga o nosso guia de procedimentos Utilizar o RBAC do Azure para Kubernetes Authorization .

Funções incorporadas

O AKS fornece as quatro funções incorporadas seguintes. São semelhantes às funções incorporadas do Kubernetes com algumas diferenças, como suportar CRDs. Veja a lista completa de ações permitidas por cada função incorporada do Azure.

Função Description
Leitor RBAC Azure Kubernetes Service Permite o acesso só de leitura para ver a maioria dos objetos num espaço de nomes.
Não permite a visualização de funções ou enlaces de função.
Não permite a visualização Secrets. A leitura dos conteúdos permite o Secrets acesso às ServiceAccount credenciais no espaço de nomes, o que permitiria o acesso à API como qualquer um ServiceAccount no espaço de nomes (uma forma de escalamento de privilégios).
Azure Kubernetes Service Escritor RBAC Permite o acesso de leitura/escrita à maioria dos objetos num espaço de nomes.
Não permite a visualização ou modificação de funções ou enlaces de função.
Permite aceder Secrets e executar pods como qualquer ServiceAccount no espaço de nomes, para que possa ser utilizado para obter os níveis de acesso da API de qualquer ServiceAccount no espaço de nomes.
Azure Kubernetes Service Administração RBAC Permite o acesso de administrador, que se destina a ser concedido num espaço de nomes.
Permite o acesso de leitura/escrita à maioria dos recursos num espaço de nomes (ou no âmbito do cluster), incluindo a capacidade de criar funções e enlaces de função no espaço de nomes.
Não permite o acesso de escrita à quota de recursos ou ao próprio espaço de nomes.
Azure Kubernetes Service cluster rbac Administração Permite que o acesso de superutilizador execute qualquer ação em qualquer recurso.
Dá controlo total sobre todos os recursos no cluster e em todos os espaços de nomes.

integração de Azure AD

Melhore a segurança do cluster do AKS com Azure AD integração. Baseado em décadas de gestão de identidades empresariais, Azure AD é um serviço de gestão de identidades e diretórios baseado na cloud multi-inquilino que combina serviços de diretórios principais, gestão de acesso a aplicações e proteção de identidade. Com Azure AD, pode integrar identidades no local em clusters do AKS para fornecer uma única origem para gestão e segurança de contas.

Integração do Azure Active Directory com clusters do AKS

Com Azure AD clusters do AKS integrados, pode conceder aos utilizadores ou grupos acesso aos recursos do Kubernetes num espaço de nomes ou em todo o cluster.

  1. Para obter um kubectl contexto de configuração, um utilizador executa o comando az aks get-credentials .
  2. Quando um utilizador interage com o cluster do AKS com kubectl, é-lhe pedido para iniciar sessão com as credenciais de Azure AD.

Esta abordagem fornece uma única origem para a gestão de contas de utilizador e credenciais de palavra-passe. O utilizador só pode aceder aos recursos conforme definido pelo administrador do cluster.

Azure AD autenticação é fornecida a clusters do AKS com o OpenID Connect. O OpenID Connect é uma camada de identidade criada sobre o protocolo OAuth 2.0. Para obter mais informações sobre o OpenID Connect, veja a documentação Open ID connect (Abrir ligação de ID). A partir do cluster do Kubernetes, a Autenticação de Tokens do Webhook é utilizada para verificar os tokens de autenticação. A autenticação de tokens do Webhook é configurada e gerida como parte do cluster do AKS.

Webhook e servidor de API

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

Conforme mostrado no gráfico acima, o servidor de API chama o servidor de webhook do AKS e executa os seguintes passos:

  1. kubectlutiliza a aplicação cliente Azure AD para iniciar sessão de utilizadores com o fluxo de concessão de autorização de dispositivos OAuth 2.0.
  2. Azure AD fornece uma access_token, id_token e um refresh_token.
  3. O utilizador faz um pedido para kubectl com um access_token de kubeconfig.
  4. kubectl envia o access_token para o Servidor de API.
  5. O Servidor de API está configurado com o Servidor WebHook de Autenticação para efetuar a validação.
  6. O servidor webhook de autenticação confirma que a assinatura do Token Web JSON é válida ao verificar o Azure AD chave de assinatura pública.
  7. A aplicação de servidor utiliza credenciais fornecidas pelo utilizador para consultar associações a grupos do utilizador com sessão iniciada a partir do MS Graph API.
  8. É enviada uma resposta para o Servidor de API com informações de utilizador, como a afirmação de nome principal de utilizador (UPN) do token de acesso e a associação ao grupo do utilizador com base no 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 devolve uma resposta a kubectl.
  11. kubectl fornece feedback ao utilizador.

Saiba como integrar o AKS com Azure AD com o nosso guia de procedimentos de integração de Azure AD geridos pelo AKS.

Permissões do serviço AKS

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

Identidade a criar e a operar as permissões do cluster

As seguintes permissões são necessárias para a identidade criar e operar o cluster.

Permissão Razão
Microsoft.Compute/diskEncryptionSets/read Necessário para ler o ID do conjunto de encriptação de discos.
Microsoft.Compute/proximityPlacementGroups/write Necessário para atualizar grupos de colocação por proximidade.
Microsoft.Network/applicationGateways/read
Microsoft.Network/applicationGateways/write
Microsoft.Network/virtualNetworks/subnets/join/action
Necessário para configurar gateways de aplicação e associar a sub-rede.
Microsoft.Network/virtualNetworks/subnets/join/action Necessário para configurar o Grupo de Segurança de Rede para a sub-rede ao utilizar 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 Standard.
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 áreas de trabalho do Log Analytics e monitorização do Azure para contentores.
Microsoft.Network/virtualNetworks/joinLoadBalancer/action Necessário para configurar os Conjuntos de Back-end Balanceador de Carga baseados em IP.

Permissões de identidade do cluster do AKS

As seguintes permissões são utilizadas pela identidade do cluster do AKS, que é criada e associada ao cluster do AKS. Cada permissão é utilizada pelos motivos abaixo:

Permissão Razão
Microsoft.ContainerService/managedClusters/*
Necessário para criar utilizadores 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 eliminar 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 tabelas de rotas e rotas para nós.
Microsoft.Compute/virtualMachines/read Necessário para encontrar informações para máquinas virtuais num 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 num 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 num 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 num VMAS a um conjunto 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 conjunto de endereços de back-end do balanceador de carga e aumentar horizontalmente os nós num conjunto de dimensionamento de máquinas virtuais.
Microsoft.Compute/virtualMachineScaleSets/delete Necessário para eliminar um conjunto de dimensionamento de máquinas virtuais para um conjunto de endereços de back-end do balanceador de carga e reduzir verticalmente os nós num conjunto de dimensionamento de máquinas virtuais.
Microsoft.Compute/virtualMachineScaleSets/virtualmachines/write Necessário para anexar AzureDisks e adicionar uma máquina virtual a partir de um conjunto de dimensionamento de máquinas virtuais ao balanceador de carga.
Microsoft.Network/networkInterfaces/read Necessário para procurar IPs internos e conjuntos de endereços de back-end do balanceador de carga para máquinas virtuais num VMAS.
Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/read Necessário para procurar IPs internos e conjuntos de endereços de back-end do balanceador de carga para uma máquina virtual num 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 num 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 noutro grupo de recursos.
Microsoft.Compute/snapshots/delete
Microsoft.Compute/snapshots/read
Microsoft.Compute/snapshots/write
Necessário para configurar instantâneos para o 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 de identidade do cluster adicionais

Ao criar um cluster com atributos específicos, precisará das seguintes permissões adicionais para a identidade do cluster. Uma vez que estas permissões não são atribuídas automaticamente, tem de as adicionar à identidade do cluster depois de serem criadas.

Permissão Razão
Microsoft.Network/networkSecurityGroups/write
Microsoft.Network/networkSecurityGroups/read
Necessário se estiver a utilizar um grupo de segurança de rede noutro 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 a utilizar uma sub-rede noutro grupo de recursos, como uma VNET personalizada.
Microsoft.Network/routeTables/routes/read
Microsoft.Network/routeTables/routes/write
Necessário se utilizar uma sub-rede associada a uma tabela de rotas noutro 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 a utilizar um balanceador de carga interno noutro 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/* Necessário se estiver a utilizar uma zona DNS privada noutro grupo de recursos, como um privateDNSZone personalizado.

Acesso ao Nó do AKS

Por predefinição, o Acesso ao Nó não é necessário para o AKS. O seguinte acesso é necessário para o nó se for utilizado um componente específico.

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

Resumo

Veja a tabela para obter um resumo rápido de como os utilizadores podem autenticar-se no Kubernetes quando Azure AD integração está ativada. Em todos os casos, a sequência de comandos do utilizador é:

  1. Execute az login para autenticar no Azure.

  2. Execute az aks get-credentials para transferir as credenciais do cluster para .kube/config.

  3. Execute kubectl comandos.

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

No portal do Azure, pode encontrar:

  • A Concessão de Função (concessão de função RBAC do Azure) referida na segunda coluna é apresentada no separador Controlo de Acesso.
  • O Cluster Administração Azure AD Group é apresentado no separador Configuração.
    • Também foi encontrado com o nome --aad-admin-group-object-ids do parâmetro na CLI do Azure.
Description Concessão de função necessária Grupos de Azure AD administradores de clusters Quando utilizar
Início de sessão de administrador legado com o certificado de cliente Função de Administração do Azure Kubernetes. Esta função permite az aks get-credentials ser utilizada com o --admin sinalizador, que transfere um certificado de administrador de cluster legado (não Azure AD) para o .kube/config. Este é o único objetivo do "Azure Kubernetes Administração Role". n/a Se estiver permanentemente bloqueado por não ter acesso a um grupo de Azure AD válido com acesso ao cluster.
Azure AD com RoleBindings manuais (Cluster) Função de Utilizador do Azure Kubernetes. A função "Utilizador" permite az aks get-credentials ser utilizada sem o --admin sinalizador. (Esta é a única finalidade da "Função de Utilizador do Azure Kubernetes".) O resultado, num cluster Azure AD ativado, é a transferência de uma entrada vazia no .kube/config, que aciona a autenticação baseada no browser quando é utilizada pela primeira vez pelo kubectl. O utilizador não está em nenhum destes grupos. Uma vez que o utilizador não está em nenhum cluster Administração grupos, os respetivos direitos serão totalmente controlados por quaisquer RoleBindings ou ClusterRoleBindings que tenham sido configurados por administradores de cluster. As RoleBindings (Cluster)nomeiam Azure AD utilizadores ou grupos de Azure AD como os respetivos subjects. Se não tiverem sido configurados esses enlaces, o utilizador não poderá excortar quaisquer kubectl comandos. Se quiser um controlo de acesso detalhado e não estiver a utilizar o RBAC do Azure para Autorização do Kubernetes. Tenha em atenção que o utilizador que configura os enlaces tem de iniciar sessão por um dos outros métodos listados nesta tabela.
Azure AD por membro do grupo de administradores Mesmo que acima O utilizador é membro de um dos grupos listados aqui. O AKS gera automaticamente um ClusterRoleBinding que vincula todos os grupos listados à função cluster-admin kubernetes. Assim, os utilizadores nestes grupos podem executar todos os kubectl comandos como cluster-admin. Se quiser conceder convenientemente direitos de administrador completos aos utilizadores e não estiver a utilizar o RBAC do Azure para a autorização do Kubernetes.
Azure AD com o RBAC do Azure para Autorização do Kubernetes Duas funções:
Primeiro, Função de Utilizador do Azure Kubernetes (como acima).
Segundo, um dos "RBAC Azure Kubernetes Service..." funções listadas acima ou a sua própria alternativa personalizada.
O campo funções de administrador no separador Configuração é irrelevante quando o RBAC do Azure para a Autorização do Kubernetes está ativado. Está a utilizar o RBAC do Azure para autorização do Kubernetes. Esta abordagem dá-lhe um controlo detalhado, sem a necessidade de configurar RoleBindings ou ClusterRoleBindings.

Passos seguintes

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