Mit einem Inhabertoken authentifizieren
Auf dieser Seite wird erläutert, wie Sie die Authentifizierung mit einem Inhabertoken einrichten, um sich bei registrierten Clustern außerhalb von Google Cloud anzumelden. Nach der Einrichtung können sich Clusteradministratoren über die Google Cloud Console bei Clustern anmelden. Viele Arten von Inhabertokens, die unter Kubernetes-Authentifizierung aufgelistet sind, werden unterstützt. Die einfachste Methode ist das Erstellen eines Kubernetes-Dienstkontos (KSA) im Cluster und das Anmelden mit seinem Inhabertoken.
Andere Authentifizierungsmethoden
Als Alternative zum Einrichten der Authentifizierung mit einem Inhabertoken können Sie je nach den Anforderungen Ihrer Organisation eine der folgenden Authentifizierungsmethoden einrichten:
Google Identity: Nutzer können sich mit ihrer Google Cloud Identity anmelden. Verwenden Sie diese Option, wenn Ihre Nutzer bereits Zugriff auf Google Cloud mit einer Google-Identität haben.
Wenn Ihr Cluster für die Verwendung eines OIDC-Identitätsanbieters konfiguriert ist, können Sie diese zur Authentifizierung beim Cluster über die Google Cloud Console verwenden. In den folgenden Anleitungen erfahren Sie, wie Sie OIDC für GKE-Cluster einrichten:
- Cluster für GKE Identity Service mit OIDC konfigurieren In dieser Anleitung wird gezeigt, wie Sie die OIDC-Authentifizierung auf Clusterbasis für alle GKE-Clustertypen einrichten.
- GKE Identity Service für eine Flotte einrichten Mit dieser Option können Sie OIDC auf Flottenebene für unterstützte Clustertypen einrichten. Die Einrichtung auf Flottenebene wird für GKE-Cluster in Google Cloud, alle GKE-Clustertypen und mit EKS angehängten Clustern in AWS unterstützt.
Wenn diese von Google bereitgestellten Authentifizierungsmethoden für Ihre Organisation nicht geeignet sind, folgen Sie der Anleitung auf dieser Seite, um die Authentifizierung mit einem Inhabertoken einzurichten.
IAM-Rollen für den Zugriff über die Google Cloud Console gewähren
Nutzer, die verbundene Cluster mithilfe der Google Cloud Console aufrufen möchten, benötigen mindestens die folgenden IAM-Rollen:
roles/container.viewer
: Mit dieser Rolle können Nutzer Containerressourcen in der Google Cloud Console aufrufen, einschließlich der GKE-Clusterseite. Weitere Informationen zu den Berechtigungen, die in dieser Rolle enthalten sind, finden Sie in der IAM-Dokumentation unter Kubernetes Engine-Rollen.roles/gkehub.viewer
: Mit dieser Rolle können Nutzer die Cluster außerhalb von Google Cloud in der Google Cloud Console aufrufen. Nutzer benötigen diese Rolle nicht, wenn Ihre Flotte keine Cluster außerhalb von Google Cloud enthält. Weitere Informationen zu den Berechtigungen, die in dieser Rolle enthalten sind, finden Sie in der IAM-Dokumentation unter GKE-Hub-Rollen.
Führen Sie die folgenden Befehle aus, um diese Rollen zuzuweisen:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID des Hostprojekts der Flotte.EMAIL_ADDRESS
: die E-Mail-Adresse, die mit dem Google Cloud-Konto des Nutzers verknüpft ist.
Weitere Informationen zum Zuweisen von IAM-Rollen finden Sie in der IAM-Dokumentation unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Rollenbasierte Zugriffssteuerung konfigurieren
Der Zugriff auf Cluster wird mithilfe der rollenbasierten Zugriffssteuerung (RBAC) von Kubernetes gesteuert.
Wir empfehlen, dass Sie oder ein Clusteradministrator für jeden Nutzer, der sich im Cluster anmeldet, ein KSA erstellen. Die Verwendung eines Inhabertokens ist mit der Verwendung eines Passworts vergleichbar, sodass jeder Nutzer sein eigenes Konto haben sollte. Wenn Sie sich mit dem Inhabertoken des KSA anmelden, werden alle Vorgänge im Namen des KSA ausgeführt und sind durch die Berechtigungen der Rollen eingeschränkt, die dem KSA erteilt wurden.
Das KSA muss mindestens die folgenden RBAC-Rollen im Cluster haben, um über die Console darauf zugreifen zu können:
RBAC-Rolle cloud-console-reader
erstellen und anwenden
Authentifizierte Nutzer, die in der Google Cloud Console auf die Ressourcen eines Clusters zugreifen möchten, benötigen dafür die entsprechenden Kubernetes-Berechtigungen. Wenn Sie diesen Nutzern keine umfassenderen Berechtigungen gewähren möchten, z. B. die eines Clusteradministrators, können Sie eine benutzerdefinierte RBAC-Rolle erstellen, die die Mindestberechtigungen zum Aufrufen der Knoten, nichtflüchtigen Volumes, Pods und Speicherklassen des Clusters enthält. Um diese Berechtigungen zu definieren, erstellen Sie im Cluster eine ClusterRole
-RBAC-Ressource, cloud-console-reader
.
cloud-console-reader
gewährt den Nutzern der Ressource die Berechtigungen get
, list
und watch
für die Knoten, nichtflüchtigen Volumes, Pods und Speicherklassen des Clusters, die das Aufrufen von Details zu diesen Ressourcen ermöglichen.
kubectl
Führen Sie den folgenden Befehl aus, um die ClusterRole
-cloud-console-reader
zu erstellen und auf den Cluster anzuwenden:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Sie können diese Rolle dann KSAs zuweisen, wie im nächsten Abschnitt beschrieben.
KSA erstellen und autorisieren
kubectl
So erstellen Sie ein KSA und binden Berechtigungen daran:
Erstellen Sie die KSA- und
ClusterRoleBinding
-Ressourcen, um die Kubernetes-RBAC-ClusterRoles
view
undcloud-console-reader
an das KSA zu binden.KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Dabei gilt:
KSA_NAME
: Der Name, den Sie für das KSA auswählenVIEW_BINDING_NAME
: Der Name, den Sie für die Ressourceview
ClusterRoleBinding
auswählen; Sie können ihr einen beliebigen Namen geben, aber möglicherweise ist es am einfachsten, sie nach dem KSA zu benennenCLOUD_CONSOLE_READER_BINDING_NAME
: Der Name, den Sie für die Ressourcecloud-console-reader
ClusterRoleBinding
auswählen; auch für diese können Sie einen beliebigen Namen verwenden
Je nach dem Zugriff auf das Dienstkonto sollten Sie weitere Rollen an das KSA binden. Optionen finden Sie unter Kubernetes-Standardrollen.
Wenn Sie beispielsweise eine Kubernetes-Anwendung aus Cloud Marketplace bereitstellen möchten, binden Sie die Rolle
cluster-admin
an das KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Ersetzen Sie
BINDING_NAME
durch den Namen der Clusterrollenbindung für das Dienstkonto.
Andere Konten autorisieren
kubectl
Für alle anderen Nutzer oder Dienstkonten, die Zugriff auf den Cluster erhalten, erstellen Sie ClusterRoleBinding
-Ressourcen, um die Rollen view
und cloud-console-reader
an ihr Konto zu binden:
Binden Sie die
ClusterRoles
view
undcloud-console-reader
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Dabei gilt:
ACCOUNT_NAME
: Das Kubernetes-DienstkontoVIEW_BINDING_NAME
: Der Name, den Sie für die Ressourceview
ClusterRoleBinding
auswählen; Sie können ihr einen beliebigen Namen geben, aber möglicherweise ist es am einfachsten, sie nach dem Nutzer oder Dienstkonto zu benennenCLOUD_CONSOLE_READER_BINDING_NAME
: Der Name, den Sie für die Ressourceview
ClusterRoleBinding
auswählen; auch für diese können Sie einen beliebigen Namen verwenden
Binden Sie zusätzliche Rollen, je nach dem, welchen Zugriff das Konto haben soll. Optionen finden Sie unter Kubernetes-Standardrollen.
Führen Sie beispielsweise den folgenden Befehl aus, um die Rolle
cluster-admin
zu binden:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Ersetzen Sie
BINDING_NAME
durch den Namen der Clusterrollenbindung für das Dienstkonto.
Inhabertoken des KSA abrufen
kubectl
Mit dem folgenden Befehl erhalten Sie das Inhabertoken des KSA:
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Ersetzen Sie KSA_NAME
durch den Namen, den Sie für das KSA ausgewählt haben.
Kopieren Sie das Token aus der Ausgabe dieses Befehls und speichern Sie es, damit sich Nutzer mit dem Token in der Google Cloud Console anmelden können.