Auf dieser Seite wird beschrieben, wie Sie die Authentifizierung bei Google Kubernetes Engine-Clustern (GKE) über externe Identitätsanbieter (IdPs) konfigurieren.
Diese Seite richtet sich an Plattformadministratoren und ‑bediener sowie an Identitäts- und Kontoadministratoren, die einen externen IdP verwenden, der OpenID Connect (OIDC) oder SAML 2.0 (Security Assertion Markup Language) unterstützt.
Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Authentifizierungs- und OpenID-Konzepten vertraut:
Authentifizierungsmethoden für externe IdPs in GKE
Empfohlen: Mitarbeiteridentitätsföderation
Die Workforce Identity-Föderation ist ein IAM-Feature, mit dem Sie sich bei Google Cloud über einen beliebigen externen IdP authentifizieren können, der OIDC oder SAML 2.0 unterstützt. Für die Mitarbeiteridentitätsföderation ist keine Installation im Cluster erforderlich. Sie funktioniert mit Autopilot- und Standardclustern und ist in Google Cloudintegriert. Weitere Informationen finden Sie in der IAM-Dokumentation zur Workforce Identity-Föderation.
Nicht empfohlen: Identity Service for GKE
Nur in GKE Standard-Clustern unterstützt GKE auch Identity Service for GKE. Identity Service for GKE ist auf OIDC-IdPs beschränkt und installiert zusätzliche Komponenten in Ihrem Cluster. GKE empfiehlt dringend, die Workforce Identity-Föderation anstelle von Identity Service for GKE zu verwenden.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Hinweise
Monitorlose Systeme werden sowohl bei der Workforce Identity-Föderation als auch beim Identity Service für GKE nicht unterstützt. Bei einem browserbasierten Authentifizierungsvorgang werden Sie zur Zustimmung aufgefordert, um dann Ihr Nutzerkonto zu autorisieren.
Workforce Identity Federation in GKE verwenden
So verwenden Sie die Workforce Identity-Föderation in Ihren GKE-Clustern:
- Richten Sie die Mitarbeiteridentitätsföderation für Ihre Organisation und Ihren externen IdP ein. Eine Anleitung finden Sie unter Workforce Identity-Föderation konfigurieren.
- Richten Sie den Zugriff von Ihrem externen IdP auf die Google Cloud Workforce Identity-Föderation-Konsole ein. Weitere Informationen finden Sie unter Nutzerzugriff auf die Console (föderiert) einrichten.
Konfigurieren Sie den Nutzerzugriff mit einem der folgenden Autorisierungsmechanismen:
Bitten Sie Ihre Nutzer, die folgenden Schritte auszuführen, um auf Cluster zuzugreifen:
- Mit der föderierten Identität in der gcloud CLI anmelden
- Konfigurieren Sie „kubectl“ für die Authentifizierung bei einem bestimmten Cluster, indem Sie
gcloud container clusters get-credentials
ausführen.
Nutzerzugriff auf Cluster mit RBAC konfigurieren
Google Cloud verwendet Hauptkonto-IDs, um Nutzer in Ihren Workforce Identity-Pools zu identifizieren. Sie können in Ihren Kubernetes-RBAC-Richtlinien oder in IAM-Richtlinien auf diese Hauptkonto-IDs verweisen. Sie können einzelnen Nutzern oder Nutzergruppen Berechtigungen erteilen, wie in den folgenden Beispielen:
Identität | Hauptkonto-ID |
---|---|
Einzelner Nutzer | principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/subject/SUBJECT_ATTRIBUTE_VALUE Ersetzen Sie Folgendes:
Beispiel: principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com |
Alle Nutzer in einer Gruppe | principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/group/GROUP_NAME Ersetzen Sie Folgendes:
Beispiel: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre |
Informationen zu jeder Hauptkonto-ID, die von der Mitarbeiteridentitätsföderation unterstützt wird, finden Sie unter Workforce-Pool-Nutzer in IAM-Richtlinien darstellen.
Im folgenden Beispiel wird gezeigt, wie Sie allen Entitäten im Workforce-Pool full-time-employees
, die das Attribut access_level="sensitive"
in ihrem IdP-Token haben, clusterweiten schreibgeschützten Zugriff auf Secrets gewähren.
Speichern Sie das folgende ClusterRole-Manifest als
secret-viewer-cluster-role.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]
Jedes Hauptkonto, an das Sie diese ClusterRole binden, kann Secrets ansehen.
Speichern Sie das folgende ClusterRoleBinding-Manifest als
secret-viewer-cluster-role-binding.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: users-view-secrets subjects: - kind: Group name: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/attribute.access_level/sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Diese ClusterRoleBinding gewährt die
secret-viewer
-ClusterRole jedem Nutzer mit dem Attributaccess_level="sensitive"
.Stellen Sie die ClusterRole und die ClusterRoleBinding bereit:
kubectl apply -f secret-viewer-cluster-role.yaml kubectl apply -f secret-viewer-cluster-role-binding.yaml
Beim Cluster anmelden und authentifizieren
- Lassen Sie den Nutzer sich über die Google Cloud CLI für Google Cloudanmelden.
Der Nutzer kann kubectl so konfigurieren, dass die Authentifizierung beim Cluster mit den folgenden Methoden erfolgt:
gcloud container clusters get-credentials
Identity Service for GKE-Cluster zu Workforce Identity Federation migrieren
Wenn Sie Identity Service for GKE in vorhandenen GKE-Clustern verwenden, migrieren Sie zur Workforce Identity-Föderation. Bei diesen Methoden wird mit unterschiedlicher Syntax auf dieselben Prinzipien verwiesen, wie in der folgenden Tabelle dargestellt:
Identity Service for GKE-Syntax | Syntax für die Mitarbeiteridentitätsföderation |
---|---|
amal@example.com |
principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com
|
sre-group |
principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre-group
|
So migrieren Sie einen Cluster zur Verwendung der Mitarbeiteridentitätsföderation:
Richten Sie die Mitarbeiteridentitätsföderation für Ihre Organisation und Ihren externen IdP ein. Eine Anleitung finden Sie unter Workforce Identity-Föderation konfigurieren.
Aktualisieren Sie die Manifeste für alle RoleBindings und ClusterRoleBindings in Ihren Clustern, damit die Syntax für Workforce Identity-Föderations-IDs verwendet wird. Verwenden Sie eine der folgenden Optionen:
Programmatische Updates: Installieren und Ausführen des Dienstprogramms
gke-identity-service-migrator
. Eine Anleitung finden Sie in der README-Datei desGoogleCloudPlatform/gke-utilities
-Repositorys.Mit diesem Dienstprogramm werden vorhandene RBAC-Bindungen mit der Syntax von Identity Service for GKE gesucht und neue Manifeste mit den entsprechenden Prinzipal-IDs der Workforce Identity-Föderation erstellt.
Manuelle Aktualisierungen: Erstellen Sie für jede Bindung, die auf einen authentifizierten Nutzer oder eine authentifizierte Gruppe verweist, eine separate Kopie der Manifestdatei des Objekts, in der die Kennungssyntax der Workforce Identity Federation verwendet wird.
Wenden Sie die aktualisierten Manifeste für RoleBindings und ClusterRoleBindings auf Ihren Cluster an.
Testen Sie, ob Nutzer auf dieselben Ressourcen zugreifen können, wenn sie sich mit der Mitarbeiteridentitätsföderation authentifizieren.
Entfernen Sie die veralteten RBAC-Bindungen aus Ihrem Cluster.
Identity Service for GKE verwenden
Zum Einrichten und Verwenden von Identity Service for GKE in Ihrem GKE-Cluster im Standardmodus tun Clusteradministratoren folgendes:
- Identity Service for GKE in einem Cluster konfigurieren.
- Identity Service for GKE konfigurieren.
- RBAC-Richtlinie für Ihren Cluster erstellen.
Nachdem Clusteradministratoren Identity Service for GKE konfiguriert haben, können sich Entwickler im Cluster anmelden und sich authentifizieren.
Von Identity Service for GKE erstellte Kubernetes-Objekte
In folgender Tabelle werden die Kubernetes-Objekte beschrieben, die beim Aktivieren von Identity Service for GKE für einen Cluster erstellt werden:
Kubernetes-Objekte | |
---|---|
anthos-identity-service |
Namespace Wird für den Identity Service for GKE-Bereitstellungen verwendet. |
kube-public |
Namespace Wird für die default -konfigurationsdatei des Clients verwendet. |
gke-oidc-envoy |
LoadBalancer Der Endpunkt für OIDC-Anfragen. Standardmäßig extern. Wenn der Endpunkt in einem Cluster ohne externen IP-Endpunkt erstellt wird, liegt er intern in der Virtual Private Cloud des Clusters. Wird im Namespace anthos-identity-service erstellt. |
gke-oidc-service |
ClusterIP Ermöglicht die Kommunikation zwischen dem gke-oidc-envoy -Bereitstellung und der gke-oidc-service -Bereitstellung.Wird im Namespace anthos-identity-service erstellt. |
gke-oidc-envoy |
Deployment Führt einen Proxy aus, der für den Load-Balancer gke-oidc-envoy freigegeben ist. Kommuniziert mit gke-oidc-service , um Identitätstokens zu validieren. Fungiert als Proxy für den Kubernetes API-Server und übernimmt die Identität von Nutzern, wenn Anfragen an den API-Server übergeben werden.Wird im Namespace anthos-identity-service erstellt. |
gke-oidc-service |
Deployment Validiert Identitätstokens und bietet einen validierenden Zulassungs-Webhook für ClientConfig -Ressourcen.Wird im Namespace anthos-identity-service erstellt. |
gke-oidc-operator |
Deployment Vergleicht die Clientkonfiguration und den Load-Balancer gke-oidc-envoy . Wird im Namespace anthos-identity-service erstellt. |
gke-oidc-certs |
Secret Enthält die Cluster-Zertifizierungsstelle (CA) und TLS-Zertifikate für den LoadBalancer. Wird im Namespace anthos-identity-service erstellt. |
default |
ClientConfig CRD Enthält OIDC-Parameter wie bevorzugte Authentifizierungsmethode, Identitätsanbieterkonfiguration sowie Nutzer- und Gruppenanforderungenzuordnungen. Wird zur Validierung von Identitätstokens verwendet. Wird von Clusteradministratoren verwendet, um OIDC-Einstellungen zu konfigurieren, bevor sie an Entwickler verteilt werden. Wird im Namespace kube-public erstellt. |
Identity Service for GKE in einem Cluster aktivieren
Standardmäßig ist Identity and Access Management (IAM) als Identitätsanbieter für die Clusterauthentifizierung konfiguriert. Wenn Sie OIDC mit externen Identitätsanbietern verwenden möchten, können Sie Identity Service for GKE über die Google Cloud-Befehlszeile auf neuen oder vorhandenen Clustern aktivieren.
Identity Service for GKE für einen neuen Cluster aktivieren
Führen Sie folgenden Befehl aus, um einen Cluster mit aktiviertem Identity Service for GKE zu erstellen:
gcloud container clusters create CLUSTER_NAME \
--enable-identity-service
Ersetzen Sie dabei CLUSTER_NAME
durch den Namen des neuen Clusters.
Identity Service for GKE auf einem vorhandenen Cluster aktivieren
Führen Sie folgenden Befehl aus, um Identity Service for GKE auf einem vorhandenen Cluster zu aktivieren:
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
Ersetzen Sie CLUSTER_NAME
durch den Namen Ihres Clusters.
Identity Service for GKE konfigurieren
Um Identity Service for GKE-Parameter zu konfigurieren, laden Sie die ClientConfig default
herunter und bearbeiten sie.
Laden Sie die
default
-ClientConfig herunter:kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
Aktualisieren Sie den
spec.authentication
-Abschnitt mit Ihren bevorzugten Einstellungen:apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: name: cluster-name server: https://192.168.0.1:6443 authentication: - name: oidc oidc: clientID: CLIENT_ID certificateAuthorityData: OIDC_PROVIDER_CERTIFICATE extraParams: EXTRA_PARAMS issuerURI: ISSUER_URI cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc kubectlRedirectURI: KUBECTL_REDIRECT_URL scopes: SCOPES userClaim: USER groupsClaim: GROUPS userPrefix: USER_PREFIX groupPrefix: GROUP_PREFIX
Ersetzen Sie Folgendes:
CLIENT_ID
durch die ID der Clientanwendung, die Authentifizierungsanfragen an den OIDC-Anbieter sendet.OIDC_PROVIDER_CERTIFICATE
: (Optional) Ein PEM-Zertifikat für den OIDC-Anbieter. Dieses Feld kann hilfreich sein, wenn Ihr OIDC-Anbieter selbstsignierte Zertifikate verwendet. Identity Service for GKE enthält standardmäßig eine Reihe öffentlicher Roots.EXTRA_PARAMS
: Zusätzliche Schlüssel/Wert-Parameter, die an den OIDC-Anbieter gesendet werden.- Verwenden Sie
resource=token-groups-claim
zum Autorisieren von Gruppen. - Verwenden Sie
prompt=consent
zur Authentifizierung von Microsoft Azure und Okta. - Verwenden Sie
prompt=consent,access_type=offline
für Cloud Identity.
- Verwenden Sie
ISSUER_URI
: Die URL, an die OIDC-Autorisierungsanfragen gesendet werden, z. B.https://example.com/adfs
. Der Kubernetes API-Server nutzt diese URL, um öffentliche Schlüssel zum Verifizieren von Tokens zu ermitteln. Für den URI muss HTTPS verwendet werden. Verwenden Siehttps://accounts.google.com
für Cloud Identity.KUBECTL_REDIRECT_URL
: Die Weiterleitungs-URL, diekubectl oidc login
für die Autorisierung verwendet. Sie hat in der Regel das Formathttp://localhost:PORT/callback
, wobeiPORT
ein beliebiger Port über1024
ist, der auf Entwickler-Workstations verfügbar ist, wie z. B.http://localhost:10000/callback
. Sie müssen die URL bei Ihrem OIDC-Anbieter als autorisierte Weiterleitungs-URL für die Clientanwendung registrieren. Wenn Sie Google Identity als OIDC-Anbieter verwenden, folgen Sie der Anleitung unter Weiterleitungs-URI festlegen.SCOPES
: Zusätzliche Bereiche, die an den OIDC-Anbieter gesendet werden.- Microsoft Azure und Okta benötigen den Bereich
offline_access
. - Verwenden Sie für Cloud Identity
openid, email
, um ID-Tokens abzurufen, die die E-Mail-Adresse im Anforderungemail
enthalten.
- Microsoft Azure und Okta benötigen den Bereich
USER
: Die Nutzeranforderung aus dem Identitätstoken.GROUPS
: Die Gruppenanforderung aus dem Identitätstoken.USER_PREFIX
: Das Präfix, das Gruppenanforderungen vorangestellt wird, um Konflikte mit vorhandenen Namen zu vermeiden. Standardmäßig wird ein Ausstellerpräfix anuserID
angehängt, der dem Kubernetes API-Server zugewiesen ist (es sei denn, der Nutzeranspruch istemail
). Die resultierende Nutzer-ID lautetISSUER_URI#USER
. Wir empfehlen die Verwendung eines Präfixes. Wenn Sie das Präfix deaktivieren wollen, setzen SieUSER_PREFIX
auf-
.GROUP_PREFIX
: Das Präfix, das Gruppenanforderungen vorangestellt wird, um Konflikte mit vorhandenen Namen zu vermeiden. Wenn Sie beispielsweise zwei Gruppen mit dem Namenfoobar
haben, fügen Sie das Präfixgid-
hinzu. Die resultierende Gruppe istgid-foobar
.
Wenden Sie die aktualisierte Konfiguration an:
kubectl apply -f client-config.yaml
Nachdem Sie diese Konfiguration angewendet haben, wird Identity Service for GKE in Ihrem Cluster ausgeführt und verarbeitet Anfragen hinter dem Load-Balancer
gke-oidc-envoy
. Die IP-Adresse im Feldspec.server
muss die IP-Adresse des Load-Balancers sein. Wenn Sie das Feldspec.server
ändern, schlagenkubectl
-Befehle möglicherweise fehl.Erstellen Sie eine Kopie der Konfigurationsdatei
client-config.yaml
:cp client-config.yaml login-config.yaml
Aktualisieren Sie die Konfigurationsdatei
login-config.yaml
mit der EinstellungclientSecret
im Abschnittspec.authentication.oidc
.clientSecret: CLIENT_SECRET
Ersetzen Sie
CLIENT_SECRET
durch das gemeinsame Secret zwischen der OIDC-Clientanwendung und dem OIDC-Anbieter.Verteilen Sie die aktualisierte Datei
login-config.yaml
an Ihre Entwickler.
Identity Service for GKE auf Clustern mit strengen Richtlinien konfigurieren
So konfigurieren Sie Identity Service for GKE für Cluster, die strenge Netzwerkrichtlinien haben:
- Fügen Sie eine Firewallregel für den TCP-Port
15000
hinzu, damit die Steuerungsebene mit demClientConfig
-Validierungs-Webhook kommunizieren kann. - Wenn die
gke-oidc-envoy
als interner Load-Balancer erstellt wird, stellen Sie sie in Ihrer VPC bereit. - Wenn Richtlinien in Ihrem Cluster abgelehnt werden, fügen Sie eine Firewallregel für den TCP-Port
8443
hinzu, damit die Bereitstellunggke-oidc-envoy
mit der Bereitstellunggke-oidc-service
kommunizieren kann.
Die Komponente "Identity Service for GKE" Version 0.2.20 und höher verwendet den TCP-Port 15000
nicht. Wenn Ihre Version der Komponente 0.2.20 oder höher ist, müssen Sie keine Firewallregel für Port 15000
hinzufügen. Führen Sie folgenden Befehl aus, um die Version der Komponente zu prüfen:
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
Benutzerdefinierte Attribute zum Load-Balancer hinzufügen
Nachdem Sie Identity Service for GKE konfiguriert haben, können Sie dem gke-oidc-envoy
-Load-Balancer benutzerdefinierte Annotationen und Attribute, z. B. eine statische IP-Adresse, hinzufügen. Führen Sie zum Bearbeiten des gke-oidc-envoy
-Dienstes den folgenden Befehl aus:
kubectl edit service gke-oidc-envoy -n anthos-identity-service
Weitere Informationen zum Konfigurieren von TCP/UDP-Load-Balancing für GKE finden Sie unter LoadBalancer-Dienstparameter.
RBAC-Richtlinie für Ihren Cluster erstellen
Administratoren können mit der rollenbasierten Zugriffssteuerung (Role-based Access Control, RBAC) von Kubernetes authentifizierten Clusternutzern Zugriff gewähren. Zur Konfiguration von RBAC für Ihren Cluster müssen Sie jedem Entwickler RBAC-Rollen zuweisen. Wenn Sie Zugriff auf Ressourcen in einem bestimmten Namespace gewähren möchten, erstellen Sie eine Role und eine RoleBinding. Wenn Sie Zugriff auf Ressourcen auf einem gesamten Cluster gewähren möchten, erstellen Sie eine ClusterRole und eine ClusterRoleBinding.
Angenommen, ein Nutzer muss alle Secret-Objekte im gesamten Cluster anzeigen. Durch die folgenden Schritte werden diesem Nutzer die erforderlichen RBAC-Rollen zugewiesen.
Speichern Sie das folgende ClusterRole-Manifest als
secret-viewer-cluster-role.yaml
. Eine Person, der diese Rolle zugewiesen wurde, kann beliebige Secrets im Cluster abrufen, beobachten und auflisten.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Wenden Sie das ClusterRole-Manifest an:
kubectl apply -f secret-viewer-cluster-role.yaml
Speichern Sie das folgende ClusterRoleBinding-Manifest als
secret-viewer-cluster-role-binding.yaml
. Durch die Bindung wird einem in der Clientkonfigurationsdatei definierten Nutzernamen die Rollesecret-viewer
zugewiesen.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: ISSUER_URI#USER apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Ersetzen Sie Folgendes:
ISSUER_URI
durch die Aussteller-URI ausspec.authentication.oidc.issuerURI
in der Client-Konfigurationsdatei.USER
durch die Nutzerkennung im Token unter dem Anforderungsnamen, der inspec.authentication.oidc.userClaim
in der Client-Konfigurationsdatei konfiguriert ist.
Wenden Sie das ClusterRoleBinding-Manifest an:
kubectl apply -f secret-viewer-cluster-role-binding.yaml
Beim Cluster anmelden und authentifizieren
Als Entwickler, der die OIDC-Konfigurationsdatei von Ihrem Administrator erhält, können Sie sich bei Ihren Clustern authentifizieren.
Laden Sie die vom Administrator bereitgestellte Datei
login-config.yaml
herunter.Installieren Sie das Google Cloud CLI-SDK, das eine separate OIDC-Komponente bietet. Zur Installation führen Sie folgenden Befehl aus:
gcloud components install kubectl-oidc
Authentifizieren Sie sich bei Ihrem Cluster:
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
Ein Webbrowser wird geöffnet, um den Authentifizierungsvorgang abzuschließen.
Nach der Authentifizierung können Sie
kubectl
-Befehle ausführen, zum Beispiel:kubectl get pods
Identity Service for GKE deaktivieren
Sie können Identity Service for GKE mit der gcloud CLI deaktivieren. Führen Sie zum Deaktivieren von Identity Service for GKE folgenden Befehl aus:
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
Nächste Schritte
- Weitere Informationen zur Workforce Identity-Föderation
- Weitere Informationen zum Bereitstellen von Arbeitslasten