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:

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 sich über die Google Cloud Console verbundene Cluster ansehen 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 enthalten, um über die Console darauf zuzugreifen:

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:

  1. Erstellen Sie die KSA- und ClusterRoleBinding-Ressourcen, um die Kubernetes-RBAC-ClusterRoles view und cloud-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ählen
    • VIEW_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 benennen
    • CLOUD_CONSOLE_READER_BINDING_NAME: Der Name, den Sie für die Ressource cloud-console-reader ClusterRoleBinding auswählen; auch für diese können Sie einen beliebigen Namen verwenden
  2. 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:

  1. 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-Dienstkonto
    • VIEW_BINDING_NAME: Der Name, den Sie für die Ressource view 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 benennen
    • CLOUD_CONSOLE_READER_BINDING_NAME: Der Name, den Sie für die Ressource view ClusterRoleBinding auswählen; auch für diese können Sie einen beliebigen Namen verwenden
  2. 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.