Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du konfigurerar externa identitetsprovidrar för GitHub och Google Identity för Azure Kubernetes Service (AKS) kontrollplansautentisering med strukturerad autentisering. Du lär dig hur du skapar JSON-webbtokenautentisering (JWT), konfigurerar validering och mappning av anspråk och testar autentiseringsflödet.
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
- supportpolicyer för AKS
- vanliga frågor och svar om Azure support
Förutsättningar
- Läs den konceptuella översikten för autentisering till AKS med hjälp av extern identitetsprovider.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Hämta igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt install Azure CLI. Om du kör på Windows eller macOS kan du överväga att köra Azure CLI i en Docker-container. Mer information finns i Hur du kör Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. För att avsluta autentiseringsprocessen, följ stegen som visas i din terminal. Andra inloggningsalternativ finns i Authenticate to Azure using Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version för att ta reda på versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Den här artikeln kräver version 2.77.0 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad där. Information om hur du installerar eller uppdaterar Azure CLI på den lokala datorn finns i Installera Azure CLI.
Du måste installera
aks-previewAzure CLI-tillägget version 18.0.0b41 eller senare för att kunna använda strukturerade autentiseringsfunktioner.Om du inte redan har
aks-previewtillägget installerar du det med kommandotaz extension add.az extension add --name aks-previewOm du redan har
aks-previewtillägget uppdaterar du det så att du har den senaste versionen med kommandotaz extension update.az extension update --name aks-previewKontrollera att du har den version av
aks-previewtillägget som krävs med kommandotaz extension show.az extension show --name aks-preview --query version
Ett AKS-kluster som kör Kubernetes version 1.30 eller senare. Information om hur du skapar ett AKS-kluster finns i Distribuera ett Azure Kubernetes Service (AKS) kluster med hjälp av Azure CLI.
kubectlkommandoradsverktyg för att interagera med ditt Kubernetes-kluster.kubectlär redan installerat om du använder Azure Cloud Shell. Du kan installerakubectllokalt med kommandotaz aks install-cli.az aks install-cliEn extern identitetsprovider som stöder OpenID Connect (OIDC).
Nätverksanslutning från klusternoder till din identitetsprovider.
Om du planerar att använda
kubeloginplugin-programmet installerar du det genom att följa anvisningarna i installationsguiden för kubelogin.
Ange miljövariabler
Ange följande miljövariabler för resursgruppen och klusternamnet:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Registrera funktionen JWTAuthenticatorPreview
Registrera funktionen
JWTAuthenticatorPreviewmed kommandotaz feature register.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceKontrollera registreringsstatusen för funktionen med hjälp av
az feature showkommandot .az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceNär statusen visar
Registered, uppdaterar du registreringen av resursprovider förMicrosoft.ContainerServicemed kommandotaz provider register.az provider register --namespace Microsoft.ContainerService
Konfigurera GitHub Actions OIDC-autentisering
Kontrollera att dina GitHub Actions arbetsflöden har nödvändiga behörigheter.
Konfigurera behörigheten
id-token: writei arbetsflödesfilerna. Som exempel:permissions: id-token: write contents: readKonfigurera lämpliga inställningar för lagringsplats och organisation för OIDC-tokenåtkomst. Konfigurera OIDC-inställningar för lagringsplats och organisationens säkerhetsprinciper för tokenanvändning.
Konfigurera Google Identity OAuth 2.0-autentisering
- Gå till Google Cloud Console.
- Skapa eller välj ett projekt.
- Skapa OAuth 2.0-autentiseringsuppgifter.
- Observera klient-ID och klienthemlighet för senare användning.
Skapa JWT-autentiseringskonfiguration för GitHub Actions OIDC
Skapa en fil med namnet
jwt-config.jsonmed följande konfiguration:{ "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'" } ] }
Skapa JWT-autentiseringskonfiguration för Google Identity
Skapa en fil med namnet
jwt-config.jsonmed följande konfiguration:{ "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'" } ] }
JWT-autentiseringskonfigurationselement
JWT-autentiseringskonfigurationen innehåller följande nyckelelement: issuer, claimValidationRules, claimMappingsoch userValidationRules. Varje element har ett specifikt syfte när det gäller att definiera hur AKS validerar och bearbetar JWT-token från den externa identitetsprovidern.
Utfärdarkonfiguration
I följande tabell beskrivs de viktigaste elementen i konfigurationen issuer :
| Konfigurationselement för utfärdare | Beskrivning |
|---|---|
url |
OIDC-utfärdarens URL måste överensstämma med kravet iss i JWTs. |
audiences |
Lista över målgrupper som JWT:erna måste utfärdas för (kontrolleras mot aud anspråk). |
Konfiguration av anspråksverifieringsregler
I följande tabell beskrivs de viktigaste elementen i konfigurationen claimValidationRules :
| Element för anspråksverifieringsregel | Beskrivning |
|---|---|
expression |
CEL-uttryck som definierar valideringslogik som ska tillämpas på JWT-anspråk. Uttrycket måste utvärderas som sant för att token ska accepteras. |
message |
Felmeddelandet returnerades när verifieringsregeln misslyckas. |
Konfiguration av anspråksmappningar
I följande tabell beskrivs de viktigaste elementen i konfigurationen claimMappings :
| Element för anspråksmappningar | Beskrivning |
|---|---|
username |
CEL-uttryck som definierar hur du konstruerar Kubernetes-användarnamnet från JWT-anspråk.
Måste innehålla prefixet aks:jwt: för att förhindra konflikter med andra autentiseringsmetoder. |
groups |
CEL-uttryck som definierar hur du skapar Kubernetes-gruppmedlemskap från JWT-anspråk.
Måste innehålla prefixet aks:jwt: för att förhindra konflikter med andra autentiseringsmetoder. |
uid |
Valfritt CEL-uttryck som definierar en unik identifierare för användaren. |
extra |
Valfri karta över ytterligare användarattribut som definierats av CEL-uttryck. |
Konfiguration av användarverifieringsregler
I följande tabell beskrivs de viktigaste elementen i konfigurationen userValidationRules :
| Element för användarverifieringsregel | Beskrivning |
|---|---|
expression |
CEL-uttryck som definierar ytterligare valideringslogik som ska tillämpas på den slutliga mappade användarinformationen. Uttrycket måste utvärderas till sant för att användaren ska accepteras. |
message |
Felmeddelandet returnerades när verifieringsregeln för användaren misslyckas. |
Skapa JWT-autentiseringen
Lägg till JWT-autentiseringen i AKS-klustret med kommandot
az aks jwtauthenticator add.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Hantera JWT-autentiseringar
Visa en lista över alla JWT-autentiserare
Visa en lista över alla JWT-autentiseringar i klustret med kommandot
az aks jwtauthenticator list.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Hämta information för en specifik JWT-autentisering
Hämta information om en specifik JWT-autentisering med hjälp av
az aks jwtauthenticator showkommandot .az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Konfigurera GitHub Actions OIDC för autentisering
Skapa miljövariabler och ställ in följande nödvändiga hemligheter för repo i ditt GitHub-repo:
-
AKS_SERVER_URL: URL:en för AKS-klustrets API-server. -
AKS_CA_DATA: Base64-kodade certifikatutfärdardata för ditt AKS-kluster.
-
Skapa ett arbetsflöde som hämtar en OIDC-token och använder den för att autentisera med ditt AKS-kluster. Följande exempelarbetsflöde hämtar alla poddar som körs i klustret:
Anmärkning
Målgruppsvärdet
my-apiska matcha målgruppen som konfigurerats i JWT-autentiseringskonfigurationen.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
Hämta klusterinformation för JWT-autentiseringskonfiguration
Hämta API-server-URL:en för klustret med hjälp av
az aks showkommandot .az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Hämta base64-kodade certifikatutfärdardata för klustret med hjälp av
az aks get-credentialskommandot .# 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}'
Konfigurera Google Identity OAuth 2.0 för autentisering
Du kan konfigurera Google Identity-autentisering med hjälp av plugin-programmet kubelogin eller genom att direkt använda en statisk token.
Lägg till en ny användarkontext i kubeconfig-filen. Som exempel:
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
Testa autentisering
Utlös arbetsflödet antingen genom att pusha till huvudgrenen eller manuellt starta det från fliken Åtgärder i ditt arkiv.
Övervaka arbetsflödeskörningen på fliken Åtgärder för att kontrollera att autentiseringen fungerar.
Förväntade utdata vid den första inställningen innan konfiguration av 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 scopeDet här felet anger lyckad autentisering men brist på auktorisering.
Testa autentiseringen genom att använda kommandot
kubectl get nodesmed flaggan--userför att ange den användarkontext du skapade för Google Identity-autentisering. Som exempel:kubectl get nodes --user external-userFörväntade utdata vid den första inställningen innan konfiguration av 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 scopeDet här felet anger lyckad autentisering men brist på auktorisering.
Konfigurera Kubernetes Role-Based Access Control (RBAC)
Skapa lämpliga RBAC-bindningar för dina externa användare och använd autentiseringsuppgifterna för klusteradministratören för att tillämpa dessa konfigurationer.
Skapa en fil med namnet
rbac-config.yamlför att konfigurera RBAC-bindningar för externa användare. Som exempel: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.ioAnvänd RBAC-konfigurationen
kubectl applymed kommandot :kubectl apply -f rbac-config.yaml
Skapa en fil med namnet
rbac-config.yamlför att konfigurera RBAC-bindningar för externa användare. Som exempel: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.ioAnvänd RBAC-konfigurationen
kubectl applymed kommandot :kubectl apply -f rbac-config.yaml
Verifiera åtkomst med RBAC
Kontrollera att den externa användaren nu kan komma åt resurser enligt de RBAC-behörigheter som du konfigurerade med hjälp av
kubectl get nodeskommandona ochkubectl get podsmed--userflaggan . Som exempel:kubectl get nodes --user external-user kubectl get pods --user external-user
Ta bort JWT-autentisering
När du inte längre behöver JWT-autentiseringen tar du bort den från AKS-klustret med kommandot
az aks jwtauthenticator delete.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth