Criar um emissor OpenID Connect em Azure Kubernetes Service (AKS)

Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard

Este artigo descreve como criar e gerir um emissor OpenID Connect (OIDC) para o seu cluster Azure Kubernetes Service (AKS). O emissor OIDC permite que o seu cluster AKS se integre com fornecedores de identidade como o Microsoft Entra ID, para que possa autenticar-se de forma segura e fornecer capacidades de login único (SSO) para aplicações a correr dentro do cluster.

Para a maioria das cargas de trabalho em produção, o AKS Automatic é a experiência AKS padrão recomendada. O AKS Automatic está pronto para entrar em produção por predefinição e inclui o emissor OIDC como uma funcionalidade de segurança pré-configurada. No AKS Standard, o comportamento do emissor OIDC depende da versão do Kubernetes e do estado do cluster, e pode ativar manualmente quando necessário.

Para saber mais sobre o AKS Automatic, veja O que é o Azure Kubernetes Service (AKS) Automatic?

Emitente OIDC no AKS Automatic e no AKS Standard

Ambos os modos de cluster AKS suportam o emissor OIDC, mas a configuração é diferente:

  • AKS Automático: O emissor OIDC está pré-configurado.
  • AKS Standard: Pode ser necessário ativar explicitamente o emissor OIDC, dependendo da versão e se já está configurado.

Para a maioria dos cenários de produção, comece com o AKS Automático para usar os valores padrão prontos para produção e reduzir a sobrecarga operacional.

Sobre o OpenID Connect (OIDC) em AKS

OpenID Connect (OIDC) estende o protocolo de autorização OAuth 2.0 para uso como outro protocolo de autenticação emitido pela Microsoft Entra ID. Pode usar o OIDC para ativar o single log-on (SSO) entre aplicações com OAuth no seu cluster Azure Kubernetes Service (AKS) usando um token de segurança chamado token ID. Pode ativar o emissor OIDC nos seus clusters AKS, o que permite ao Microsoft Entra ID (ou à plataforma de gestão de identidade e acessos de outro fornecedor cloud) descobrir as chaves públicas de assinatura do servidor API.

Pré-requisitos

Requisitos da plataforma:

Comportamento específico de versão (Norma AKS):

  • O emissor OIDC está ativado por predefinição (sem necessidade do parâmetro --enable-oidc-issuer) para clusters AKS recém-criados com a versão 1.34 ou posterior do Kubernetes.
  • Para clusters existentes, o OIDC não está ativado por padrão, independentemente da versão do Kubernetes, e requer ativação manual.
  • Extensão automática do token desativada (--service-account-extend-token-expiration=false) para a versão 1.30.0 ou posterior do Kubernetes.
  • Se o emissor OIDC não estivesse configurado anteriormente, é necessária habilitação manual para versões do Kubernetes anteriores à 1.34.
  • Os tokens projetados de conta de serviço são necessários para clusters do Kubernetes com a versão 1.30 ou posterior.

Considerações importantes:

  • Não podes desativar o emissor OIDC uma vez ativado.
  • Ativar o emissor OIDC em clusters existentes requer o reinício do servidor API (breve tempo de inatividade).
  • A vida útil máxima do token é de 24 horas (um dia).

Criar um cluster AKS com o emissor OIDC

No AKS Automatic, o emissor OIDC está pré-configurado. Não é necessária uma etapa separada para ativar o emissor OIDC.

Crie um cluster AKS Automatic seguindo o guia de início rápido:

Padrão AKS

Crie um cluster AKS Standard usando o az aks create comando com o --enable-oidc-issuer parâmetro.

# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>
    
# Create the AKS Standard cluster with OIDC issuer enabled
az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --enable-oidc-issuer \
    --generate-ssh-keys

Observação

Nos clusters AKS Standard criados com a versão 1.34 do Kubernetes ou posterior, o emissor de OIDC é ativado por predefinição nos novos clusters.

Ativar o emissor OIDC num cluster AKS Standard existente

Ative o emissor OIDC num cluster AKS Standard existente usando o az aks update comando com o --enable-oidc-issuer parâmetro.

# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>

# Enable the OIDC issuer on the existing AKS Standard cluster
az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-oidc-issuer 

Obter o URL do emissor OIDC

Obtenha a URL do emissor OIDC usando o az aks show comando.

# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>

# Get the OIDC issuer URL
az aks show \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --query "oidcIssuerProfile.issuerUrl" \
    -o tsv

Por predefinição, o emissor utiliza a URL base https://{region}.oic.prod-aks.azure.com, em que o valor de {region} corresponde à localização onde implementou o cluster AKS.

Efetuar a rotação da chave de assinatura do OIDC

Importante

Tenha em mente as seguintes considerações ao rodar as chaves de assinatura do OIDC:

  • Se quiser invalidar a chave antiga imediatamente após a rotação da chave, deve rodar a chave OIDC duas vezes e reiniciar os pods usando tokens projetados da conta de serviço.
  • Tanto as chaves antigas como as novas mantêm-se válidas durante 24 horas após a rotação.
  • Precisas de atualizar manualmente o token a cada 24 horas (a menos que estejas a usar as bibliotecas clientes do Azure Identity, que se atualizam automaticamente).

Roda a chave OIDC usando o az aks oidc-issuer comando.

# Set environment variables
RESOURCE_GROUP=<your-resource-group-name>
CLUSTER_NAME=<your-aks-cluster-name>

# Rotate the OIDC signing keys
az aks oidc-issuer rotate-signing-keys \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP

Obter o documento de descoberta

Vai ao URL do emissor do teu OIDC no navegador e adiciona /.well-known/openid-configuration ao URL.

Exemplo: https://eastus.oic.prod-aks.azure.com/.well-known/openid-configuration

Sua saída deve ser semelhante à saída de exemplo a seguir:

{
  "issuer": "https://eastus.oic.prod-aks.azure.com/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/00000000-0000-0000-0000-000000000000/",
  "jwks_uri": "https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks",
  "response_types_supported": [
    "id_token"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ]
}

Obter o documento JWK Set

No seu navegador, vá ao jwks_uri a partir do documento de descoberta.

Por exemplo: https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks

Sua saída deve ser semelhante à saída de exemplo a seguir:

{
  "keys": [
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    },
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    }
  ]
}

Observação

Durante a rotação de chaves, o documento de descoberta inclui uma chave adicional.