Compartilhar via


Usar a ID de Carga de Trabalho do Microsoft Entra com o Serviço de Kubernetes do Azure (AKS)

As cargas de trabalho implantadas em um cluster do AKS exigem credenciais de aplicativo ou identidades gerenciadas do Microsoft Entra para acessar recursos protegidos do Microsoft Entra, como o Azure Key Vault e o Microsoft Graph. A ID de Carga de Trabalho do Microsoft Entra integra-se aos recursos nativos do Kubernetes para federar com provedores de identidade externos, permitindo que você atribua identidades de carga de trabalho às suas cargas de trabalho para autenticar e acessar outros serviços e recursos.

A ID de Carga de Trabalho do Microsoft Entra utiliza a Projeção de Volume de Token de Conta de Serviço (ou uma conta de serviço) para permitir que os pods usem uma identidade do Kubernetes. Um token do Kubernetes é emitido e a federação OIDC (OpenID Connect) permite que aplicativos Kubernetes acessem recursos do Azure com segurança com a ID do Microsoft Entra, com base em contas de serviço anotadas.

Você pode usar a ID de Carga de Trabalho do Microsoft Entra com as bibliotecas de cliente da Identidade do Azure ou a coleção Biblioteca de Autenticação da Microsoft (MSAL), juntamente com o registro de aplicativos, para autenticar e acessar de forma integrada os recursos de nuvem do Azure.

Observação

Você pode usar Service Connector para ajudá-lo a configurar algumas etapas automaticamente. Para obter mais informações, consulte o que é o Conector de Serviço?

Pré-requisitos

  • O AKS dá suporte à ID de Carga de Trabalho do Microsoft Entra na versão 1.22 e superior.
  • A CLI do Azure, versão 2.47.0 ou posterior. Execute az --version para localizar a versão e az upgrade para atualizar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Limitações

  • Você pode ter no máximo 20 credenciais de identidade federadas por identidade gerenciada.
  • Leva alguns segundos para a credencial de identidade federada se propagar depois de ser inicialmente adicionada.
  • Não há suporte para o complemento Nós virtuais, que é baseado no Kubelet Virtual do projeto de software livre.
  • Não há suporte para a criação de credenciais de identidade federadas em identidades gerenciadas atribuídas pelo usuário nessas regiões.

bibliotecas de clientes do Azure Identity

Nas bibliotecas de clientes do Azure Identity, escolha uma das seguintes abordagens:

  • Use a DefaultAzureCredential, que tenta usar a WorkloadIdentityCredential.
  • Crie uma ChainedTokenCredential instância que inclua WorkloadIdentityCredential.
  • Usar o WorkloadIdentityCredential diretamente.

A tabela a seguir fornece a versão mínima do pacote necessária para a biblioteca de clientes de cada ecossistema de idiomas:

Ecossistema Biblioteca Versão mínima
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Go azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

Exemplos de código da biblioteca de clientes do Azure Identity

Os exemplos de código a seguir usam o DefaultAzureCredential. Este tipo de credencial usa as variáveis de ambiente injetadas pelo webhook de mutação da identidade da carga de trabalho para autenticar com o Azure Key Vault. Para ver exemplos usando uma das outras abordagens, consulte as bibliotecas de cliente específicas do ecossistema.

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("<key-vault-url>");
string secretName = Environment.GetEnvironmentVariable("<secret-name>");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

MSAL (Biblioteca de Autenticação da Microsoft)

As seguintes bibliotecas de cliente são a versão mínima necessária:

Ecossistema Biblioteca Imagem Exemplo Tem o Windows
.NET Biblioteca de Autenticação da Microsoft-para-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest Link Sim
Go Biblioteca de Autenticação da Microsoft para Go ghcr.io/azure/azure-workload-identity/msal-go:latest Link Sim
Java Biblioteca de Autenticação da Microsoft-para-java ghcr.io/azure/azure-workload-identity/msal-java:latest Link Não
JavaScript Biblioteca de Autenticação da Microsoft-para-js ghcr.io/azure/azure-workload-identity/msal-node:latest Link Não
Python Biblioteca de Autenticação da Microsoft-para-python ghcr.io/azure/azure-workload-identity/msal-python:latest Link Não

Como ele funciona

Nesse modelo de segurança, o cluster do AKS atua como o emissor do token. O Microsoft Entra ID usa o OIDC para descobrir as chaves de assinatura públicas e verificar a autenticidade do token da conta de serviço antes de trocá-lo por um token do Microsoft Entra. Sua carga de trabalho pode trocar um token de conta de serviço projetado para seu volume por um token Microsoft Entra usando a biblioteca de cliente do Azure Identity ou o MSAL.

Diagrama do modelo de segurança de identificação de carga de trabalho do Microsoft Entra no AKS.

A tabela a seguir descreve os pontos de extremidade do emissor OIDC necessários para a ID de carga de trabalho do Microsoft Entra:

Ponto de extremidade Descrição
{IssuerURL}/.well-known/openid-configuration Também conhecido como documento de descoberta de OIDC. Contém os metadados sobre as configurações do emissor.
{IssuerURL}/openid/v1/jwks Isso contém as chaves de assinatura pública que o Microsoft Entra ID usa para verificar a autenticidade do token da conta de serviço.

O diagrama a seguir resume a sequência de autenticação usando o OIDC:

Diagrama da sequência de autenticação OIDC do ID de Carga de Trabalho do Microsoft Entra no AKS.

Rotação automática de certificado webhook

Semelhante a outros complementos de webhook, a operação de rotação automática de certificado de cluster rotaciona o certificado.

Rótulos e anotações da conta de serviço

