Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u externe id-providers voor GitHub en Google Identity configureert voor Azure Kubernetes Service (AKS) verificatie van het besturingsvlak met behulp van gestructureerde verificatie. Je leert hoe je JSON Web Token (JWT) authenticators maakt, claimvalidatie en toewijzing configureert, en de authenticatiestroom test.
Belangrijk
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
- Ondersteuningsbeleid voor AKS
- veelgestelde vragen Azure support
Vereiste voorwaarden
- Lees het conceptuele overzicht voor verificatie bij AKS met behulp van een externe id-provider.
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Get gestart met Azure Cloud Shell voor meer informatie.
Als u de CLI-opdrachten liever lokaal uitvoert, installeer de Azure CLI. Als u op Windows of macOS werkt, kunt u overwegen Azure CLI uit te voeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij de Azure CLI met behulp van de opdracht az. Om het authenticatieproces te voltooien, volgt u de stappen die op uw terminal worden weergegeven. Zie Authenticate to Azure using Azure CLI voor andere aanmeldingsopties.
Wanneer u hierom wordt gevraagd, installeert u de Azure CLI-extensie bij het eerste gebruik. Zie Uitbreidingen gebruiken en beheren met de Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en de afhankelijke bibliotheken te vinden. Voer az upgrade uit om naar de nieuwste versie te upgraden.
Voor dit artikel is versie 2.77.0 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie daar al geïnstalleerd. Zie
De Azure CLI0 installeren als u de Azure CLI op uw lokale computer wilt installeren of bijwerken. U moet de extensie
aks-previewAzure CLI-extensie 18.0.0b41 of hoger installeren om gestructureerde verificatiefuncties te kunnen gebruiken.Als u de
aks-previewextensie nog niet hebt, installeert u deze met behulp van deaz extension addopdracht.az extension add --name aks-previewAls u de
aks-previewextensie al hebt, werkt u deze bij om ervoor te zorgen dat u de nieuwste versie hebt met behulp van deaz extension updateopdracht.az extension update --name aks-previewControleer of u de vereiste versie van de
aks-previewextensie hebt met behulp van deaz extension showopdracht.az extension show --name aks-preview --query version
Een AKS-cluster met Kubernetes versie 1.30 of hoger. Zie Deploy an Azure Kubernetes Service (AKS) cluster using Azure CLI als u een AKS-cluster wilt maken.
kubectlopdrachtregelprogramma voor interactie met uw Kubernetes-cluster.kubectlis al geïnstalleerd als u Azure Cloud Shell gebruikt. U kunt lokaal installerenkubectlmet behulp van deaz aks install-cliopdracht.az aks install-cliEen externe id-provider die OpenID Connect (OIDC) ondersteunt.
Netwerkconnectiviteit van clusterknooppunten naar uw id-provider.
Als u van plan bent om de invoegtoepassing te gebruiken, installeert u deze
kubelogindoor de instructies in de installatiehandleiding voor kubelogin te volgen.
Omgevingsvariabelen instellen
Stel de volgende omgevingsvariabelen in voor uw resourcegroep en clusternaam:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
JWTAuthenticatorPreview De functie registreren
Registreer de
JWTAuthenticatorPreviewfunctie met behulp van deaz feature registeropdracht.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceControleer de registratiestatus van de functie met behulp van de
az feature showopdracht.az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceWanneer de status
Registeredwordt weergegeven, registreert u de resourceprovider opnieuw voorMicrosoft.ContainerServicemet behulp van deaz provider registeropdracht.az provider register --namespace Microsoft.ContainerService
GitHub Actions OIDC-authenticatie instellen
Zorg ervoor dat uw GitHub Actions werkstromen over de benodigde machtigingen beschikken.
Configureer de
id-token: writemachtiging in uw workflow-bestanden. Voorbeeld:permissions: id-token: write contents: readStel de juiste opslagplaats- en organisatie-instellingen in voor OIDC-tokentoegang. Configureer de OIDC-instellingen van de opslagplaats en het beveiligingsbeleid van de organisatie voor tokengebruik.
Google Identity OAuth 2.0-verificatie instellen
- Navigeer naar de Google Cloud Console.
- Een project maken of selecteren.
- OAuth 2.0-referenties maken.
- Noteer uw client-id en clientgeheim voor later gebruik.
JWT Authenticator-configuratie maken voor GitHub Actions OIDC
Maak een bestand met de naam
jwt-config.jsonmet de volgende configuratie:{ "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'" } ] }
JWT Authenticator-configuratie maken voor Google Identity
Maak een bestand met de naam
jwt-config.jsonmet de volgende configuratie:{ "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 Authenticator-configuratie-elementen
De JWT Authenticator-configuratie bevat de volgende belangrijke elementen: issuer, claimValidationRules, claimMappingsen userValidationRules. Elk element dient een specifiek doel bij het definiëren van hoe AKS JWT-tokens van de externe id-provider valideert en verwerkt.
Configuratie van uitgever
In de volgende tabel worden de belangrijkste elementen van de issuer configuratie beschreven:
| Verlenerconfiguratie-element | Beschrijving |
|---|---|
url |
De URL van de OIDC-uitgever, die moet overeenkomen met de iss claim in JWTs. |
audiences |
Lijst met doelgroepen waarvoor JWT's moeten worden uitgegeven (gecontroleerd op aud claim). |
Configuratie van claimvalidatieregels
In de volgende tabel worden de belangrijkste elementen van de claimValidationRules configuratie beschreven:
| Element van de claimvalidatieregel | Beschrijving |
|---|---|
expression |
CEL-expressie die de validatielogica definieert die moet worden toegepast op JWT-claims. De expressie moet resulteren in true zodat het token geaccepteerd wordt. |
message |
Foutbericht geretourneerd wanneer de validatieregel mislukt. |
Configuratie van claimtoewijzingen
In de volgende tabel worden de belangrijkste elementen van de claimMappings configuratie beschreven:
| Het element Claimtoewijzingen | Beschrijving |
|---|---|
username |
CEL-expressie waarmee wordt gedefinieerd hoe u de Kubernetes-gebruikersnaam maakt op basis van JWT-claims.
Moet het aks:jwt: voorvoegsel bevatten om conflicten met andere verificatiemethoden te voorkomen. |
groups |
CEL-expressie waarmee wordt gedefinieerd hoe kubernetes-groepslidmaatschappen worden samengesteld op basis van JWT-claims.
Moet het aks:jwt: voorvoegsel bevatten om conflicten met andere verificatiemethoden te voorkomen. |
uid |
Optionele CEL-expressie waarmee een unieke id voor de gebruiker wordt gedefinieerd. |
extra |
Optionele map van aanvullende gebruikerskenmerken, gedefinieerd met CEL-expressies. |
Configuratie van gebruikersvalidatieregels
In de volgende tabel worden de belangrijkste elementen van de userValidationRules configuratie beschreven:
| Element van gebruikersvalidatieregel | Beschrijving |
|---|---|
expression |
CEL-expressie die aanvullende validatielogica definieert die moet worden toegepast op de uiteindelijke toegewezen gebruikersgegevens. De expressie moet kloppen opdat de gebruiker wordt geaccepteerd. |
message |
Foutbericht geretourneerd wanneer de gebruikersvalidatieregel mislukt. |
De JWT-verificator maken
Voeg de JWT-verificator toe aan uw AKS-cluster met behulp van de
az aks jwtauthenticator addopdracht.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
JWT-authenticators beheren
Alle JWT-authenticatoren weergeven
Vermeld alle JWT-verificators in uw cluster met behulp van de
az aks jwtauthenticator listopdracht.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Details ophalen voor een specifieke JWT-verificator
Details ophalen voor een specifieke JWT-verificator met behulp van de
az aks jwtauthenticator showopdracht.az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
GitHub Actions OIDC instellen voor verificatie
Maak omgevingsvariabelen voor en stel de volgende vereiste opslagplaatsgeheimen in uw GitHub-opslagplaats in:
-
AKS_SERVER_URL: de API-server-URL van uw AKS-cluster. -
AKS_CA_DATA: Base64-gecodeerde certificeringsinstantiegegevens voor uw AKS-cluster.
-
Maak een werkstroom die een OIDC-token verkrijgt en deze gebruikt om te verifiëren bij uw AKS-cluster. Met de volgende voorbeeldwerkstroom worden alle pods op het cluster uitgevoerd:
Opmerking
De doelgroepwaarde
my-apimoet overeenkomen met de doelgroep die is geconfigureerd in de JWT Authenticator-configuratie.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
Clustergegevens ophalen voor JWT Authenticator-configuratie
Haal de URL van de API-server voor uw cluster op met behulp van de
az aks showopdracht.az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Haal de base64-gecodeerde certificeringsinstantiegegevens voor uw cluster op met behulp van de
az aks get-credentialsopdracht.# 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}'
Google Identity OAuth 2.0 instellen voor verificatie
U kunt Google Identity Authentication instellen met behulp van de kubelogin invoegtoepassing of rechtstreeks met behulp van een statisch token.
Voeg een nieuwe gebruikerscontext toe aan uw kubeconfig-bestand. Voorbeeld:
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
Authenticatie testen
Activeer de werkstroom door naar de hoofdbranch te pushen of handmatig te activeren vanaf het tabblad Acties in je repository.
Controleer de uitvoering van de werkstroom op het tabblad Acties om te controleren of de verificatie werkt.
Verwachte uitvoer voor de eerste installatie vóór Role-Based Access Control (RBAC)-configuratie:
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeDeze fout geeft aan dat de verificatie is geslaagd, maar dat er geen autorisatie is.
Test de verificatie met behulp van de
kubectl get nodesopdracht met de--uservlag om de gebruikerscontext op te geven die u hebt gemaakt voor Google Identity-verificatie. Voorbeeld:kubectl get nodes --user external-userVerwachte uitvoer voor de eerste installatie vóór Role-Based Access Control (RBAC)-configuratie:
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeDeze fout geeft aan dat de verificatie is geslaagd, maar dat er geen autorisatie is.
Kubernetes-Role-Based Access Control (RBAC) configureren
Maak de juiste RBAC-bindingen voor uw externe gebruikers en gebruik de referenties van de clusterbeheerder om deze configuraties toe te passen.
Maak een bestand met de naam
rbac-config.yamlRBAC-bindingen voor externe gebruikers te configureren. Voorbeeld: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.ioPas de RBAC-configuratie toe met behulp van de
kubectl applyopdracht:kubectl apply -f rbac-config.yaml
Maak een bestand met de naam
rbac-config.yamlRBAC-bindingen voor externe gebruikers te configureren. Voorbeeld: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.ioPas de RBAC-configuratie toe met behulp van de
kubectl applyopdracht:kubectl apply -f rbac-config.yaml
Toegang verifiëren met RBAC
Controleer of de externe gebruiker nu toegang heeft tot resources volgens de RBAC-machtigingen die u hebt geconfigureerd met behulp van de
kubectl get nodesenkubectl get podsopdrachten met de--uservlag. Voorbeeld:kubectl get nodes --user external-user kubectl get pods --user external-user
JWT-verificator verwijderen
Wanneer u de JWT-verificator niet meer nodig hebt, verwijdert u deze uit uw AKS-cluster met behulp van de
az aks jwtauthenticator deleteopdracht.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth