Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra-lhe como configurar GitHub e fornecedores externos de identidade Google Identity para a autenticação do plano de controlo do Azure Kubernetes Service (AKS) usando autenticação estruturada. Você aprende a criar autenticadores JSON Web Token (JWT), configurar a validação e o mapeamento de declarações e testar o fluxo de autenticação.
Importante
Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Pré-requisitos
- Leia o resumo conceptual para autenticação no AKS com fornecedor de identidade externo.
Usa o ambiente Bash em Azure Cloud Shell. Para mais informações, consulte Comece com Azure Cloud Shell.
Se preferires executar comandos de referência de CLI localmente, instala o Azure CLI. Se estiveres a correr no Windows ou macOS, considera executar Azure CLI num contentor Docker. Para mais informações, veja Como executar o Azure CLI num contentor Docker.
Se estiveres a usar uma instalação local, inicia sessão na Azure CLI usando o comando az login. Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de iniciação de sessão, veja Autenticar para Azure usando Azure CLI.
Quando for solicitado, instale a extensão Azure CLI na primeira utilização. Para mais informações sobre extensões, veja Usar e gerir extensões com a Azure CLI.
Execute az version para descobrir 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 da Azure CLI. Se estiveres a usar o Azure Cloud Shell, a versão mais recente já está instalada lá. Para instalar ou atualizar o Azure CLI na sua máquina local, consulte Instale o Azure CLI.
Precisa de instalar a extensão
aks-previewAzure CLI versão 18.0.0b41 ou posterior para usar funcionalidades de autenticação estruturada.Se você ainda não tiver a
aks-previewextensão, instale-a usando oaz extension addcomando.az extension add --name aks-previewSe você já tiver a
aks-previewextensão, atualize-a para garantir que você tenha a versão mais recente usando oaz extension updatecomando.az extension update --name aks-previewVerifica se tens a versão necessária da
aks-previewextensão usando oaz extension showcomando.az extension show --name aks-preview --query version
Um cluster AKS executando o Kubernetes versão 1.30 ou posterior. Para criar um cluster AKS, veja Deploye um cluster Azure Kubernetes Service (AKS) usando Azure CLI.
kubectlferramenta de linha de comando para interagir com seu cluster Kubernetes.kubectljá está instalado se usares Azure Cloud Shell. Podes instalarkubectllocalmente usando oaz aks install-clicomando.az aks install-cliUm provedor de identidade externo que suporta OpenID Connect (OIDC).
Conectividade de rede dos nós do cluster para o seu provedor de identidade.
Se planeias usar o
kubeloginplugin, instala-o seguindo as instruções do guia de configuraçã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>"
Registe a JWTAuthenticatorPreview funcionalidade
Registe a
JWTAuthenticatorPreviewfuncionalidade usando oaz feature registercomando.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceVerifique o estado de registo da funcionalidade usando o
az feature showcomando.az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceQuando o estado aparecer
Registered, atualize o registo do fornecedor de recursos noMicrosoft.ContainerServiceusando o comandoaz provider register.az provider register --namespace Microsoft.ContainerService
Configurar autenticação OIDC do GitHub Actions
Garante que os teus fluxos de trabalho do GitHub Actions têm as permissões necessárias.
Configurar a permissão
id-token: writenos ficheiros de fluxo de trabalho. Por exemplo:permissions: id-token: write contents: readConfigure as configurações apropriadas do repositório e da organização para acesso ao token OIDC. Configurar definições OIDC do repositório e políticas de segurança da organização para o uso de tokens.
Configurar autenticação Google Identity OAuth 2.0
- Navegue até à Google Cloud Console.
- Crie ou selecione um projeto.
- Crie credenciais OAuth 2.0.
- Anote o ID do cliente e o segredo do cliente para uso posterior.
Criar configuração de 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 de 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-chave: issuer, claimValidationRules, claimMappings, e userValidationRules. Cada elemento serve um propósito específico ao definir como o AKS valida e processa tokens JWT do fornecedor externo de identidade.
Configuração do emissor
A tabela seguinte descreve os elementos-chave da issuer configuração:
| Elemento de configuração do emissor | Descrição |
|---|---|
url |
A URL do emissor do OIDC que deve corresponder à iss reivindicação nos JWTs. |
audiences |
Lista de destinatários para os quais os JWTs devem ser emitidos (verificado contra a declaração aud). |
Configuração das regras de validação de reivindicações
A tabela seguinte descreve os elementos-chave da claimValidationRules configuração:
| Elemento da regra de validação de reivindicações | Descrição |
|---|---|
expression |
Expressão CEL que define a lógica de validação a aplicar às reivindicações JWT. A expressão deve ser avaliada como verdadeira para que o token seja aceite. |
message |
Mensagem de erro devolveda quando a regra de validação falha. |
Configuração de mapeamentos de reivindicações
A tabela seguinte descreve os elementos-chave da claimMappings configuração:
| Elemento de mapeamento de reivindicações | Descrição |
|---|---|
username |
Expressão CEL que define como construir o nome de utilizador Kubernetes a partir das reivindicaçõ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 as pertenças a grupos Kubernetes a partir de reivindicaçõ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 único para o utilizador. |
extra |
Mapa opcional de atributos adicionais do utilizador definidos por expressões CEL. |
Configuração das regras de validação do utilizador
A tabela seguinte descreve os elementos-chave da userValidationRules configuração:
| Elemento da regra de validação do utilizador | Descrição |
|---|---|
expression |
Expressão CEL que define lógica adicional de validação para aplicar à informação final do utilizador mapeada. A expressão deve ser avaliada como verdadeira para que o utilizador seja aceite. |
message |
Mensagem de erro devolveda quando a regra de validação do utilizador falha. |
Criar o autenticador JWT
Adiciona o autenticador JWT ao teu cluster 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
Gerir autenticadores JWT
Liste todos os autenticadores JWT
Liste todos os autenticadores JWT no teu cluster usando o
az aks jwtauthenticator listcomando.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Obtenha detalhes de 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 o GitHub Actions OIDC para autenticação
Crie variáveis de ambiente para e defina os seguintes segredos de repositório obrigatórios no seu repositório GitHub:
-
AKS_SERVER_URL: URL do servidor API do seu cluster AKS. -
AKS_CA_DATA: Dados da autoridade de certificação codificados em Base64 para o seu cluster AKS.
-
Crie um fluxo de trabalho que obtenha um token OIDC e o use para autenticar com o seu cluster AKS. O seguinte exemplo de fluxo de trabalho faz com que todos os pods corram no cluster:
Observação
O valor
my-apido público deve corresponder ao público 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
Obtenha informações do cluster para a configuração do autenticador JWT
Obtenha a URL do servidor API do seu 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 certificadora codificados em base64 para o seu 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
Pode configurar a autenticação do Google Identity usando o kubelogin plugin ou usando diretamente um token estático.
Adiciona um novo contexto de utilizador ao teu ficheiro 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
Desencadeia o fluxo de trabalho ou enviando para o ramo principal ou ativando-o manualmente a partir do separador Ações no teu repositório.
Monitore a execução do fluxo de trabalho na guia Ações para verificar se a autenticação está funcionando.
Saída esperada para a configuração inicial antes da configuração do 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 scopeEste erro indica autenticação bem-sucedida, mas falta de autorização.
Teste a autenticação usando o
kubectl get nodescomando com a--userflag para especificar o contexto de utilizador que criou para a autenticação do Google Identity. Por exemplo:kubectl get nodes --user external-userSaída esperada para a configuração inicial antes da configuração do 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 scopeEste erro indica autenticação bem-sucedida, mas falta de autorização.
Configurar Kubernetes Role-Based Access Control (RBAC)
Crie ligações RBAC apropriadas para os seus utilizadores externos e use as credenciais do administrador do cluster para aplicar estas configurações.
Crie um ficheiro nomeado
rbac-config.yamlpara configurar bindings RBAC para utilizadores 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 RBAC usando o
kubectl applycomando:kubectl apply -f rbac-config.yaml
Crie um ficheiro nomeado
rbac-config.yamlpara configurar bindings RBAC para utilizadores 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 RBAC usando o
kubectl applycomando:kubectl apply -f rbac-config.yaml
Verifique o acesso com RBAC
Verifique se o utilizador externo pode agora aceder a recursos de acordo com as permissões RBAC que configurou usando os comandos
kubectl get nodesekubectl get podscom a opção--user. Por exemplo:kubectl get nodes --user external-user kubectl get pods --user external-user
Remover autenticador JWT
Quando já não precisares do autenticador JWT, remove-o do teu cluster AKS usando o
az aks jwtauthenticator deletecomando.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth