Schritt 10 (optional): Workload Identity in GKE konfigurieren

Nur GKE mit Workload Identity: Workload Identity konfigurieren

Führen Sie die folgenden Schritte aus, wenn Sie die Überschreibungsdatei für Workload Identity in GKE in Schritt 6: Cluster konfigurieren einrichten.

Wenn Sie Workload Identity nicht in GKE verwenden, fahren Sie mit Teil 3, Schritt 1: Apigee Ingress-Gateway freigeben fort.

Google Cloud-Dienstkonten und Kubernetes-Dienstkonten

Ein Google Cloud-Dienstkonto ist eine spezielle Art von Konto, mit dem autorisierte API-Aufrufe durch Authentifizierung als Dienstkonto selbst ausgeführt werden können. Google Cloud-Dienstkonten können Rollen und Berechtigungen erhalten, die einem einzelnen Nutzer ähneln. Wenn sich eine Anwendung als Dienstkonto authentifiziert, hat sie Zugriff auf alle Ressourcen, auf die das Dienstkonto Zugriff hat. Weitere Informationen zu Google Cloud-Dienstkonten finden Sie in der Übersicht zu Dienstkonten.

Sie haben Google Cloud-Dienstkonten für Ihre Apigee Hybrid-Installation in Schritt 4: Dienstkonten erstellen erstellt. Apigee verwendet diese Dienstkonten zur Authentifizierung der Hybridkomponenten.

Kubernetes-Dienstkonten sind Google Cloud-Dienstkonten ähnlich. Ein Kubernetes-Dienstkonto bietet eine Identität für Prozesse, die in einem Pod ausgeführt werden, und ermöglicht ihnen, sich ähnlich wie ein Nutzer beim API-Server zu authentifizieren. Weitere Informationen zu Kubernetes-Dienstkonten finden Sie unter Dienstkonten für Pods konfigurieren.

Das Tool apigeectl hat die meisten der von Apigee Hybrid benötigten Kubernetes-Dienstkonten erstellt, als Sie apigeectl apply im vorherigen Verfahren ausgeführt haben.

Wenn Sie Workload Identity in GKE konfigurieren, verknüpfen Sie die Google Cloud-Dienstkonten mit den Kubernetes-Dienstkonten im Kubernetes-Cluster. Auf diese Weise können die Kubernetes-Dienstkonten die Identität der Google Cloud-Dienstkonten übernehmen und die ihnen zugewiesenen Rollen und Berechtigungen für die Authentifizierung bei den Hybridkomponenten verwenden.

Folgen Sie dieser Anleitung, um Workload Identity für Ihr Projekt zu konfigurieren.

Konfiguration von Workload Identity vorbereiten

Bei diesen Verfahren werden die folgenden Umgebungsvariablen verwendet. Prüfen Sie, ob sie definiert sind und definieren Sie alle, die noch nicht definiert wurden:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME

Wobei:

  • APIGEECTL_HOME ist das Verzeichnis, in dem Sie apigeectl installiert haben.
  • CLUSTER_LOCATION ist die Region (oder Zone) Ihres Clusters, z. B. us-central1.
  • ENV_NAME ist der Name Ihrer Umgebung.
  • HYBRID_FILES ist das Verzeichnis, in dem Sie die Verzeichnisse overrides und certs erstellt haben.
  • NAMESPACE ist Ihr Apigee-Namespace.
  • PROJECT_ID ist Ihr Google Cloud-Projekt.
  • ORG_NAME ist der Name Ihrer Apigee-Organisation.

  1. Prüfen Sie mit dem folgenden Befehl, ob die aktuelle gcloud-Konfiguration auf Ihre Google Cloud-Projekt-ID festgelegt ist:
    gcloud config get project
  2. Legen Sie gegebenenfalls die aktuelle gcloud-Konfiguration fest:

    gcloud config set project $PROJECT_ID
  3. Erstellen Sie das Kubernetes-Dienstkonto apigee-cassandra-restore.

    Wenn Sie Ihre Konfiguration mit apigeectl apply ausgeführt haben, wurden mithilfe des Befehls die meisten Kubernetes-Dienstkonten erstellt, die für Workload Identity erforderlich sind.

    Führen Sie zum Erstellen des Kubernetes-Dienstkontos apigee-cassandra-restore den Befehl apigeectl apply mit dem Flag --restore aus:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Prüfen Sie, ob Workload Identity für Ihren GKE-Cluster aktiviert ist. Wenn Sie den Cluster in Schritt 1: Cluster erstellen erstellt haben, wurde in Schritt 6 Workload Identity aktiviert. Mit folgendem Befehl können Sie prüfen, ob Workload Identity aktiviert ist:

    Regionale Cluster

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Zonale Cluster

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Ihre Ausgabe sollte so aussehen:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    Wenn stattdessen in den Ergebnissen null angezeigt wird, führen Sie den folgenden Befehl aus, um Workload Identity für Ihren Cluster zu aktivieren:

    Regionale Cluster

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Zonale Cluster

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Aktivieren Sie Workload Identity für jeden Knotenpool mit den folgenden Befehlen. Dieser Vorgang kann für jeden Knoten bis zu 30 Minuten dauern:

    Regionale Cluster

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Zonale Cluster

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Dabei ist NODE_POOL_NAME der Name jedes Knotenpools. In den meisten Apigee Hybrid-Installationen heißen die beiden Standardknotenpools apigee-data und apigee-runtime.

  6. Prüfen Sie mit den folgenden Befehlen, ob Workload Identity auf Ihren Knotenpools aktiviert ist:

    Regionale Cluster

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Zonale Cluster

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Die Ausgabe sollte in etwa so aussehen:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Rufen Sie eine Liste der Namen der Google Cloud-Dienstkonten für Ihr Projekt ab. Sie benötigen diese Namen, um die Dienstkonten von Kubernetes für die Konfiguration von Workload Identity zu verknüpfen. Für Nicht-Produktionsinstallationen sollte es nur ein Google-Dienstkonto geben. In Produktionsinstallationen sollten acht vorhanden sein.

    Verwenden Sie den folgenden Befehl, um die Liste der Namen abzurufen:

    gcloud iam service-accounts list --project $PROJECT_ID

    Die Ausgabe sollte in etwa so aussehen:

    Non-prod

    Für Nicht-Produktionsumgebungen:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    Produktion

    Für Nicht-Produktionsumgebungen:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@my_project_id.iam.gserviceaccount.com     False
    apigee-logger        apigee-logger@my_project_id.iam.gserviceaccount.com        False
    apigee-mart          apigee-mart@my_project_id.iam.gserviceaccount.com          False
    apigee-metrics       apigee-metrics@my_project_id.iam.gserviceaccount.com       False
    apigee-runtime       apigee-runtime@my_project_id.iam.gserviceaccount.com       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.iam.gserviceaccount.com  False
    apigee-udca          apigee-udca@my_project_id.iam.gserviceaccount.com          False
    apigee-watcher       apigee-watcher@my_project_id.iam.gserviceaccount.com       False
    
  8. Rufen Sie eine Liste der Namen der Kubernetes-Dienstkonten ab. Sie benötigen diese Liste der Namen, um sie später in diesem Verfahren mit Ihren Google Cloud-Dienstkonten zu verknüpfen. Verwenden Sie den folgenden Befehl:
    kubectl get sa -n $NAMESPACE

    Ihre Ausgabe sollte in etwa so aussehen: Die Kubernetes-Dienstkonten in Fettschrift sind die, die Sie mit Ihren Google-Dienstkonten verknüpfen müssen:

    NAME                                                         SECRETS   AGE
    apigee-cassandra-backup                                      1         11m
    apigee-cassandra-restore                                     1         11m
    apigee-cassandra-schema-setup-my-project-id-123abcd-sa       1         11m
    apigee-cassandra-schema-val-my-project-id-123abcd            1         11m
    apigee-cassandra-user-setup-my-project-id-123abcd-sa         1         11m
    apigee-connect-agent-my-project-id-123abcd-sa                1         11m
    apigee-datastore-default-sa                                  1         11m
    apigee-ingressgateway                                        1         11m
    apigee-ingressgateway-my-project-id-123abcd                  1         11m
    apigee-ingressgateway-manager                                1         11m
    apigee-init                                                  1         11m
    apigee-mart-my-project-id-123abcd-sa                         1         11m
    apigee-metrics-sa                                            1         11m
    apigee-mint-task-scheduler-my-project-id-123abcd-sa          1         11m
    apigee-redis-default-sa                                      1         11m
    apigee-redis-envoy-default-sa                                1         11m
    apigee-runtime-my-project-id-env-name-234bcde-sa             1         11m
    apigee-synchronizer-my-project-id-env-name-234bcde-sa        1         11m
    apigee-udca-my-project-id-123abcd-sa                         1         11m
    apigee-udca-my-project-id-env-name-234bcde-sa                1         11m
    apigee-watcher-my-project-id-123abcd-sa                      1         11m
    default                                                      1         11m
        

Workload Identity konfigurieren

Gehen Sie folgendermaßen vor, um Workload Identity für Ihre Hybridinstallation zu aktivieren:

  1. Annotieren Sie für jede Apigee-Komponente die entsprechenden Kubernetes-Dienstkonten mit dem Google-Dienstkonto für die Komponente.

    In den folgenden Schritten werden zwei Umgebungsvariablen verwendet. Sie werden die Werte dieser Variablen vor jeder Gruppe von Befehlen zurücksetzen:

    • GSA_NAME: Name eines Google-Dienstkontos. Dies sind die Dienstkonten, die Sie mit dem create-service-account-Tool in Schritt 4: Dienstkonten erstellen erstellt haben.
    • KSA_NAME: Der Name eines Kubernetes-Dienstkontos. Dies sind die oben mit dem Befehl kubectl get sa -n $NAMESPACE aufgeführten Konten, z. B. apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Konfigurieren Sie Workload Identity für die Cassandra-Komponente.

      Die Cassandra-Komponente umfasst sechs Kubernetes-Dienstkonten:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = Validierung)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      Non-prod

      Kubernetes-Dienstkonto apigee-cassandra-backup konfigurieren

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        Die Ausgabe sollte eine Zeile wie die folgende enthalten, die die Annotation beschreibt:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Kubernetes-Dienstkonto apigee-cassandra-restore konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-restore"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-schema-setup konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Beispiel: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-schema-val konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Beispiel: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-user-setup konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Beispiel: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-datastore-default-sa konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-datastore-default-sa"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      Kubernetes-Dienstkonto apigee-cassandra-backup konfigurieren

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. Die Ausgabe sollte eine Zeile wie die folgende enthalten, die die Annotation beschreibt:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-restore konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-restore"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Kubernetes-Dienstkonto apigee-cassandra-schema-setup konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Beispiel: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:

        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-schema-val konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Beispiel: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-cassandra-user-setup konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Beispiel: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes-Dienstkonto apigee-datastore-default-sa konfigurieren

      1. Definieren Sie die Umgebungsvariable KSA_NAME neu:

        KSA_NAME="apigee-datastore-default-sa"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Konfigurieren Sie Workload Identity für die Apigee Connect-Komponente.

      Non-prod

      1. Definieren Sie die Umgebungsvariable KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Beispiel: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Beispiel: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Konfigurieren Sie Workload Identity für die MART-Komponente.

      Non-prod

      1. Definieren Sie die Umgebungsvariable KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name-sa"
        Beispiel: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        Beispiel: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee-Messwerte

      Konfigurieren Sie Workload Identity für die Apigee-Messwertkomponente.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-metrics-sa"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
        $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (Organisationsebene)

      Konfigurieren Sie Workload Identity für die UDCA-Komponente auf Organisationsebene.

      UDCA ist sowohl auf Organisations- als auch auf Umgebungsebene implementiert. Daher gibt es zwei separate Kubernetes-Dienstkonten für UDCA, eines für jeden Bereich. Sie können sie anhand des Kontonamens unterscheiden. Das Konto enthält den Umgebungsnamen im Dienstkontonamen. Beispiel:

      • Organisationsebene: apigee-udca-my-project-id-123abcd-sa, wobei my-project-id die Projekt-ID des Namens ist.
      • Umgebung: apigee-udca-my-project-id-my-env-234bcde-sa, wobei my-env der Name der Umgebung ist.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-udca-service-account-name-sa"
        Beispiel: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
          gcloud iam service-accounts add-iam-policy-binding \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
            $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
            --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        Beispiel: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Konfigurieren Sie Workload Identity für die Apigee Watcher-Komponente.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        Beispiel: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        Beispiel: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Laufzeit

      Konfigurieren Sie Workload Identity für die Apigee-Laufzeitkomponente.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Beispiel: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Beispiel: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      Konfigurieren Sie Workload Identity für die MART-Komponente.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Beispiel: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Beispiel: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (Umgebungsebene)

      Konfigurieren Sie Workload Identity für die UDCA-Komponente auf Umgebungsebene.

      Non-prod

      1. Definieren Sie die KSA_NAME-Umgebungsvariablen:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Beispiel: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produktion

      1. Definieren Sie die Umgebungsvariablen KSA_NAME und GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Beispiel: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Binden Sie die IAM-Rolle:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Annotieren Sie das Dienstkonto:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Überprüfen Sie die Annotation:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Optional: Löschen Sie alle heruntergeladenen Dienstkonto-Schlüsseldateien.

    Wenn Sie die Google-Dienstkonten mit dem create-service-account-Tool erstellt haben, haben sie möglicherweise Dienstkontoschlüssel erstellt und die .json-Schlüsseldateien heruntergeladen. Wenn Sie Workload Identity in GKE verwenden, benötigen Sie diese Schlüsseldateien nicht.

    Sie können die Schlüsseldateien mit dem folgenden Befehl löschen:

    rm $HYBRID_FILES/service-accounts/*.json

Workload Identity prüfen

  1. (Optional) Sie können den Status Ihrer Kubernetes-Dienstkonten in der Google Cloud Console auf der Seite Kubernetes: Arbeitslasten – Übersicht sehen.

    Zu Arbeitslasten

  2. So prüfen Sie den Status der Bereitstellung noch einmal mit apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(WEITER) Schritt 1: Apigee-Ingress verfügbar machen 2