Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie die externen Identitätsanbieter GitHub und Google Identity für die Steuerebenenauthentifizierung des Azure Kubernetes Service (AKS) mithilfe der strukturierten Authentifizierung konfigurieren. Sie erfahren, wie Sie JSON Web Token (JWT)-Authentifikatoren erstellen, Anspruchsüberprüfung und -zuordnung konfigurieren und den Authentifizierungsfluss testen.
Von Bedeutung
AKS-Vorschaufunktionen sind auf Selbstbedienungsbasis und freiwillig verfügbar. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:
Voraussetzungen
- Lesen Sie die konzeptionelle Übersicht über die AUTHENTIFIZIERUNG bei AKS mithilfe des externen Identitätsanbieters.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Get started with Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, install die Azure CLI. Wenn Sie Windows oder macOS verwenden, empfiehlt es sich, Azure CLI in einem Docker-Container auszuführen. Weitere Informationen finden Sie unter How to run the Azure CLI in a Docker container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mit dem Befehl az login beim Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Use and manage extensions with the Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
Dieser Artikel erfordert Version 2.77.0 oder höher des Azure CLI. Wenn Sie Azure Cloud Shell verwenden, ist die neueste Version bereits dort installiert. Informationen zum Installieren oder Aktualisieren des Azure CLI auf Ihrem lokalen Computer finden Sie unter Installieren sie den Azure CLI.
Sie müssen die erweiterung
aks-previewAzure CLI Version 18.0.0b41 oder höher installieren, um strukturierte Authentifizierungsfeatures zu verwenden.Wenn Sie noch nicht über die Erweiterung
aks-previewverfügen, installieren Sie sie mit dem Befehlaz extension add.az extension add --name aks-previewWenn Sie bereits über die Erweiterung
aks-previewverfügen, aktualisieren Sie sie über den Befehlaz extension update, um sicherzustellen, dass Sie über die neueste Version verfügen.az extension update --name aks-previewStellen Sie sicher, dass Sie über die erforderliche Version der
aks-previewErweiterung verfügen, indem Sie denaz extension showBefehl verwenden.az extension show --name aks-preview --query version
Ein AKS-Cluster mit Kubernetes Version 1.30 oder höher. Informationen zum Erstellen eines AKS-Clusters finden Sie unter Deploy an Azure Kubernetes Service (AKS) cluster using Azure CLI.
kubectlBefehlszeilentool für die Interaktion mit Ihrem Kubernetes-Cluster.kubectlist bereits installiert, wenn Sie Azure Cloud Shell verwenden. Sie könnenkubectllokal installieren, indem Sie den Befehlaz aks install-cliverwenden.az aks install-cliEin externer Identitätsanbieter, der OpenID Connect (OIDC) unterstützt.
Netzwerkkonnektivität von Clusterknoten zu Ihrem Identitätsanbieter.
Wenn Sie das
kubeloginPlug-In verwenden möchten, installieren Sie es, indem Sie die Anweisungen im Kubelogin-Setuphandbuch befolgen.
Festlegen von Umgebungsvariablen
Legen Sie die folgenden Umgebungsvariablen für die Ressourcengruppe und den Clusternamen fest:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Registrieren des JWTAuthenticatorPreview Features
Registrieren Sie das
JWTAuthenticatorPreviewFeature mithilfe desaz feature registerBefehls.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceÜberprüfen Sie den Registrierungsstatus des Features mithilfe des
az feature showBefehls.az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceWenn der Status
Registeredanzeigt, aktualisieren Sie die Registrierung des Ressourcenanbieters fürMicrosoft.ContainerService, indem Sie denaz provider register-Befehl verwenden.az provider register --namespace Microsoft.ContainerService
Einrichtung der GitHub Actions OIDC-Authentifizierung
Stellen Sie sicher, dass Ihre GitHub Actions Workflows über die erforderlichen Berechtigungen verfügen.
Konfigurieren Sie die
id-token: writeBerechtigung in Ihren Workflowdateien. Beispiel:permissions: id-token: write contents: readRichten Sie geeignete Repository- und Organisationseinstellungen für den OIDC-Tokenzugriff ein. Konfigurieren Sie Repository-OIDC-Einstellungen und Organisationssicherheitsrichtlinien für die Tokenverwendung.
Einrichten der Google Identity OAuth 2.0-Authentifizierung
- Navigieren Sie zur Google Cloud Console.
- Erstellen oder Auswählen eines Projekts.
- Erstellen Sie OAuth 2.0-Anmeldeinformationen.
- Notieren Sie sich Ihre Client-ID und den geheimen Clientschlüssel für die spätere Verwendung.
Erstellen der JWT-Authentifikatorkonfiguration für GitHub Actions OIDC
Erstellen Sie eine Datei
jwt-config.jsonmit der folgenden 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'" } ] }
Erstellen der JWT-Authentifikatorkonfiguration für Google Identity
Erstellen Sie eine Datei
jwt-config.jsonmit der folgenden 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-Authentifikator-Konfigurationselemente
Die JWT-Authentifikatorkonfiguration umfasst die folgenden Schlüsselelemente: issuer, , claimValidationRules, claimMappingsund userValidationRules. Jedes Element dient einem bestimmten Zweck, um zu definieren, wie AKS JWT-Token vom externen Identitätsanbieter überprüft und verarbeitet.
Ausstellerkonfiguration
In der folgenden Tabelle werden die wichtigsten Elemente der issuer Konfiguration beschrieben:
| Ausstellerkonfigurationselement | Beschreibung |
|---|---|
url |
Die OIDC-Issuer-URL, die mit dem iss Claim in JWTs übereinstimmen muss. |
audiences |
Liste der Zielgruppen, für die JWTs ausgestellt werden müssen (überprüft gegen den Anspruch aud). |
Konfiguration von Anspruchsprüfungsregeln
In der folgenden Tabelle werden die wichtigsten Elemente der claimValidationRules Konfiguration beschrieben:
| Anspruchsüberprüfungsregelelement | Beschreibung |
|---|---|
expression |
CEL-Ausdruck, der die Überprüfungslogik definiert, die auf JWT-Ansprüche angewendet werden soll. Der Ausdruck muss als "true" ausgewertet werden, damit das Token akzeptiert wird. |
message |
Fehlermeldung, die zurückgegeben wird, wenn die Gültigkeitsprüfungsregel fehlschlägt. |
Konfiguration von Anspruchszuordnungen
In der folgenden Tabelle werden die wichtigsten Elemente der claimMappings Konfiguration beschrieben:
| Element für die Zuordnung von Ansprüchen | Beschreibung |
|---|---|
username |
CEL-Ausdruck, der definiert, wie der Kubernetes-Benutzername aus JWT-Ansprüchen erstellt wird.
Muss das aks:jwt: Präfix enthalten, um Konflikte mit anderen Authentifizierungsmethoden zu verhindern. |
groups |
CEL-Ausdruck, der definiert, wie Kubernetes-Gruppenmitgliedschaften aus JWT-Ansprüchen erstellt werden.
Muss das aks:jwt: Präfix enthalten, um Konflikte mit anderen Authentifizierungsmethoden zu verhindern. |
uid |
Optionaler CEL-Ausdruck, der einen eindeutigen Bezeichner für den Benutzer definiert. |
extra |
Optionale Zuordnung zusätzlicher Benutzerattribute, die durch CEL-Ausdrücke definiert sind. |
Konfiguration von Benutzerüberprüfungsregeln
In der folgenden Tabelle werden die wichtigsten Elemente der userValidationRules Konfiguration beschrieben:
| Benutzerüberprüfungsregelelement | Beschreibung |
|---|---|
expression |
CEL-Ausdruck, der zusätzliche Überprüfungslogik definiert, die auf die endgültig zugeordneten Benutzerinformationen angewendet werden soll. Der Ausdruck muss als "true" ausgewertet werden, damit der Benutzer akzeptiert wird. |
message |
Fehlermeldung, die zurückgegeben wird, wenn die Benutzerüberprüfungsregel fehlschlägt. |
Erstellen des JWT-Authentifikators
Fügen Sie den JWT-Authentifikator mithilfe des
az aks jwtauthenticator addBefehls zu Ihrem AKS-Cluster hinzu.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Verwalten von JWT-Authentifikatoren
Auflisten aller JWT-Authentifikatoren
Auflisten aller JWT-Authentifikatoren auf Ihrem Cluster mithilfe des
az aks jwtauthenticator listBefehls.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Abrufen von Details zu einem bestimmten JWT-Authentifikator
Rufen Sie Details zu einem bestimmten JWT-Authentifikator mithilfe des
az aks jwtauthenticator showBefehls ab.az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Einrichten von GitHub Actions OIDC für die Authentifizierung
Erstellen Sie Umgebungsvariablen, und legen Sie die folgenden erforderlichen Repositoryschlüssel in Ihrem GitHub Repository fest:
-
AKS_SERVER_URL: Die API-Server-URL Ihres AKS-Clusters. -
AKS_CA_DATA: Base64-codierte Zertifizierungsstellendaten für Ihren AKS-Cluster.
-
Erstellen Sie einen Workflow, der ein OIDC-Token abruft, und verwendet ihn zum Authentifizieren mit Ihrem AKS-Cluster. Der folgende Beispiel-Workflow holt alle Pods, die auf dem Cluster ausgeführt werden:
Hinweis
Der Benutzergruppenwert
my-apisollte mit der in Ihrer JWT-Authentifikatorkonfiguration konfigurierten Zielgruppe übereinstimmen.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
Abrufen von Clusterinformationen für die JWT-Authentifikatorkonfiguration
Rufen Sie die API-Server-URL für Ihren Cluster mithilfe des
az aks showBefehls ab.az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Rufen Sie die base64-codierten Zertifizierungsstellendaten für Ihren Cluster mithilfe des
az aks get-credentialsBefehls ab.# 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}'
Einrichten von Google Identity OAuth 2.0 für die Authentifizierung
Sie können die Google Identity-Authentifizierung entweder über das kubelogin Plug-In oder über ein statisches Token einrichten.
Fügen Sie ihrer Kubeconfig-Datei einen neuen Benutzerkontext hinzu. Beispiel:
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
Testen der Authentifizierung
Triggern Sie den Workflow entweder durch Pushen auf den Main Branch oder manuelles Triggern über die Registerkarte Aktionen in Ihrem Repository.
Überwachen Sie die Workflowausführung auf der Registerkarte "Aktionen", um zu überprüfen, ob die Authentifizierung funktioniert.
Erwartete Ausgabe für die Erstkonfiguration vor der Konfiguration der rollenbasierten Zugriffssteuerung (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeDieser Fehler zeigt eine erfolgreiche Authentifizierung an, aber keine Autorisierung.
Testen Sie die Authentifizierung mithilfe des
kubectl get nodesBefehls mit der--userKennzeichnung, um den Benutzerkontext anzugeben, den Sie für die Google Identity-Authentifizierung erstellt haben. Beispiel:kubectl get nodes --user external-userErwartete Ausgabe für die Erstkonfiguration vor der Konfiguration der rollenbasierten Zugriffssteuerung (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeDieser Fehler zeigt eine erfolgreiche Authentifizierung an, aber keine Autorisierung.
Konfiguration der Kubernetes-rollenbasierten Zugriffskontrolle (RBAC)
Erstellen Sie geeignete RBAC-Bindungen für Ihre externen Benutzer, und verwenden Sie die Clusteradministratoranmeldeinformationen, um diese Konfigurationen anzuwenden.
Erstellen Sie eine Datei namens
rbac-config.yamlzum Konfigurieren von RBAC-Bindungen für externe Benutzer. Beispiel: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.ioWenden Sie die RBAC-Konfiguration mithilfe des
kubectl applyBefehls an:kubectl apply -f rbac-config.yaml
Erstellen Sie eine Datei namens
rbac-config.yamlzum Konfigurieren von RBAC-Bindungen für externe Benutzer. Beispiel: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.ioWenden Sie die RBAC-Konfiguration mithilfe des
kubectl applyBefehls an:kubectl apply -f rbac-config.yaml
Überprüfen des Zugriffs mit RBAC
Überprüfen Sie, ob der externe Benutzer jetzt auf Ressourcen gemäß den RBAC-Berechtigungen zugreifen kann, die Sie mit den
kubectl get nodesUnd-Befehlenkubectl get podsmit der--userKennzeichnung konfiguriert haben. Beispiel:kubectl get nodes --user external-user kubectl get pods --user external-user
Entfernen des JWT-Authentifikators
Wenn Sie den JWT-Authentifikator nicht mehr benötigen, entfernen Sie ihn mithilfe des
az aks jwtauthenticator deleteBefehls aus Ihrem AKS-Cluster.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth