In diesem Dokument wird beschrieben, wie Clusteradministratoren oder Anwendungsoperatoren Cluster so konfigurieren können, dass die Authentifizierung mit einem OIDC-Anbieter (OpenID Connect) eines Drittanbieters unterstützt wird.
Beschränkungen
Sie müssen einen Clustertyp verwenden, der OIDC unterstützt.
Hinweise
-
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Aktualisieren Sie die gcloud CLI nach der Initialisierung und installieren Sie die erforderlichen Komponenten:
gcloud components update gcloud components install kubectl
- Achten Sie darauf, dass Ihr Plattformadministrator Ihnen alle erforderlichen Anbieterinformationen zur Verfügung gestellt hat. Weitere Informationen finden Sie unter Details zum Identitätsanbieter freigeben.
- Zur Authentifizierung über die Google Cloud Console müssen Sie jeden Cluster, den Sie konfigurieren möchten, bei Ihrer Projektflotte registrieren. Weitere Informationen finden Sie unter Flotten erstellen – Übersicht.
- Wenn Sie über einen Bastion Host eine Verbindung zur Steuerungsebene eines AWS- oder Azure-Clusters herstellen müssen, die sich außerhalb Ihres aktuellen VPC-Netzwerk befindet, achten Sie darauf, dass Sie den Bastion Host erstellt und einen SSH-Tunnel an Port
8118gestartet haben. Wenn Siekubectl-Befehle in diesem Dokument ausführen, stellen Sie den BefehlenHTTPS_PROXY=http://localhost:PORTvoran, wobeiPORTdie Portnummer ist, die Sie beim Starten des SSH-Tunnels verwendet haben. - Für GKE-Cluster auf Google Cloudregistrieren Sie die Cluster in Ihrer Flotte.
Cluster konfigurieren
Wenn Sie die Authentifizierung für einen Cluster mit OIDC konfigurieren möchten, fügen Sie einer benutzerdefinierten Kubernetes-Ressource (Custom Resource) mit dem Namen „ClientConfig“ die folgenden Informationen hinzu:
- Informationen zu Ihrem Identitätsanbieter, z. B. eine Client-ID und ein Secret.
- Informationen zu den JSON-Web-Tokens (JWTs), die Ihr Identitätsanbieter für die Authentifizierung verwendet.
- Alle zusätzlichen Bereiche oder Parameter, die für Ihren Identitätsanbieter spezifisch sind.
Weitere Informationen zu den Informationen, die Sie von Ihrem Plattformadministrator oder der Person, die die Identitäten in Ihrer Organisation verwaltet, benötigen, finden Sie unter Details zum Identitätsanbieter weitergeben.
Der Cluster verwendet die Felder in der benutzerdefinierten ClientConfig-Ressource für die Interaktion mit Ihrem Identitätsanbieter. Jeder Cluster hat eine ClientConfig namens default im Namespace kube-public. Die Felder, die Sie ändern, hängen von Ihrem Identitätsanbieter ab.
Zum Bearbeiten der default-ClientConfig müssen Sie über kubectl eine Verbindung zu Ihrem Cluster herstellen und den folgenden Befehl ausführen:
kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public
Ersetzen Sie KUBECONFIG_PATH durch den Pfad zur kubeconfig-Datei Ihres Clusters, z. B. $HOME/.kube/config.
Die ClientConfig-Ressource des Clusters wird in einem Texteditor geladen. Fügen Sie das spec.authentication.oidc-Objekt wie im folgenden Beispiel hinzu. Ändern Sie keine bereits geschriebenen Standarddaten.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
oidc:
certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
deployCloudConsoleProxy: PROXY_BOOLEAN
extraParams: EXTRA_PARAMS
groupsClaim: GROUPS_CLAIM
groupPrefix: GROUP_PREFIX
issuerURI: ISSUER_URI
kubectlRedirectURI: KUBECTL_REDIRECT_URI
scopes: SCOPES
userClaim: USER_CLAIM
userPrefix: USER_PREFIX
enableAccessToken: ENABLE_ACCESS_TOKEN
proxy: PROXY_URL
# Rest of the resource is managed by Google. DO NOT MODIFY.
Betrachten Sie beispielsweise die folgenden Felder für Identitätstokens:
{
'iss': 'https://server.example.com'
'sub': 'u98523-4509823'
'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp']
# Multiple lines are omitted here
}
In diesem Beispiel ist iss der Identitätsanbieter-URI, sub identifiziert den Nutzer und groupList listet die Sicherheitsgruppen auf, denen der Nutzer angehört. In diesem Beispiel werden nur einige der Felder gezeigt, die das tatsächliche Token enthalten kann.
Für das Beispieltoken oben aktualisieren Sie die folgenden Felder im spec.authentication.oidc-Objekt von ClientConfig:
issuerURI: 'https://server.example.com'
userClaim: 'sub'
groupsClaim: 'groupList'
# Multiple lines are omitted here
Sie können derselben ClientConfig mehrere OIDC-, LDAP- und SAML-Identitätsanbieterkonfigurationen hinzufügen. Der Cluster versucht, sich mit jeder Konfiguration in der Reihenfolge zu authentifizieren, in der sie definiert sind. Der Vorgang wird nach der ersten erfolgreichen Authentifizierung beendet. Im folgenden Beispiel für ClientConfig werden mehrere Identitätsanbieter in einer bestimmten Reihenfolge definiert:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
# Multiple lines are omitted here.
- saml:
# Multiple lines are omitted here.
- azureAD:
# Multiple lines are omitted here.
- oidc:
name: Okta OIDC
# Multiple lines are omitted here.
- oidc:
name: Google OIDC
# Multiple lines are omitted here.
OIDC-Felder für ClientConfig
In der folgenden Tabelle sind die Felder des ClientConfig-oidc-Objekts beschrieben. Welche Felder Sie hinzufügen müssen, hängt von Ihren Identitätsanbieter-Tokens und der Konfiguration des Anbieters durch Ihren Plattformadministrator ab.
| Feld | Erforderlich | Beschreibung | Format |
|---|---|---|---|
| Name | Ja | Der Name, den Sie dieser Konfiguration zuweisen möchten, normalerweise der Name des Identitätsanbieters. Ein Konfigurationsname muss mit einem Buchstaben beginnen, gefolgt von bis zu 39 Kleinbuchstaben, Zahlen oder Bindestrichen. Das letzte Zeichen darf kein Bindestrich sein. | String |
| certificateAuthorityData | Nein | Ein eventuell von Ihrem Plattformadministrator bereitgestellter PEM-codierter Zertifikatstring für den Identitätsanbieter. Fügen Sie den resultierenden String in certificateAuthorityData als eine Zeile ein. |
String |
| clientID | Ja | Die Client-ID des Identitätsanbieters. | String |
| clientSecret | Nein | Gemeinsames Secret vom OIDC-Clientanwendung und OIDC-Anbieter. | String |
| deployCloudConsoleProxy | Nein | Gibt an, ob ein Proxy bereitgestellt wird, mit dem die Google Cloud Console eine Verbindung zu einem lokalen Identitätsanbieter herstellen kann, der nicht über das Internet öffentlich zugänglich ist. Standardmäßig ist dies auf false eingestellt. |
Boolesch |
| extraParams | Nein | Zusätzliche key=value-Parameter, die als durch Kommas getrennte Liste an den Identitätsanbieter gesendet werden, z. B. `prompt=consent,access_type=offline`. | Durch Kommas getrennte Liste |
| groupsClaim | Nein | Die JWT-Anforderung (Feldname), die Ihr Anbieter zum Zurückgeben der Sicherheitsgruppen eines Kontos verwendet. | String |
| groupPrefix | Nein | Das Präfix, das Sie Sicherheitsgruppennamen voranstellen möchten, um Konflikte mit vorhandenen Namen in Ihren Zugriffssteuerungsregeln zu vermeiden, wenn Sie Konfigurationen für mehrere Identitätsanbieter haben (normalerweise der Anbietername). | String |
| issuerURI | Ja | Der URI, an den Autorisierungsanfragen an Ihren Identitätsanbieter gesendet werden. Der URI muss HTTPS verwenden und darf nicht mit einem nachgestellten Schrägstrich enden. | URL String |
| kubectlRedirectURI | Ja | Die von der gcloud CLI verwendete Weiterleitungs-URL und der Weiterleitungsport, die von Ihrem Plattformadministrator bei der Registrierung angegeben wurden, normalerweise in der Form http://localhost:PORT/callback. |
URL String |
| Umfang | Ja | Zusätzliche Bereiche, die an den OpenID-Anbieter gesendet werden. Microsoft Azure und Okta benötigen beispielsweise den Bereich offline_access. |
Durch Kommas getrennte Liste |
| userClaim | Nein | Die JWT-Anforderung (Feldname), die Ihr Anbieter zur Identifizierung eines Nutzerkontos verwendet. Wenn Sie hier keinen Wert angeben, ist der Standardwert „sub“. Dies ist die Nutzer-ID-Anforderung, die von vielen Anbietern verwendet wird. Je nach OpenID-Anbieter können Sie andere Anforderungen auswählen, beispielsweise „E-Mail“ oder „Name“. Anderen Anforderungen als der E-Mail-Adresse wird die Aussteller-URL vorangestellt, um Namenskonflikte zu vermeiden. | String |
| userPrefix | Nein | Das Präfix, das Sie den Nutzeranforderungen voranstellen möchten, um Konflikte mit vorhandenen Namen zu vermeiden. Sie können jedoch auch das Standardpräfix verwenden. | String |
| enableAccessToken | Nein | Wenn diese Option aktiviert ist, kann der Cluster den userinfo-Endpunkt des Identitätsanbieters verwenden, um Gruppeninformationen abzurufen, wenn sich ein Nutzer über die Befehlszeile anmeldet. Dadurch können Sie Sicherheitsgruppen für die Autorisierung verwenden, wenn Sie einen Anbieter wie Okta haben, der Gruppenanforderungen von diesem Endpunkt bereitstellt. Wenn das Feld nicht festgelegt ist, wird der Wert false verwendet. |
Boolesch |
| proxy | Nein | Proxyserver-Adresse, die gegebenenfalls zum Herstellen einer Verbindung mit dem Identitätsanbieter verwendet werden soll. Diese Angabe ist möglicherweise erforderlich, wenn sich der Cluster beispielsweise in einem privaten Netzwerk befindet und eine Verbindung zu einem öffentlichen Identitätsanbieter hergestellt werden muss. Beispiel: http://user:password@10.10.10.10:8888. |
String |
Nachdem Sie Ihre ClientConfig bearbeitet haben, speichern Sie die Datei, um die ClientConfig für Ihren Cluster zu aktualisieren. Bei Syntaxfehlern werden Sie aufgefordert, diese zu beheben und die Datei zu speichern.
Anbieterspezifische Konfigurationen
Dieser Abschnitt enthält Konfigurationsanleitungen für einige beliebte OIDC-Anbieter, einschließlich Beispielkonfigurationen, die Sie kopieren und mit Ihren eigenen Details bearbeiten können.
Microsoft Entra ID
Dies ist die Standardkonfiguration für die Einrichtung eines Clusters für die Authentifizierung mit Microsoft Entra ID. Mit dieser Konfiguration kann der Cluster Informationen zur Nutzer- und Gruppenmitgliedschaft von Microsoft Entra ID abrufen und die rollenbasierte Zugriffssteuerung (RBAC) von Kubernetes basierend auf Gruppen einrichten. Bei dieser Konfiguration können jedoch nur etwa 200 Gruppen pro Nutzer abgerufen werden.
Wenn Sie mehr als 200 Gruppen pro Nutzer abrufen müssen, lesen Sie die Anleitung für Microsoft Entra ID (Erweitert).
# Multiple lines are omitted here.
spec:
authentication:
- name: oidc-entraid
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
extraParams: prompt=consent, access_type=offline
issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
kubectlRedirectURI: http://localhost:PORT/callback
scopes: openid,email,offline_access
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
Ersetzen Sie Folgendes:
- CLIENT_ID: Die Client-ID aus Microsoft Entra ID.
- CLIENT_SECRET: Gemeinsames Secret der OIDC-Clientanwendung und des OIDC-Anbieters.
- TENANT_ID: Die Art des zu authentifizierenden Microsoft Entra ID-Kontos. Unterstützte Werte sind die Mandanten-ID oder der Mandantenname für Konten, die zu einem bestimmten Mandanten gehören. Der Name des Mandanten wird auch als primäre Domain bezeichnet. Weitere Informationen zum Ermitteln dieser Werte finden Sie unter Microsoft Entra-Mandanten-ID und Namen der primären Domain finden.
- PORT: Die Portnummer, die für die von der gcloud CLI verwendete Weiterleitungs-URL ausgewählt und von Ihrem Plattformadministrator bei der Registrierung angegeben wurde.
Microsoft Entra ID (erweitert)
Mit dieser optionalen Konfiguration für Microsoft Entra ID kann der Cluster Nutzer- und Gruppeninformationen mit unbegrenzter Anzahl von Gruppen pro Nutzer über die Microsoft Graph API abrufen.
Informationen zu Plattformen, die diese Konfiguration unterstützen, finden Sie unter Erweiterte Einrichtung für Microsoft Entra ID.
Wenn Sie weniger als 200 Gruppen pro Nutzer abrufen müssen, empfehlen wir die Verwendung der Standardkonfiguration mit einem oidc-Anchor in Ihrer ClientConfig. Weitere Informationen finden Sie in der Anleitung für Microsoft Entra ID.
Alle Felder in der folgenden Beispielkonfiguration sind erforderlich.
# Multiple lines are omitted here.
spec:
authentication:
- name: NAME
proxy: PROXY_URL
azureAD:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
tenant: TENANT_ID
kubectlRedirectURI: http://localhost:PORT/callback
groupFormat: GROUP_FORMAT
userClaim: USER_CLAIM
# Multiple lines are omitted here. Do not modify any pre-filled data.
Ersetzen Sie Folgendes:
- NAME: Der Name, den Sie dieser Konfiguration zuweisen möchten, normalerweise der Name des Identitätsanbieters. Ein Konfigurationsname muss mit einem Buchstaben beginnen, gefolgt von bis zu 39 Kleinbuchstaben, Zahlen oder Bindestrichen. Das letzte Zeichen darf kein Bindestrich sein.
- PROXY_URL: Proxyserver-Adresse, die gegebenenfalls zum Herstellen einer Verbindung mit dem Identitätsanbieter verwendet werden soll. Diese Angabe ist möglicherweise erforderlich, wenn sich der Cluster beispielsweise in einem privaten Netzwerk befindet und eine Verbindung zu einem öffentlichen Identitätsanbieter hergestellt werden muss. Beispiel:
http://user:password@10.10.10.10:8888 - CLIENT_ID: Die Client-ID aus Microsoft Entra ID.
- CLIENT_SECRET: Gemeinsames Secret der OIDC-Clientanwendung und des OIDC-Anbieters.
- TENANT: Die Art des zu authentifizierenden Microsoft Entra-Kontos. Unterstützte Werte sind die Mandanten-ID oder der Mandantenname für Konten, die zu einem bestimmten Mandanten gehören. Der Name des Mandanten wird auch als primäre Domain bezeichnet. Weitere Informationen zum Ermitteln dieser Werte finden Sie unter Microsoft Entra-Mandanten-ID und Namen der primären Domain finden.
- PORT: Die Portnummer, die für die von der gcloud CLI verwendete Weiterleitungs-URL ausgewählt und von Ihrem Plattformadministrator bei der Registrierung angegeben wurde.
- GROUP_FORMAT: das Format, in dem Sie Gruppeninformationen abrufen möchten. Dieses Feld kann Werte haben, die der
IDoder demNAMEder Nutzergruppen entsprechen. Beachten Sie, dass diese Einstellung nur für Cluster in Bare-Metal-Bereitstellungen von Google Distributed Cloud verfügbar ist. - USER_CLAIM (Optional): Die JWT-Anforderung (Feldname), die Ihr Anbieter zur Identifizierung eines Kontos verwendet. Wenn Sie hier keinen Wert angeben, verwendet der Cluster einen Wert in der Reihenfolge „email“, „preferred_username“ oder „sub“, um die Nutzerdetails abzurufen. Dieses Attribut kann ab Version 1.28 verwendet werden.
Okta
Im Folgenden wird gezeigt, wie Sie die Authentifizierung mithilfe von Nutzern und Gruppen mit Okta als Identitätsanbieter einrichten. Mit dieser Konfiguration kann der Cluster Nutzer- und Gruppenanforderungen mithilfe eines Zugriffstokens und des userinfo-Endpunkts von Okta abrufen.
# Multiple lines are omitted here.
spec:
authentication:
- name: okta
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
enableAccessToken: true
extraParams: prompt=consent
groupsClaim: groups
issuerURI: https://OKTA_ISSUER_URI/
kubectlRedirectURI: http://localhost:PORT/callback
scopes: offline_access,email,profile,groups
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
Einschränkungen für den Gruppenzugriff
Bei Okta-Nutzern kann der Cluster Gruppeninformationen für Nutzer abrufen, deren Gruppennamen zusammengenommen (verkettet) eine Länge von weniger als 170.000 Zeichen haben. In Anbetracht der maximalen Gruppenlänge in Okta entspricht dies einer Mitgliedschaft in etwa 650 Gruppen. Wenn der Nutzer Mitglied in zu vielen Gruppen ist, schlägt der Authentifizierungsaufruf fehl.
Nächste Schritte
Nachdem die Konfiguration angewendet wurde, richten Sie den Nutzerzugriff auf Cluster ein.