A ID de carga de trabalho do Microsoft Entra dá suporte aos seguintes mapeamentos relacionados a uma conta de serviço:

  • Um a um, onde uma conta de serviço referencia um objeto do Microsoft Entra.
  • Muitos para um, em que várias contas de serviço fazem referência ao mesmo objeto do Microsoft Entra.
  • Um para muitos, em que uma conta de serviço faz referência a vários objetos do Microsoft Entra alterando a anotação da ID do cliente. Para obter mais informações, confira Como federar várias identidades com uma conta de serviço do Kubernetes.

Observação

Se você atualizar as anotações da conta de serviço, será necessário reiniciar o pod para que as alterações entrem em vigor.

Se você tiver usado identidade gerenciada por pod do Microsoft Entra, pense em uma conta de serviço como uma entidade de segurança do Azure, exceto que uma conta de serviço faz parte da API central do Kubernetes, em vez de uma CRD (Custom Resource Definition ). As seções a seguir descrevem uma lista de rótulos e anotações disponíveis que você pode usar para configurar o comportamento ao trocar o token de conta de serviço por um token de acesso do Microsoft Entra.

Anotações de conta de serviço

Todas as anotações são opcionais. Se a anotação não for especificada, o valor padrão será usado.

Anotação Descrição Padrão
azure.workload.identity/client-id Representa o aplicativo do Microsoft Entra
ID do cliente a ser usada com o pod.
azure.workload.identity/tenant-id Representa a ID do locatário do Azure em que o
O aplicativo do Microsoft Entra está registrado.
Variável de ambiente AZURE_TENANT_ID extraída
do ConfigMap azure-wi-webhook-config.
azure.workload.identity/service-account-token-expiration Representa o campo expirationSeconds para o token de conta de serviço projetada. É um campo opcional que você configura para evitar tempos de inatividade causados por erros durante a atualização do token de conta de serviço. A expiração do token de conta de serviço do Kubernetes não está correlacionada com tokens do Microsoft Entra. Os tokens do Microsoft Entra expiram em 24 horas após serem emitidos. 3600
O intervalo com suporte é de 3600 a 86400.

Rótulos do pod

Observação

Para aplicativos que usam a ID de Carga de Trabalho do Microsoft Entra, é necessário adicionar o rótulo azure.workload.identity/use: "true" à especificação de pod do AKS para mover a identidade da carga de trabalho para um cenário de Fail Close para fornecer um comportamento consistente e confiável para pods que precisam usar a identidade da carga de trabalho. Caso contrário, os pods não funcionarão após serem reiniciados.

Rótulo Descrição Valor recomendado Obrigatório
azure.workload.identity/use Esse rótulo é necessário na especificação do modelo de pod. Somente os pods com esse rótulo serão modificados pelo webhook de admissão mutáveis para injetar as variáveis de ambiente específicas do Azure e o volume de token de conta de serviço projetado. verdadeiro Sim

Anotações de pod

Todas as anotações são opcionais. Se a anotação não for especificada, o valor padrão será usado.

Anotação Descrição Padrão
azure.workload.identity/service-account-token-expiration Confira as anotações da conta de serviço para obter detalhes. Anotações do pod têm precedência sobre anotações da conta de serviço. 3600
O intervalo com suporte é de 3600 a 86400.
azure.workload.identity/skip-containers Representa uma lista de contêineres separados por ponto e vírgula para ignorar a adição do volume de token de conta de serviço projetado. Por exemplo, container1;container2. Por padrão, o volume projetado do token de conta de serviço será adicionado a todos os contêineres se o pod estiver rotulado com azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Injeta um contêiner de inicialização de proxy e um sidecar de proxy no pod. O sidecar de proxy é usado para interceptar solicitações de token para IMDS e adquirir um token do Microsoft Entra em nome do usuário com credencial de identidade federada. falso
azure.workload.identity/proxy-sidecar-port Representa a porta do sidecar de proxy. 8000

Migrar para Identidade de Carga de Trabalho do Microsoft Entra

Você pode configurar clusters que já executam uma identidade gerenciada por pod para usar o ID de carga de trabalho do Microsoft Entra de duas maneiras:

  • Use a mesma configuração que você implementou para a identidade gerenciada por pod. Você pode anotar a conta de serviço no namespace com a identidade para habilitar a ID de Carga de Trabalho do Microsoft Entra e injetar as anotações nos pods.
  • Reescreva seu aplicativo para usar a versão mais recente da biblioteca de clientes da Identidade do Azure.

Para ajudar a simplificar e facilitar o processo de migração, desenvolvemos um sidecar de migração que converte as transações do IMDS (Serviço de Metadados de Instância) que seu aplicativo faz em OIDC. O sidecar de migração não se destina a ser uma solução a longo prazo, mas sim uma forma de começar a usar rapidamente a ID de Carga de Trabalho do Microsoft Entra. A execução do arquivo secundário de migração no aplicativo faz proxy das transações de IMDS do aplicativo para o OIDC. A abordagem alternativa é atualizar para uma versão com suporte da biblioteca de clientes do Azure Identity, que dá suporte à autenticação de OIDC.

A tabela a seguir resume nossas recomendações de migração ou implantação para o cluster do AKS:

Cenário Descrição
A implantação de cluster nova ou existente usa uma versão com suporte da biblioteca cliente do Azure Identity Nenhuma etapa de migração é necessária.
Recursos de implantação de exemplo: implantar e configurar a ID de carga de trabalho do Microsoft Entra em um novo cluster
A implantação de cluster nova ou existente executa uma versão sem suporte da biblioteca de clientes do Azure Identity Atualize a imagem de contêiner para usar uma versão do SDK do Azure Identity que seja suportada ou use o sidecar de migração.

Próximas etapas