Usar o kubelogin para autenticar usuários no Serviço de Kubernetes do Azure
O plugin kubelogin no Azure é um plugin de credencial client-go que implementa a autenticação do Microsoft Entra. O plugin kubelogin oferece recursos que não estão disponíveis na ferramenta de linha de comando kubectl. Para mais informações, confira a introdução ao kubelogin e a introdução ao kubectl.
Os clusters do Serviço de Kubernetes do Azure (AKS) integrados ao Microsoft Entra ID que executam o Kubernetes versão 1.24 ou posterior usam o formato kubelogin automaticamente.
Este artigo fornece uma visão geral e exemplos de como usar o kubelogin para todos os métodos de autenticação do Microsoft Entra com suporte no AKS.
Limitações
- Você pode incluir um máximo de 200 grupos em uma declaração JWT (Token Web JSON) do Microsoft Entra. Se você tiver mais de 200 grupos, pense em usar funções de aplicativo.
- Os grupos criados no Microsoft Entra ID são incluídos apenas pelo seu valor de ObjectID e não por seu nome de exibição. O comando
sAMAccountName
está disponível apenas para grupos sincronizados a partir do Windows Server Active Directory local. - No AKS, o método de autenticação de entidade de serviço funciona apenas com o Microsoft Entra ID gerenciado; não funciona com a versão anterior do Azure Active Directory.
- O método de autenticação de código do dispositivo não funciona quando a política de Acesso Condicional do Microsoft Entra é configurada em um locatário do Microsoft Entra. Nesse cenário, use a autenticação interativa do navegador da web.
Como funciona a autenticação
Para a maioria das interações com o kubelogin, use o subcomando convert-kubeconfig
. O subcomando usa o arquivo kubeconfig que está especificado no --kubeconfig
ou na variável de ambiente KUBECONFIG
para converter o arquivo kubeconfig final em um formato executável baseado no método de autenticação especificado.
Os métodos de autenticação que o kubelogin implementa são os fluxos de concessão de tokens do OAuth 2.0 do Microsoft Entra. Os sinalizadores de parâmetro a seguir são de uso comum nos subcomandos do kubelogin. Em geral, esses sinalizadores estão prontos para uso quando você obtém o arquivo kubeconfig no AKS.
--tenant-id
: a ID de locatário do Microsoft Entra.--client-id
: a ID de aplicativo do aplicativo cliente público. Esse aplicativo cliente é usado somente nos métodos de login com código do dispositivo, com Credenciais de Senha do Proprietário do Recurso (ROPC) do OAuth 2.0 (identidade de fluxo de trabalho) e no método interativo do navegador da web.--server-id
: a ID de aplicativo do aplicativo web ou servidor de recursos. O token é emitido para esse recurso.
Observação
Em cada um desses métodos de autenticação o token não é armazenado em cache no sistema de arquivos.
Métodos de autenticação
As próximas seções descrevem os métodos de autenticação com suporte e como usá-los:
- Código do dispositivo
- CLI do Azure
- Fluxo interativo do navegador da web
- Entidade de serviço
- Identidade gerenciada
- Identidade da carga de trabalho
Código do dispositivo
Código do dispositivo é o método de autenticação padrão para o subcomando convert-kubeconfig
. O -l devicecode
é opcional. Esse método de autenticação solicita o código do dispositivo para que o usuário faça login a partir de uma sessão do navegador.
Antes dos plugins kubelogin e executável serem introduzidos, o método de autenticação do Azure no kubectl tinha suporte apenas para o fluxo de código do dispositivo. O fluxo usava uma versão anterior de uma biblioteca que produz um token cuja declaração de audience
tem um prefixo spn:
. A opção não é compatível com o Microsoft Entra ID gerenciado pelo AKS, que usa um fluxo em nome de (OBO). Quando você executa o subcomando convert-kubeconfig
, o kubelogin remove o prefixo spn:
da declaração de audiência.
Se os seus requisitos incluírem o uso de funcionalidades de versões anteriores, adicione o argumento --legacy
. Se você estiver usando o arquivo kubeconfig em um cluster do Azure Active Directory de uma versão anterior, o kubelogin adicionará o sinalizador --legacy
automaticamente.
Nesse método de login, o token de acesso e o token de atualização são armazenados em cache no diretório ${HOME}/.kube/cache/kubelogin. Para substituir esse caminho, inclua o parâmetro --token-cache-dir
.
Se o seu cluster do AKS integrado ao Microsoft Entra usar o Kubernetes 1.24 ou anterior, você precisará converter manualmente o formato do arquivo kubeconfig executando os seguintes comandos:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Para limpar tokens armazenados em cache, execute o seguinte comando:
kubelogin remove-tokens
Observação
O método de login com código do dispositivo não funciona quando a política de Acesso Condicional é configurada no locatário do Microsoft Entra. Nesse cenário, use o método interativo do navegador da web.
CLI do Azure
O método de autenticação da CLI do Azure usa o contexto conectado que a CLI do Azure estabelece para obter o token de acesso. O token é emitido no mesmo locatário do Microsoft Entra do az login
. O kubelogin não grava os tokens no arquivo de cache de tokens porque já são gerenciados pela CLI do Azure.
Observação
Esse método de autenticação funciona somente com o Microsoft Entra ID gerenciado pelo AKS.
O exemplo a seguir mostra como usar o método da CLI do Azure para autenticar:
az login
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l azurecli
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Se o diretório de configuração da CLI do Azure estiver fora do diretório ${HOME}, use o parâmetro --azure-config-dir
com o subcomando convert-kubeconfig
. O comando gera o arquivo kubeconfig com a variável de ambiente configurada. Você pode obter a mesma configuração definindo a variável de ambiente AZURE_CONFIG_DIR
para esse diretório quando executar um comando kubectl.
Fluxo interativo do navegador da web
O método de autenticação interativo do navegador da web abre um navegador da web automaticamente para entrar no usuário. Após o usuário ser autenticado, o navegador o redireciona para o servidor web local usando as credenciais verificadas. Esse método de autenticação está em conformidade com a política de Acesso Condicional.
Quando você se autentica usando esse método, o token de acesso é armazenado em cache no diretório ${HOME}/.kube/cache/kubelogin. Você pode substituir esse caminho usando o parâmetro --token-cache-dir
.
Token do portador
O exemplo a seguir mostra como usar um token de portador com o fluxo interativo do navegador da web:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l interactive
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Token de Prova de Posse
O exemplo a seguir mostra como usar um token de Prova de Posse (PoP) com o fluxo interativo do navegador da web:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Entidade de serviço
Esse método de autenticação usa uma entidade de serviço para conectar o usuário. Você pode fornecer a credencial definindo uma variável de ambiente ou usando a credencial em um argumento de linha de comando. As credenciais com suporte que você pode usar são uma senha ou um certificado de cliente de Troca de Informações Pessoais (PFX).
Antes de usar esse método, leve em conta as seguintes limitações:
- Esse método funciona apenas com o Microsoft Entra ID gerenciado.
- A entidade de serviço pode ser membro de um máximo de 200 grupos do Microsoft Entra ID.
Variáveis de ambiente
O exemplo a seguir mostra como configurar um segredo do cliente usando variáveis de ambiente:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<Service Principal Name (SPN) client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Em seguida, execute este comando:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_SECRET=<SPN secret>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Argumento de linha de comando
O exemplo a seguir mostra como configurar um segredo do cliente em um argumento de linha de comando:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn --client-id <SPN client ID> --client-secret <SPN client secret>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Aviso
O método de argumento de linha de comando armazena o segredo no arquivo kubeconfig.
Certificado do cliente
Os exemplos a seguir mostram como configurar um segredo do cliente usando um certificado do cliente:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE=/path/to/cert.pfx
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE_PASSWORD=<PFX password>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Em seguida, execute este comando:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pfx
export AZURE_CLIENT_CERTIFICATE_PASSWORD=<PFX password>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Token PoP e variáveis de ambiente
O exemplo a seguir mostra como configurar um token PoP que usa um segredo do cliente obtido de variáveis de ambiente:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Identidade gerenciada
Use o método de autenticação de identidade gerenciada para aplicativos que se conectam a recursos que dão suporte à autenticação do Microsoft Entra. Os exemplos incluem acessar recursos do Azure, como uma máquina virtual do Azure, um conjunto de dimensionamento de máquinas virtuais ou o Azure Cloud Shell.
Identidade gerenciada padrão
O exemplo a seguir mostra como usar a identidade gerenciada padrão:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l msi
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Identidade específica
O exemplo a seguir mostra como usar uma identidade gerenciada com uma identidade específica:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l msi --client-id <msi-client-id>
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Identidade da carga de trabalho
O método de autenticação de identidade de carga de trabalho usa credenciais de identidade que são federadas com o Microsoft Entra para autenticar o acesso aos clusters do AKS. O método usa a autenticação integrada do Microsoft Entra e funciona definindo as seguintes variáveis de ambiente:
AZURE_CLIENT_ID
: a ID do aplicativo Microsoft Entra que é federada com a identidade de carga de trabalho.AZURE_TENANT_ID
: a ID de locatário do Microsoft Entra.AZURE_FEDERATED_TOKEN_FILE
: o arquivo que contém uma declaração assinada da identidade de carga de trabalho, como um token de conta de serviço projetada (JWT) do Kubernetes.AZURE_AUTHORITY_HOST
: a URL base de uma autoridade do Microsoft Entra. Por exemplo,https://login.microsoftonline.com/
.
Você pode usar uma identidade de carga de trabalho para acessar clusters do Kubernetes a partir de sistemas de CI/CD, como o GitHub ou o ArgoCD, sem armazenar credenciais de entidade de serviço nos sistemas externos. Para configurar a federação do OpenID Connect (OIDC) do GitHub, confira o exemplo de federação do OIDC.
O exemplo a seguir mostra como usar uma identidade de carga de trabalho:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l workloadidentity
Execute esse comando kubectl para obter informações do nó:
kubectl get nodes
Como usar o kubelogin com o AKS
O AKS usa um par de aplicativos do Microsoft Entra da própria Microsoft. Essas IDs de aplicativo são as mesmas em todos os ambientes.
A ID do aplicativo de servidor do AKS no Microsoft Entra que o lado do servidor usa é 6dae42f8-4368-4678-94ff-3960e28e3630
. O token de acesso que acessa os clusters do AKS precisa ser emitido para esse aplicativo. Na maioria dos métodos de autenticação do kubelogin, você precisa usar --server-id
com kubelogin get-token
.
A ID do aplicativo cliente do AKS no Microsoft Entra ID que o kubelogin usa para executar a autenticação do cliente público em nome do usuário é 80faf920-1908-4b52-b5ef-a8e7bedfc67a
. A ID do aplicativo cliente é usada métodos de autenticação com código do dispositivo e fluxo interativo do navegador da web.
Conteúdo relacionado
- Saiba como integrar o AKS ao Microsoft Entra ID em nosso artigo de instruções Integração do Microsoft Entra ID gerenciado pelo AKS.
- Para começar a usar identidades gerenciadas no AKS, confira como Usar uma identidade gerenciada no AKS.
- Para começar a usar identidades de carga de trabalho no AKS, consulte Usar uma identidade de carga de trabalho no AKS.
Azure Kubernetes Service