Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como configurar provedores de identidade externos, como GitHub e Google Identity, para a autenticação do plano de controle do Azure Kubernetes Service (AKS) usando autenticação estruturada. Você aprenderá a criar autenticadores JWT (Token Web JSON), configurar a validação e o mapeamento de declarações e testar o fluxo de autenticação.
Importante
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
- Políticas de suporte do AKS
- perguntas frequentes Azure support
Pré-requisitos
- Leia a visão geral conceitual da autenticação no AKS usando o provedor de identidade externo.
Use o ambiente bash em Azure Cloud Shell. Para obter mais informações, consulte Get iniciado com Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instalar o Azure CLI. Se você estiver executando em Windows ou macOS, considere executar Azure CLI em um contêiner do Docker. Para obter mais informações, consulte Como executar o Azure CLI em um contêiner do Docker.
Se você estiver usando uma instalação local, entre no Azure CLI usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Authenticate para Azure usando Azure CLI.
Quando for solicitado, instale a extensão Azure CLI no primeiro uso. Para obter mais informações sobre extensões, consulte Use e gerencie extensões com o Azure CLI.
Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
Este artigo requer a versão 2.77.0 ou posterior do Azure CLI. Se você estiver usando Azure Cloud Shell, a versão mais recente já está instalada lá. Para instalar ou atualizar o Azure CLI em seu computador local, consulte Instale o Azure CLI.
Você precisa instalar a extensão
aks-previewAzure CLI versão 18.0.0b41 ou posterior para usar recursos de autenticação estruturados.Se você ainda não tem a extensão
aks-preview, instale-a usando o comandoaz extension add.az extension add --name aks-previewSe você já tem a extensão
aks-preview, atualize-a para garantir que você tenha a última versão usando o comandoaz extension update.az extension update --name aks-previewVerifique se você tem a versão necessária da
aks-previewextensão usando oaz extension showcomando.az extension show --name aks-preview --query version
Um cluster do AKS executando o Kubernetes versão 1.30 ou posterior. Para criar um cluster do AKS, consulte Deploy um cluster Azure Kubernetes Service (AKS) usando Azure CLI.
kubectlferramenta de linha de comando para interagir com o cluster do Kubernetes.kubectljá está instalado se você usar Azure Cloud Shell. Você pode instalarkubectllocalmente usando oaz aks install-clicomando.az aks install-cliUm provedor de identidade externo que dá suporte ao OIDC (OpenID Connect).
Conectividade de rede dos nós do cluster para o seu provedor de identidade.
Se você planeja usar o
kubeloginplug-in, instale-o seguindo as instruções no guia de instalação do kubelogin.
Definir variáveis de ambiente
Defina as seguintes variáveis de ambiente para o grupo de recursos e o nome do cluster:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Registrar o JWTAuthenticatorPreview recurso
Registre o
JWTAuthenticatorPreviewrecurso usando oaz feature registercomando.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceVerifique o status de registro do recurso usando o
az feature showcomando.az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceQuando o status mostra
Registered, atualize o registro do provedor de recursos paraMicrosoft.ContainerServiceusando o comandoaz provider register.az provider register --namespace Microsoft.ContainerService
Configurar autenticação OIDC do GitHub Actions
Verifique se os fluxos de trabalho GitHub Actions têm as permissões necessárias.
Configure a permissão de
id-token: writenos seus arquivos de workflow. Por exemplo:permissions: id-token: write contents: readConfigure as configurações apropriadas do repositório e da organização para acesso ao token OIDC. Defina as configurações do OIDC do repositório e as políticas de segurança da organização para uso de token.
Configurar a autenticação do Google Identity OAuth 2.0
- Navegue até o Console do Google Cloud.
- Crie ou selecione um projeto.
- Crie credenciais do OAuth 2.0.
- Observe a ID do cliente e o segredo do cliente para uso posterior.
Criar configuração do autenticador JWT para GitHub Actions OIDC
Crie um arquivo nomeado
jwt-config.jsoncom a seguinte configuração:{ "issuer": { "url": "https://token.actions.githubusercontent.com", "audiences": [ "my-api" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:github:' + claims.sub" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:github:system')", "message": "username must not start with 'aks:jwt:github:system'" } ] }
Criar configuração do autenticador JWT para o Google Identity
Crie um arquivo nomeado
jwt-config.jsoncom a seguinte configuração:{ "issuer": { "url": "https://accounts.google.com", "audiences": [ "your-client-id.apps.googleusercontent.com" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:google:' + claims.sub" }, "groups": { "expression": "has(claims.groups) ? claims.groups.split(',').map(g, 'aks:jwt:' + g) : []" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:google:system')", "message": "username must not start with 'aks:jwt:google:system'" } ] }
Elementos de configuração do autenticador JWT
A configuração do autenticador JWT inclui os seguintes elementos principais: issuer, claimValidationRules, e claimMappingsuserValidationRules. Cada elemento serve a uma finalidade específica na definição de como o AKS valida e processa tokens JWT do provedor de identidade externo.
Configuração do emissor
A tabela a seguir descreve os principais elementos da issuer configuração:
| Elemento de configuração do emissor | Descrição |
|---|---|
url |
O URL do emissor OIDC que deve corresponder à declaração iss nos JWTs. |
audiences |
Lista de públicos-alvo para os quais os JWTs devem ser emitidos (verificados em relação à declaração de aud). |
Configuração de regras de validação de reclamação
A tabela a seguir descreve os principais elementos da claimValidationRules configuração:
| Elemento da regra de validação de declaração | Descrição |
|---|---|
expression |
Expressão CEL que define a lógica de validação a ser aplicada a declarações JWT. A expressão deve ser avaliada como true para que o token seja aceito. |
message |
Mensagem de erro retornada quando a regra de validação falha. |
Configuração de mapeamentos de reivindicação
A tabela a seguir descreve os principais elementos da claimMappings configuração:
| Elemento de mapeamentos de declarações | Descrição |
|---|---|
username |
Expressão CEL que define como construir o nome de usuário do Kubernetes a partir de declarações JWT.
Deve incluir o aks:jwt: prefixo para evitar conflitos com outros métodos de autenticação. |
groups |
Expressão CEL que define como construir associações de grupo do Kubernetes a partir de declarações JWT.
Deve incluir o aks:jwt: prefixo para evitar conflitos com outros métodos de autenticação. |
uid |
Expressão CEL opcional que define um identificador exclusivo para o usuário. |
extra |
Mapa opcional de atributos de usuário adicionais definidos por expressões CEL. |
Configuração de regras de validação do usuário
A tabela a seguir descreve os principais elementos da userValidationRules configuração:
| Elemento de regra de validação do usuário | Descrição |
|---|---|
expression |
Expressão CEL que define lógica de validação adicional a ser aplicada às informações finais do usuário mapeada. A expressão deve ser avaliada como true para que o usuário seja aceito. |
message |
Mensagem de erro retornada quando a regra de validação do usuário falha. |
Criar o autenticador JWT
Adicione o autenticador JWT ao cluster do AKS usando o
az aks jwtauthenticator addcomando.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Gerenciar autenticadores JWT
Listar todos os autenticadores JWT
Liste todos os autenticadores JWT em seu cluster usando o
az aks jwtauthenticator listcomando.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Obter detalhes para um autenticador JWT específico
Obtenha detalhes de um autenticador JWT específico usando o
az aks jwtauthenticator showcomando.az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Configurar GitHub Actions OIDC para autenticação
Crie variáveis de ambiente para e defina os seguintes segredos de repositório necessários no repositório GitHub:
-
AKS_SERVER_URL: URL do servidor API do cluster AKS. -
AKS_CA_DATA: dados de autoridade de certificação codificados em Base64 para o cluster do AKS.
-
Crie um fluxo de trabalho que obtenha um token OIDC e o use para autenticar com o cluster do AKS. O seguinte exemplo de workflow coloca todos os pods em execução no cluster:
Observação
O valor
my-apide audiência deve corresponder ao público-alvo configurado na configuração do autenticador JWT.name: AKS Access with GitHub OIDC on: workflow_dispatch: push: branches: [main] permissions: id-token: write contents: read jobs: aks-access: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install kubectl uses: azure/setup-kubectl@v3 with: version: 'latest' - name: Get GitHub OIDC token id: get_token run: | TOKEN=$(curl -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \ "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=my-api" | \ jq -r '.value') echo "::add-mask::$TOKEN" echo "oidc_token=$TOKEN" >> $GITHUB_OUTPUT - name: Create kubeconfig with OIDC token run: | cat <<EOF > kubeconfig apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${{ secrets.AKS_CA_DATA }} server: ${{ secrets.AKS_SERVER_URL }} name: aks-cluster contexts: - context: cluster: aks-cluster user: github-oidc-user name: aks-context current-context: aks-context users: - name: github-oidc-user user: token: ${{ steps.get_token.outputs.oidc_token }} EOF - name: List all pods in the cluster run: | export KUBECONFIG=./kubeconfig kubectl get pods --all-namespaces
Obter informações de cluster para a configuração do autenticador JWT
Obtenha a URL do servidor de API para o cluster usando o
az aks showcomando.az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Obtenha os dados de autoridade de certificação codificados em base64 para o cluster usando o
az aks get-credentialscomando.# Get CA data (base64 encoded) az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --file - --format exec | \ grep certificate-authority-data | awk '{print $2}'
Configurar o Google Identity OAuth 2.0 para autenticação
Você pode configurar a autenticação do Google Identity usando o kubelogin plug-in ou usando diretamente um token estático.
Adicione um novo contexto de usuário ao arquivo kubeconfig. Por exemplo:
users: - name: external-user user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: kubectl args: - oidc-login - get-token - --oidc-issuer-url=https://accounts.google.com - --oidc-client-id=your-client-id.apps.googleusercontent.com - --oidc-client-secret=your-client-secret
Testar autenticação
Inicie o workflow realizando um push para a ramificação principal ou acionando manualmente na aba Ações em seu repositório.
Monitore a execução do fluxo de trabalho na guia Ações para verificar se a autenticação está funcionando.
Resultado esperado para a configuração inicial antes da configuração de Role-Based Access Control (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeEsse erro indica autenticação bem-sucedida, mas falta de autorização.
Teste a autenticação usando o comando
kubectl get nodescom a opção--userpara especificar o contexto de usuário que você criou para a autenticação do Google Identity. Por exemplo:kubectl get nodes --user external-userResultado esperado para a configuração inicial antes da configuração de Role-Based Access Control (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeEsse erro indica autenticação bem-sucedida, mas falta de autorização.
Configurar o RBAC (Role-Based Access Control do Kubernetes)
Crie associações RBAC apropriadas para seus usuários externos e use as credenciais de administrador do cluster para aplicar essas configurações.
Crie um arquivo nomeado
rbac-config.yamlpara configurar associações RBAC para usuários externos. Por exemplo:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for GitHub; example of GitHub subject is "repo:<organization-name>/<repository-name>:ref:refs/heads/main" name: aks:jwt:github:your-github-sub apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioAplique a configuração do RBAC usando o
kubectl applycomando:kubectl apply -f rbac-config.yaml
Crie um arquivo nomeado
rbac-config.yamlpara configurar associações RBAC para usuários externos. Por exemplo:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for Google name: aks:jwt:google:your-subject-claim apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioAplique a configuração do RBAC usando o
kubectl applycomando:kubectl apply -f rbac-config.yaml
Verificar o acesso com RBAC
Verifique se o usuário externo agora pode acessar recursos de acordo com as permissões RBAC configuradas usando os comandos
kubectl get nodesekubectl get podscom o sinalizador--user. Por exemplo:kubectl get nodes --user external-user kubectl get pods --user external-user
Remover o autenticador JWT
Quando você não precisar mais do autenticador JWT, remova-o do cluster do AKS usando o
az aks jwtauthenticator deletecomando.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth