Workload Identity-Clusterauthentifizierung

In diesem Dokument wird beschrieben, wie Sie die Clusterauthentifizierung mit Workload Identity für Google Distributed Cloud (nur Software) auf Bare Metal einrichten und verwenden. Anstelle von Dienstkontoschlüsseln werden bei der Workload Identity-Clusterauthentifizierung kurzlebige Tokens und die Workload Identity-Föderation verwendet, um Ihre Cluster zu erstellen und zu schützen. Die kurzlebigen Anmeldedaten für das Dienstkonto liegen in Form von OAuth 2.0-Zugriffstokens vor. Die Zugriffstokens laufen standardmäßig nach einer Stunde ab, mit Ausnahme von Image-Pull-Tokens, die nach 12 Stunden ablaufen.

Die Clusterauthentifizierung mit Workload Identity ist nur beim Erstellen neuer Cluster mit Version 1.30 und höher verfügbar. Sie können einen vorhandenen Cluster während eines Updates oder Upgrades nicht für die Verwendung der Workload Identity-Clusterauthentifizierung konfigurieren.

Im Schlüsselmodus, der Standardmethode zum Erstellen und Sichern von Clustern, werden dagegen heruntergeladene Dienstkontoschlüssel verwendet. Wenn Sie einen selbstverwalteten (Administrator-, Hybrid- oder Standalone-)Cluster erstellen, geben Sie den Pfad zu den heruntergeladenen Schlüsseln an. Die Schlüssel werden dann als Secrets im Cluster und in allen verwalteten Nutzerclustern gespeichert. Standardmäßig laufen Dienstkontoschlüssel nicht ab und stellen ein Sicherheitsrisiko dar, wenn sie nicht ordnungsgemäß verwaltet werden.

Die Clusterauthentifizierung mit Workload Identity bietet zwei Hauptvorteile gegenüber der Verwendung von Dienstkontoschlüsseln:

  • Verbesserte Sicherheit: Dienstkontoschlüssel stellen ein Sicherheitsrisiko dar, wenn sie nicht ordnungsgemäß verwaltet werden. OAuth 2.0-Tokens und die Workload Identity-Föderation gelten als Best-Practice-Alternativen zu Dienstkontoschlüsseln. Weitere Informationen zu Dienstkonto-Tokens finden Sie unter Kurzlebige Anmeldedaten für das Dienstkonto. Weitere Informationen zur Workload Identity-Föderation finden Sie unter Workload Identity-Föderation.

  • Weniger Wartung: Dienstkontoschlüssel erfordern mehr Wartung. Das regelmäßige Rotieren und Sichern dieser Schlüssel kann einen erheblichen Verwaltungsaufwand bedeuten.

Da sich diese Funktion im Vorschaumodus befindet, gibt es einige bekannte Einschränkungen.

Hinweise

In den folgenden Abschnitten erstellen Sie Dienstkonten und weisen Rollen zu, die für die Clusterauthentifizierung mit Workload Identity erforderlich sind. Die Einrichtungsanleitung in diesem Dokument ersetzt nicht die Anleitung unter Google Cloud -Ressourcen einrichten. Sie ist zusätzlich zu den standardmäßigen Voraussetzungen für die reine Softwareinstallation von Google Distributed Cloud erforderlich. Die für die Clusterauthentifizierung mit Workload Identity erforderlichen Dienstkonten ähneln den in Google Cloud Ressourcen einrichten beschriebenen Dienstkonten. Sie haben jedoch eindeutige Namen, damit sie nicht mit Clustern in Konflikt geraten, die die Standardschlüssel für Dienstkonten verwenden.

Diese Seite richtet sich an Administratoren, Architekturfachkräfte und Betreiber, die technische Infrastrukturen einrichten, überwachen und verwalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir inGoogle Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.

In der folgenden Tabelle werden die Dienstkonten beschrieben, die für die Clusterauthentifizierung mit Workload Identity erforderlich sind:

Dienstkonto Zweck Rollen
ADMIN_SA Mit diesem Dienstkonto generieren Sie Tokens. Jedes Token hat die Berechtigungen, die mit den Dienstkontorollen verknüpft sind. roles/gkehub.admin
roles/logging.admin
roles/monitoring.admin
roles/monitoring.dashboardEditor
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
baremetal-controller Connect Agent verwendet dieses Dienstkonto, um eine Verbindung zwischen Ihrem Cluster und Google Cloud aufrechtzuerhalten und Ihre Cluster bei einer Flotte zu registrieren. Dieses Dienstkonto aktualisiert auch Tokens für das Dienstkonto baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops Stackdriver Agent verwendet dieses Dienstkonto, um Logs und Messwerte von Clustern nach Cloud Logging und Cloud Monitoring zu exportieren. roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor
roles/monitoring.viewer
roles/serviceusage.serviceUsageViewer
roles/kubernetesmetadata.publisher
baremetal-gcr Google Distributed Cloud verwendet dieses Dienstkonto, um Container-Images aus Artifact Registry herunterzuladen. Keine

Dienstkonten für die Clusterauthentifizierung mit Workload Identity erstellen und konfigurieren

In den folgenden Abschnitten finden Sie eine Anleitung zum Erstellen der erforderlichen Dienstkonten und zum Zuweisen der erforderlichen Rollen für die Workload Identity-Clusterauthentifizierung. Eine Liste der Dienstkonten und ihrer erforderlichen Rollen finden Sie in der Tabelle im vorherigen Abschnitt.

Dienstkonten erstellen

So erstellen Sie die Dienstkonten für die Clusterauthentifizierung mit Workload Identity:

  1. Melden Sie sich auf Ihrer Administrator-Workstation in der Google Cloud CLI an:

    gcloud auth login
    
  2. Optional: Erstellen Sie das administrative Dienstkonto:

    Der Name des ADMIN_SA-Dienstkontos ist beliebig. Sie können auch ein vorhandenes Dienstkonto verwenden, wenn es die in der Tabelle im vorherigen Abschnitt aufgeführten Rollen hat. Das wird jedoch nicht empfohlen, da es gegen das Prinzip der geringsten Berechtigung verstößt.

    gcloud iam service-accounts create ADMIN_SA \
        --project=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID IhresGoogle Cloud -Projekts.

  3. Erstellen Sie die Standarddienstkonten für die Clusterauthentifizierung mit Workload Identity:

    Die Standarddienstkonten für die Clusterauthentifizierung mit Workload Identity haben vordefinierte Namen, die Sie anpassen können.

    gcloud iam service-accounts create baremetal-controller \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-cloud-ops \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID IhresGoogle Cloud -Projekts.

IAM-Richtlinienbindungen für Dienstkonten hinzufügen

  1. Fügen Sie IAM-Richtlinienbindungen für die erforderlichen Rollen für das Dienstkonto ADMIN_SA hinzu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
  2. Fügen Sie IAM-Richtlinienbindungen für die erforderlichen Rollen für das Dienstkonto baremetal-controller hinzu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Fügen Sie IAM-Richtlinienbindungen für die erforderlichen Rollen für das Dienstkonto baremetal-cloud-ops hinzu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
  4. Gewähren Sie dem Dienstkonto baremetal-controller die Berechtigung, Zugriffstokens im Namen des Dienstkontos baremetal-gcr zu generieren:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Workload Identity-Föderation für Ihre Cluster konfigurieren

Um Google Cloud Zugriff über die Identitätsföderation von Arbeitslasten für GKE zu gewähren, erstellen Sie eine IAM-Zulassungsrichtlinie, die einem Hauptkonto, das der Identität Ihrer Anwendung entspricht, Zugriff auf eine bestimmteGoogle Cloud -Ressource gewährt. In diesem Fall gewährt die Workload Identity-Föderation Zugriff auf bestimmte Operatoren im Cluster. Weitere Informationen zur Identitätsföderation von Arbeitslasten für GKE finden Sie in der IAM-Dokumentation unter Identitätsföderation von Arbeitslasten.

IAM-Richtlinienbindungen für den Clusteroperator hinzufügen

Mit den folgenden Befehlen wird dem Kubernetes-Dienstkonto anthos-cluster-operator die Möglichkeit eingeräumt, die Identität des Dienstkontos baremetal-controller zu übernehmen und im Namen des Clusters mit Google Cloud -Ressourcen zu interagieren:

  1. Gewähren Sie für jeden Cluster, der für die Clusterauthentifizierung mit Workload Identity konfiguriert ist (oder für den die Clusterauthentifizierung mit Workload Identity geplant ist), einschließlich des Bootstrap-Clusters, anthos-cluster-operator im Cluster die Möglichkeit, das baremetal-controller-Dienstkonto zu imitieren:

    Im folgenden Befehl besteht principalSet aus dem Arbeitslastidentitätspool und einem Kubernetes-Dienstkonto, anthos-cluster-operator, im Namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    Ersetzen Sie Folgendes:

    • PROJECT_NUM: die automatisch generierte eindeutige Kennung für Ihr Projekt.

    • REGION: Der Standort der Flottenmitgliedschaft für Ihren Cluster, der standardmäßig global ist. Weitere Informationen finden Sie unter Standort der Flottenmitgliedschaft.

    • CLUSTER_NAME ist der Name des Clusters. Standardmäßig lautet der Name des Bootstrap-Clusters bmctl-MACHINE_NAME.

  2. Richtlinienbindungen für das Dienstkonto baremetal-controller prüfen:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
    

    Die Antwort sollte in etwa so aussehen:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

IAM-Richtlinienbindungen für die Google Cloud Observability-Operatoren hinzufügen

Mit den folgenden Befehlen wird den folgenden Google Cloud Observability Kubernetes-Dienstkonten die Möglichkeit eingeräumt, die Identität des Dienstkontos baremetal-cloud-ops zu übernehmen und im Namen des Clusters mit Google Cloud -Ressourcen zu interagieren:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. Erteilen Sie für jeden Cluster, der für die Clusterauthentifizierung mit Workload Identity konfiguriert ist (oder für die Clusterauthentifizierung mit Workload Identity verwendet werden soll), einschließlich des Bootstrap-Clusters, den Google Cloud Observability-Operatoren im Cluster die Möglichkeit, das baremetal-cloud-ops-Dienstkonto zu imitieren:

    In jedem der folgenden Befehle besteht principalSet aus dem Arbeitslastidentitätspool und einem Kubernetes-Dienstkonto, z. B. cloud-audit-logging, im Namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. Richtlinienbindungen für das Dienstkonto baremetal-cloud-ops prüfen:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

    Die Antwort sollte in etwa so aussehen:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

Clusterkonfiguration

Der offensichtlichste Unterschied in der Clusterkonfiguration für Cluster, die die Workload Identity-Clusterauthentifizierung verwenden, besteht darin, dass Sie keine Pfade zu heruntergeladenen Dienstkontoschlüsseln angeben.

  1. Wenn Sie die Clustereinstellungen in der Konfigurationsdatei ausfüllen, lassen Sie die Pfade zu den Dienstkontoschlüsseln im Abschnitt „Anmeldedaten“ leer, wie im folgenden Beispiel gezeigt:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: cluster-CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    
  2. Optional können Sie benutzerdefinierte Namen für die Dienstkonten des Workload Identity-Clusterauthentifizierungsdienstes festlegen:

    Wenn Sie benutzerdefinierte Namen angeben, können Sie vorhandene Dienstkonten verwenden. Achten Sie darauf, dass sich die von Ihnen angegebenen benutzerdefinierten Dienstkontonamen voneinander unterscheiden.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: cluster-CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
        ...
    

    Ersetzen Sie Folgendes:

    • CUSTOM_CONTROLLER_GSA: Die E-Mail-Adresse des Dienstkontos, das vom Connect-Agent verwendet wird, um eine Verbindung zwischen Ihrem Cluster und Google Cloudaufrechtzuerhalten und Ihre Cluster zu registrieren.

    • CUSTOM_CLOUD_OPS_GSA: Die E-Mail-Adresse des Dienstkontos, das vom Stackdriver Agent verwendet wird, um Logs und Messwerte von Clustern nach Cloud Logging und Cloud Monitoring zu exportieren.

    • CUSTOM_AR_GSA: Die E-Mail-Adresse des Dienstkontos, das von Google Distributed Cloud zum Herunterladen von Container-Images aus Artifact Registry verwendet wird.

Clustervorgang

Wenn Sie einen Cluster erstellen, aktualisieren oder löschen möchten, der die Clusterauthentifizierung mit Workload Identity verwendet, gehen Sie so vor:

  1. Melden Sie sich in der Google Cloud CLI an:

    gcloud auth login
    
  2. Erstellen Sie auf Ihrer Administrator-Workstation einen Schlüssel für das Dienstkonto ADMIN_SA und laden Sie ihn herunter:

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com
    

    Ersetzen Sie TMP_KEY_FILE_PATH durch den Pfad, einschließlich des Dateinamens, der heruntergeladenen Schlüsseldatei.

  3. Autorisieren Sie den Zugriff auf Google Cloud mit dem Dienstkonto ADMIN_SA:

    gcloud auth activate-service-account ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Löschen Sie die heruntergeladene JSON-Schlüsseldatei:

    rm TMP_KEY_FILE_PATH
    
  5. Erstellen Sie auf Ihrer Administrator-Workstation eine Umgebungsvariable GCP_ACCESS_TOKEN mit dem Wert eines Zugriffstokens, das vom Dienstkonto ADMIN_SA erstellt wurde:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com)
    

    Standardmäßig hat das Zugriffstoken eine Gültigkeitsdauer von 1 Stunde.

  6. Prüfen Sie, ob das Token vom ADMIN_SA-Dienstkonto mit dem richtigen Ablaufdatum generiert wurde:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    Die Antwort sollte Zeilen wie die folgenden enthalten:

    ...
    "expires_in": "3582",
    "email": "ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com)",
    ...
    

    Der Ablaufwert wird in Sekunden angegeben und sollte kleiner als 3600 sein. Das bedeutet, dass das Token in weniger als einer Stunde abläuft.

  7. Führen Sie einen bmctl-Befehl aus, um einen Cluster zu erstellen, zu aktualisieren oder zu löschen:

    Wenn bmctl erkennt, dass die Umgebungsvariable GCP_ACCESS_TOKEN festgelegt wurde, wird die Tokenvalidierung durchgeführt. Wenn das Token gültig ist, verwendet bmctl es für Clusteroperationen.

    Für Cluster, die die Clusterauthentifizierung mit Workload Identity verwenden, muss für die folgenden Befehle die Umgebungsvariable GCP_ACCESS_TOKEN auf ein gültiges, aktives Zugriffstoken gesetzt sein:

    • bmctl create cluster -c CLUSTER_NAME
    • bmctl reset cluster -c CLUSTER_NAME
    • bmctl upgrade cluster -c CLUSTER_NAME

Beschränkungen

Während sich die Workload Identity-Clusterauthentifizierung in der Vorschau befindet, werden die folgenden Funktionen nicht unterstützt:

  • Proxyserver verwenden
  • VPC Service Controls
  • Vorhandene Cluster im Schlüsselmodus für die Verwendung der Workload Identity-Clusterauthentifizierung aktualisieren

Nächste Schritte