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 Clusterauthentifizierung mit Workload Identity kurzlebige Tokens und die Identitätsföderation von Arbeitslasten 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. Auch Image-Pull-Tokens laufen standardmäßig nach einer Stunde ab.

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. Informationen zum Festlegen einer Ablaufzeit für Ihre Dienstkontoschlüssel finden Sie unter Ablaufzeiten für von Nutzern verwaltete Schlüssel.

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.

Die Workload Identity-Clusterauthentifizierung wurde mit Version 1.30 als Vorabversion eingeführt und ist ab Version 1.33 allgemein verfügbar. Die Workload Identity-Clusterauthentifizierung kann nur beim Erstellen neuer Cluster aktiviert werden. Sie können einen vorhandenen Cluster nicht so konfigurieren, dass er während einer Aktualisierung oder eines Upgrades die Clusterauthentifizierung mit Workload Identity verwendet. Weitere Einschränkungen finden Sie unter Einschränkungen.

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-Nutzerrollen und ‑Aufgaben.

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.

Die für die Clusterauthentifizierung mit Workload Identity erforderlichen Dienstkonten unterscheiden sich für die Vorschau und die GA-Angebote, wie in der folgenden Tabelle beschrieben:

1.33 oder höher

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/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr Google Distributed Cloud verwendet dieses Dienstkonto, um Container-Images aus Artifact Registry herunterzuladen. Keine

1.30-1.32

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/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
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. Mit diesem Dienstkonto werden auch Tokens für das Dienstkonto baremetal-gcr aktualisiert. 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/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr Google Distributed Cloud verwendet dieses Dienstkonto, um Container-Images aus Artifact Registry herunterzuladen. Keine

Dienstkonten einrichten

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. Erstellen Sie die erforderlichen Dienstkonten für die Clusterauthentifizierung mit Workload Identity:

    Der Dienstkontoname admin-sa ist beliebig. Sie können den Namen ändern, wenn er in Ihrem Projekt zu einem Konflikt führt. Die anderen Dienstkonten für die Clusterauthentifizierung mit Workload Identity haben vordefinierte Namen, die Sie anpassen können.

    1.33 oder höher

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID IhresGoogle Cloud -Projekts.

    1.30-1.32

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    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.

Identity and Access Management-Richtlinienbindungen für Dienstkonten hinzufügen

Gehen Sie so vor, um die erforderlichen IAM-Richtlinienbindungen auf die neuen Dienstkonten anzuwenden:

1.33 oder höher

  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/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    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/resourcemanager.projectIamAdmin
    

1.30-1.32

  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/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    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
    
  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/kubernetesmetadata.publisher
    
    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/monitoring.viewer
    
    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/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
  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
    

Authentifizierung einrichten

In den folgenden Schritten wird der Authentifizierungsablauf eingerichtet, bei dem ein kurzlebiges Token zur Authentifizierung von Clustervorgängen verwendet wird:

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

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

    Dieser Schlüssel ist erforderlich, um den Zugriff für das Dienstkonto admin-sa zu autorisieren.

    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. Erstellen Sie auf Ihrer Administratorworkstation eine Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS mit dem Wert des heruntergeladenen Dienstkontoschlüssels:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. 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 application-default print-access-token)
    

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

  5. 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:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

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

Identitätsföderation von Arbeitslasten 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.

1.33 oder höher

Bei Clusterversionen, in denen die Clusterauthentifizierung mit Workload Identity allgemein verfügbar ist, verwenden Sie den Befehl bmctl configure projects, um die Identitätsföderation von Arbeitslasten für Ihre Cluster zu konfigurieren. Dieser Befehl ist in die Schritte zum Erstellen eines Administratorclusters und zum Erstellen eines Nutzerclusters integriert.

1.30-1.32

Bei Clusterversionen, in denen die Clusterauthentifizierung mit Workload Identity in der Vorschau ist, müssen Sie die Workload Identity-Föderation für Ihre Cluster manuell konfigurieren, wie in den folgenden Abschnitten beschrieben.

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
    

Administratorcluster erstellen

Die Schritte zum Erstellen eines Administratorclusters unterscheiden sich geringfügig für die Vorschau (Versionen 1.30–1.32) und die GA-Angebote (Versionen 1.33 und höher). In den Schritten für die allgemeine Verfügbarkeit wird der Befehl bmctl configure projects verwendet, um die Identitätsföderation von Arbeitslasten für Ihre Cluster zu konfigurieren.

1.33 oder höher

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 für den Dienstkontoschlüssel 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-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Fügen Sie der Clusterkonfigurationsdatei die Annotation baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" hinzu:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. Aktualisieren Sie auf Ihrer Administrator-Workstation die Umgebungsvariable GCP_ACCESS_TOKEN mit einem neu abgerufenen Zugriffstoken:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Standardmäßig hat das Zugriffstoken eine Lebensdauer von 3.600 Sekunden (1 Stunde). Wenn Sie die Clusterauthentifizierung für Arbeitslastidentitäten verwenden, prüft bmctl die Ablaufzeit des Tokens. Wenn das Token innerhalb von 1.800 Sekunden (30 Minuten) abläuft, meldet bmctl einen Fehler und wird beendet.

  4. Workload Identity-Föderation für den Cluster konfigurieren, den Sie erstellen:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. Führen Sie den Befehl bmctl create cluster aus, um den Administratorcluster zu erstellen.

1.30-1.32

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 für den Dienstkontoschlüssel 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-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Erstellen Sie auf Ihrer Administrator-Workstation einen Schlüssel für das admin-sa-Dienstkonto und laden Sie ihn herunter:

    Dieser Schlüssel ist erforderlich, um den Zugriff für das Dienstkonto admin-sa zu autorisieren. Sie löschen ihn sofort nach der Autorisierung des Dienstkontos.

    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
    

    Das Zugriffstoken ist nur kurz gültig. Daher müssen Sie es in der Regel neu generieren, bevor Sie bmctl-Befehle für Clusteroperationen wie das Erstellen, Aktualisieren oder Zurücksetzen eines Clusters ausführen.

  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 Lebensdauer von 3.600 Sekunden (1 Stunde).

  6. Führen Sie den Befehl bmctl create cluster aus, um den Administratorcluster zu erstellen.

Nutzercluster erstellen

Die Schritte zum Erstellen eines Administratorclusters unterscheiden sich geringfügig für die Vorschau (Versionen 1.30–1.32) und die GA-Angebote (Versionen 1.33 und höher). In den Schritten für die allgemeine Verfügbarkeit wird der Befehl bmctl configure projects verwendet, um die Identitätsföderation von Arbeitslasten für Ihre Cluster zu konfigurieren.

1.33 oder höher

  1. Fügen Sie der Clusterkonfigurationsdatei die Annotation baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" hinzu:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

    Das Zugriffstoken hat eine kurze Lebensdauer. Daher müssen Sie es in der Regel neu generieren, bevor Sie bmctl-Befehle für Clusteroperationen wie das Erstellen, Aktualisieren oder Zurücksetzen eines Clusters ausführen.

  2. Aktualisieren Sie auf Ihrer Administrator-Workstation die Umgebungsvariable GCP_ACCESS_TOKEN mit einem neu abgerufenen Zugriffstoken:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Standardmäßig hat das Zugriffstoken eine Lebensdauer von 3.600 Sekunden (1 Stunde).

  3. Workload Identity-Föderation für den Cluster konfigurieren, den Sie erstellen:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Stellen Sie das Nutzercluster-Manifest mit kubectl bereit:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Ersetzen Sie Folgendes:

  • USER_CLUSTER_CONFIG: der Pfad Ihrer Nutzerclusterkonfigurationsdatei.

  • ADMIN_KUBECONFIG: der Pfad der kubeconfig-Datei des Administratorclusters.

1.30-1.32

  1. Erstellen Sie auf Ihrer Administrator-Workstation einen Schlüssel für das admin-sa-Dienstkonto und laden Sie ihn herunter:

    Dieser Schlüssel ist erforderlich, um den Zugriff für das Dienstkonto admin-sa zu autorisieren. Sie löschen ihn sofort nach der Autorisierung des Dienstkontos.

    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.

  2. 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
    
  3. Löschen Sie die heruntergeladene JSON-Schlüsseldatei:

    rm TMP_KEY_FILE_PATH
    

    Das Zugriffstoken ist nur kurz gültig. Daher müssen Sie es in der Regel neu generieren, bevor Sie bmctl-Befehle für Clusteroperationen wie das Erstellen, Aktualisieren oder Zurücksetzen eines Clusters ausführen.

  4. 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 Lebensdauer von 3.600 Sekunden (1 Stunde).

  5. Führen Sie den Befehl bmctl create cluster aus, um Ihren Nutzercluster zu erstellen.

Andere Clustervorgänge

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

  • bmctl configure projects
  • bmctl create cluster
  • bmctl reset cluster
  • bmctl upgrade cluster

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.

  • Wenn das Token ungültig ist, rufen Sie ein neues ab:

    Das Zugriffstoken hat eine kurze Lebensdauer. Daher müssen Sie es in der Regel neu generieren, bevor Sie bmctl-Befehle für Clusteroperationen wie das Erstellen, Aktualisieren oder Zurücksetzen eines Clusters ausführen. Aktualisieren Sie auf Ihrer Administratorworkstation die Umgebungsvariable GCP_ACCESS_TOKEN mit einem neu abgerufenen Zugriffstoken:

    1.33 oder höher

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    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 Lebensdauer von 3.600 Sekunden (1 Stunde). Wenn Sie die Clusterauthentifizierung für Arbeitslastidentitäten verwenden, prüft bmctl die Ablaufzeit des Tokens. Wenn das Token innerhalb von 1.800 Sekunden (30 Minuten) abläuft, meldet bmctl einen Fehler und wird beendet.

Anpassung

Sie können Dienstkonten mit eindeutigen Namen für die Clusterauthentifizierung mit Workload Identity verwenden, sofern sie Bindungen für die erforderlichen Rollen haben.

1.33 oder höher

Standardmäßig wird für die Clusterauthentifizierung mit Workload Identity für Cluster der Version 1.33 und höher nur das Dienstkonto baremetal-gcr verwendet. Daher ist dies das einzige Dienstkonto, das angepasst werden kann.

  1. Prüfen Sie, ob das Dienstkonto, das Sie verwenden möchten, die in der Tabelle unter Vorbereitung aufgeführten Rollen hat.

  2. Kommentieren Sie die Clusterkonfigurationsdatei, um den benutzerdefinierten Namen für das Dienstkonto des Workload Identity Cluster Authentication-Dienstes anzugeben:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

Ersetzen Sie CUSTOM_AR_GSA durch den E-Mail-Namen des Dienstkontos, das von Google Distributed Cloud zum Herunterladen von Container-Images aus Artifact Registry verwendet wird.

1.30-1.32

  1. Achten Sie darauf, dass die Dienstkonten, die Sie verwenden möchten, die in der Tabelle unter Vorbereitung aufgeführten Rollen haben.

  2. Fügen Sie der Clusterkonfigurationsdatei Anmerkungen hinzu, um die benutzerdefinierten Namen für die Dienstkonten des Workload Identity-Clusterauthentifizierungsdienstes anzugeben:

    Wenn Sie benutzerdefinierte Namen angeben, können Sie vorhandene Dienstkonten verwenden. Achten Sie darauf, dass sich die von Ihnen angegebenen benutzerdefinierten Dienstkontonamen voneinander unterscheiden. Es ist nicht möglich, zwei oder mehr Standarddienstkonten durch ein einzelnes Dienstkonto zu ersetzen.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      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: Der E-Mail-Name 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: Der E-Mail-Name des Dienstkontos, das von Google Distributed Cloud zum Herunterladen von Container-Images aus Artifact Registry verwendet wird.

Beschränkungen

Die folgenden Funktionen und Möglichkeiten werden nicht unterstützt, wenn Sie die Workload Identity-Clusterauthentifizierung für Google Distributed Cloud (nur Software) auf Bare Metal verwenden:

  • Proxyserver verwenden
  • VPC Service Controls
  • Vorhandene Cluster im Schlüsselmodus für die Verwendung der Workload Identity-Clusterauthentifizierung aktualisieren
  • Cluster-Lebenszyklusverwaltung mit GKE On-Prem API-Clients wie der Google Cloud CLI, Terraform oder der Google Cloud -Konsole

Nächste Schritte