Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come configurare i provider di identità esterni di GitHub e Google Identity per l'autenticazione del piano di controllo Azure Kubernetes Service (AKS) tramite l'autenticazione strutturata. Si apprenderà come creare autenticatori JWT (JSON Web Token), configurare la convalida e il mapping delle attestazioni e testare il flusso di autenticazione.
Importante
Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:
- Criteri di supporto di AKS
- Domande frequenti su Azure support
Prerequisiti
- Leggere la panoramica concettuale per l'autenticazione al servizio Azure Kubernetes con il provider di identità esterno.
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione a Azure Cloud Shell.
Se preferisci eseguire i comandi di riferimento CLI in locale, installa l'Azure CLI. Se si esegue in Windows o macOS, è consigliabile eseguire Azure CLI in un contenitore Docker. Per altre informazioni, vedere Come eseguire il Azure CLI in un contenitore Docker.
Se si usa un'installazione locale, accedere al Azure CLI usando il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Authenticate to Azure using Azure CLI.For other sign-in options, see Authenticate to Azure using Azure CLI.
Quando richiesto, installare l'estensione Azure CLI al primo uso. Per altre informazioni sulle estensioni, vedere Usare e gestire le estensioni con Azure CLI.
Esegui az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, avviare az upgrade.
Questo articolo richiede la versione 2.77.0 o successiva del Azure CLI. Se si usa Azure Cloud Shell, la versione più recente è già installata. Per installare o aggiornare il Azure CLI nel computer locale, vedere Installare il Azure CLI.
È necessario installare l'estensione
aks-previewAzure CLI versione 18.0.0b41 o successiva per usare le funzionalità di autenticazione strutturata.Se l'estensione
aks-previewnon è già disponibile installarla con il comandoaz extension add.az extension add --name aks-previewSe l'estensione
aks-previewè disponibile, aggiornarla per assicurarsi di disporre della versione più recente con il comandoaz extension updatecommand.az extension update --name aks-previewVerificare di avere la versione necessaria dell'estensione
aks-previewusando ilaz extension showcomando .az extension show --name aks-preview --query version
Un cluster AKS che esegue Kubernetes versione 1.30 o successiva. Per creare un cluster del servizio Azure Kubernetes, vedere Distribuire un cluster Azure Kubernetes Service (AKS) usando Azure CLI.
kubectlstrumento da riga di comando per interagire con il cluster Kubernetes.kubectlè già installato se si usa Azure Cloud Shell. È possibile eseguire l'installazionekubectlin locale usando ilaz aks install-clicomando .az aks install-cliProvider di identità esterno che supporta OpenID Connect (OIDC).
Connettività di rete dai nodi del cluster al provider di identità.
Se si prevede di usare il
kubeloginplug-in, installarlo seguendo le istruzioni nella guida alla configurazione di kubelogin.
Impostare le variabili di ambiente
Impostare le variabili di ambiente seguenti per il gruppo di risorse e il nome del cluster:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Registrare la JWTAuthenticatorPreview funzionalità
Registrare la
JWTAuthenticatorPreviewfunzionalità usando ilaz feature registercomando .az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceControllare lo stato di registrazione della funzionalità usando il
az feature showcomando .az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceQuando lo stato mostra
Registered, aggiorna la registrazione del provider di risorse perMicrosoft.ContainerServiceutilizzando il comandoaz provider register.az provider register --namespace Microsoft.ContainerService
Configurare l'autenticazione OIDC di GitHub-Actions
Assicurarsi che i flussi di lavoro GitHub Actions dispongano delle autorizzazioni necessarie.
Configurare l'autorizzazione
id-token: writenei file del flusso di lavoro. Per esempio:permissions: id-token: write contents: readConfigurare le impostazioni appropriate del repository e dell'organizzazione per l'accesso al token OIDC. Configurare le impostazioni OIDC del repository e i criteri di sicurezza dell'organizzazione per l'utilizzo dei token.
Configurare l'autenticazione OAuth 2.0 di Google Identity
- Accedere al Google Cloud Console.
- Creare o selezionare un progetto.
- Creare credenziali OAuth 2.0.
- Prendere nota dell'ID client e del segreto client per un uso successivo.
Creare la configurazione dell'autenticatore JWT per GitHub Actions OIDC
Creare un file denominato
jwt-config.jsoncon la configurazione seguente:{ "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'" } ] }
Creare la configurazione dell'autenticatore JWT per Google Identity
Creare un file denominato
jwt-config.jsoncon la configurazione seguente:{ "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'" } ] }
Elementi di configurazione dell'autenticatore JWT
La configurazione dell'autenticatore JWT include gli elementi chiave seguenti: issuer, claimValidationRules, claimMappingse userValidationRules. Ogni elemento ha uno scopo specifico nel definire come AKS convalida ed elabora i token JWT dal provider di identità esterno.
Configurazione dell'emittente
Nella tabella seguente vengono descritti gli elementi chiave della issuer configurazione:
| Elemento di configurazione dell'emittente | Descrizione |
|---|---|
url |
URL dell'emittente OIDC che deve corrispondere alla dichiarazione iss in JWT. |
audiences |
Elenco di destinatari per cui devono essere rilasciati i JWT (verificati secondo il claim aud). |
Configurazione delle regole di convalida delle attestazioni
Nella tabella seguente vengono descritti gli elementi chiave della claimValidationRules configurazione:
| Elemento di regola di convalida delle attestazioni | Descrizione |
|---|---|
expression |
Espressione CEL che definisce la logica di convalida da applicare alle attestazioni JWT. L'espressione deve restituire true affinché il token venga accettato. |
message |
Messaggio di errore restituito quando la regola di convalida ha esito negativo. |
Configurazione dei mapping di attestazioni
Nella tabella seguente vengono descritti gli elementi chiave della claimMappings configurazione:
| Elemento di mapping di attestazioni | Descrizione |
|---|---|
username |
Espressione CEL che definisce come costruire il nome utente Kubernetes dalle attestazioni JWT.
Deve includere il aks:jwt: prefisso per evitare conflitti con altri metodi di autenticazione. |
groups |
Espressione CEL che definisce come costruire le appartenenze ai gruppi Kubernetes dalle attestazioni JWT.
Deve includere il aks:jwt: prefisso per evitare conflitti con altri metodi di autenticazione. |
uid |
Espressione CEL facoltativa che definisce un identificatore univoco per l'utente. |
extra |
Mappa facoltativa di attributi utente aggiuntivi definiti dalle espressioni CEL. |
Configurazione delle regole di convalida utente
Nella tabella seguente vengono descritti gli elementi chiave della userValidationRules configurazione:
| Elemento della regola di convalida utente | Descrizione |
|---|---|
expression |
Espressione CEL che definisce una logica di convalida aggiuntiva da applicare alle informazioni utente mappate finali. L'espressione deve restituire true affinché l'utente venga accettato. |
message |
Messaggio di errore restituito quando la regola di convalida dell'utente ha esito negativo. |
Creare l'autenticatore JWT
Aggiungi l'autenticatore JWT al cluster AKS usando il comando
az aks jwtauthenticator add.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Gestire gli autenticatori JWT
Elencare tutti gli autenticatori JWT
Elencare tutti gli autenticatori JWT nel cluster usando il
az aks jwtauthenticator listcomando .az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Ottenere i dettagli per un autenticatore JWT specifico
Ottenere i dettagli per un autenticatore JWT specifico usando il
az aks jwtauthenticator showcomando .az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Configurare GitHub Actions OIDC per l'autenticazione
Creare variabili di ambiente e impostare i segreti necessari del repository seguenti nel repository GitHub:
-
AKS_SERVER_URL: URL del server API del cluster AKS. -
AKS_CA_DATA: dati dell'autorità di certificazione con codifica Base64 per il cluster AKS.
-
Creare un flusso di lavoro che ottiene un token OIDC e lo usa per l'autenticazione con il cluster AKS. Il flusso di lavoro di esempio seguente recupera tutti i pod in esecuzione nel cluster.
Annotazioni
Il valore
my-apidel gruppo di destinatari deve corrispondere al gruppo di destinatari configurato nella configurazione dell'autenticatore 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
Ottenere informazioni sul cluster per la configurazione dell'autenticatore JWT
Ottenere l'URL del server API per il cluster usando il
az aks showcomando .az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Ottenere i dati dell'autorità di certificazione con codifica Base64 per il cluster usando il
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}'
Configurare Google Identity OAuth 2.0 per l'autenticazione
È possibile configurare l'autenticazione di Google Identity usando il kubelogin plug-in o direttamente usando un token statico.
Aggiungere un nuovo contesto utente al file kubeconfig. Per esempio:
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
Verifica autenticazione
Attivare il flusso di lavoro eseguendo il push nel ramo principale o attivandolo manualmente dalla scheda Azioni nel repository.
Monitorare l'esecuzione del flusso di lavoro nella scheda Azioni per verificare che l'autenticazione funzioni.
Output previsto per la prima installazione prima della configurazione 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 scopeQuesto errore indica l'autenticazione riuscita ma la mancanza di autorizzazione.
Testare l'autenticazione usando il comando
kubectl get nodescon il flag--userper specificare il contesto dell'utente che hai creato per l'autenticazione di Google Identity. Per esempio:kubectl get nodes --user external-userOutput previsto per la prima installazione prima della configurazione 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 scopeQuesto errore indica l'autenticazione riuscita ma la mancanza di autorizzazione.
Configurare Kubernetes Role-Based Access Control (RBAC)
Impostare binding RBAC appropriati per gli utenti esterni e usare le credenziali di amministratore del cluster per applicare queste configurazioni.
Creare un file denominato
rbac-config.yamlper configurare le associazioni RBAC per gli utenti esterni. Per esempio: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.ioApplicare la configurazione RBAC utilizzando il comando
kubectl apply.kubectl apply -f rbac-config.yaml
Creare un file denominato
rbac-config.yamlper configurare le associazioni RBAC per gli utenti esterni. Per esempio: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.ioApplicare la configurazione RBAC utilizzando il comando
kubectl apply.kubectl apply -f rbac-config.yaml
Verificare l'accesso con RBAC
Verificare che l'utente esterno possa ora accedere alle risorse in base alle autorizzazioni basate sul ruolo (RBAC) che hai configurato usando i comandi
kubectl get nodesekubectl get pods, con il flag--user. Per esempio:kubectl get nodes --user external-user kubectl get pods --user external-user
Rimuovere l'autenticatore JWT
Usare il comando
az aks jwtauthenticator deleteper rimuovere l'autenticatore JWT dal cluster AKS quando non è più necessario.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth