Workload Identity Federation for GKE verwenden

Informationen zum Authentifizieren Ihrer Knative Serving-Dienste mit Workload Identity Federation for GKE, um auf Google Cloud APIs wie Computing APIs, Speicher- und Datenbank APIs oder APIs für maschinelles Lernen zuzugreifen.

Zum Authentifizieren Ihrer Knative Serving-Dienste müssen Sie Folgendes tun:

  1. Workload Identity-Föderation für GKE in Ihrem Cluster aktivieren
  2. Berechtigungen konfigurieren
  3. Binden Sie Ihr Kubernetes-Dienstkonto (KSA) an ein Google-Dienstkonto (Google Service Account, GSA).

Nachdem Sie diese Schritte ausgeführt haben, können Sie einen neuen Knative Serving-Dienst bereitstellen, der die von Ihnen erstellte Identität verwendet.

Workload Identity-Föderation für GKE in Ihrem Cluster aktivieren

Wenn Sie die Workload Identity-Föderation für GKE mit Knative Serving einrichten möchten, können Sie Flotten-Workload Identity-Föderation einrichten, anstatt eine JSON-Datei des Google Cloud-Dienstkontos zu verwenden.

Berechtigungen zum Aktivieren aller Messwerte konfigurieren

Wenn Sie Messwerte wie die Anzahl der Berichtsanfragen oder die Anfragelatenz für Google Cloud Observability aktivieren möchten, müssen Sie Schreibberechtigungen für Cloud Monitoring manuell festlegen. Beispielsweise können Sie dem Google-Dienstkonto, das mit Knative Serving verknüpft ist, die Rolle Monitoring-Messwert-Autor (roles/monitoring.metricWriter) zuweisen, da sie die erforderlichen Berechtigungen zum Schreiben von Monitoringdaten enthält. Weitere Informationen zum Erstellen von Google-Dienstkonten finden Sie unter Dienstkonten verwenden.

Dienstkonten binden

Sie müssen eine Beziehung einrichten, damit ein Kubernetes-Dienstkonto (Kubernetes service account, KSA) als Google-Dienstkonto (Google service account, GSA) fungiert. Jede Arbeitslast, die als KSA ausgeführt wird, wird beim Zugriff auf Google Cloud APIs automatisch als GSA authentifiziert. Das KSA, das Sie binden, muss im Cluster und Namespace des Knative Serving-Dienstes vorhanden sein, für den Sie die Workload Identity Federation for GKE verwenden möchten. Das GSA kann zu einem anderen Google Cloud-Projekt gehören als das Cloud-Projekt, in dem sich der Cluster befindet.

  1. Wenn ein GSA nicht vorhanden ist, erstellen Sie eines. Fahren Sie andernfalls mit dem nächsten Schritt fort. Sie können ein GSA zur Verwendung mit Knative Serving in jedem Google Cloud-Projekt Ihrer Organisation erstellen und es dann in dem Google Cloud-Projekt verwenden, in dem Ihre Knative Serving-Dienste ausgeführt werden.

    Führen Sie den folgenden Befehl aus, um ein neues GSA zu erstellen:

    gcloud iam service-accounts create GSA_NAME

    Ersetzen Sie GSA_NAME durch den Namen des neuen Google-Dienstkontos.

    Weitere Informationen zur Verwendung von Google-Dienstkonten mit Ihren Knative Serving-Diensten finden Sie unter Dienstkonten verwenden.

  2. Prüfen Sie, ob Ihr GSA die benötigten IAM-Rollen hat. Mit dem folgenden Befehl können Sie zusätzliche Rollen zuweisen:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"

    Ersetzen Sie:

    • PROJECT_ID durch die ID des Google Cloud-Projekts, in dem sich Ihr Google-Dienstkonto befindet.
    • GSA_NAME durch den Namen Ihres Google-Dienstkontos
    • ROLE_NAME durch die IAM-Rolle, die dem GSA zugewiesen werden soll, z. B. roles/monitoring.metricWriter.
  3. Wenn kein Kubernetes-Dienstkonto vorhanden ist, erstellen Sie eines im selben Kubernetes-Namespace wie Ihr Knative Serving-Dienst. Andernfalls fahren Sie mit dem nächsten Schritt fort:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Binden Sie die Kubernetes- und Google-Dienstkonten, um die Identität zu erstellen und sie dann in Ihrem Cluster bereitzustellen:

    1. Erlauben Sie dem KSA, die Identität des GSA zu übernehmen. Erstellen Sie dazu eine IAM-Richtlinienbindung zwischen den beiden.

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Ersetzen Sie:

      • PROJECT_ID durch die ID des Google Cloud-Projekts für den Cluster, in dem sich Ihr Kubernetes-Dienstkonto und Ihre Knative Serving-Dienste befinden.
      • K8S_NAMESPACE/KSA_NAME durch den Namespace und den Namen Ihres Kubernetes-Dienstkontos.
      • GSA_NAME@GSA_PROJECT_ID durch den Namen Ihres Google-Dienstkontos und die ID des Google Cloud-Projekts. Sie können jedes Google-Dienstkonto in Ihrer Organisation verwenden. Informationen zum Aufrufen Ihrer Google-Dienstkonten finden Sie unter Dienstkonten auflisten.
    2. Fügen Sie dem KSA die Annotation iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID unter Verwendung der E-Mail-Adresse des GSA hinzu.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Ersetzen Sie:

      • K8S_NAMESPACE/KSA_NAME durch den Namespace und den Namen des Kubernetes-Dienstkontos, für das Sie eine Bindung erstellt haben.
      • GSA_NAME@GSA_PROJECT_ID durch den Namen Ihres Google-Dienstkontos und die ID des Google Cloud-Projekts, für das Sie eine Bindung erstellt haben.

Neuen Dienst zur Verwendung der Workload Identity Federation for GKE bereitstellen

Stellen Sie einen neuen Knative Serving-Dienst bereit, der die von Ihnen erstellte Workload Identity Federation for GKE verwendet.

Console

  1. Rufen Sie in der Google Cloud Console Knative Serving auf:

    Zu Knative Serving

  2. Klicken Sie auf Dienst erstellen, wenn Sie einen neuen Dienst für die Bereitstellung konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Klicken Sie unter Erweiterte Einstellungen auf Container.

  4. Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie das gewünschte Dienstkonto aus.

  5. Klicken Sie auf Weiter, um mit dem nächsten Abschnitt fortzufahren.

  6. Wählen Sie im Abschnitt Konfigurieren, wie dieser Dienst ausgelöst wird die Verbindung aus, die Sie zum Auslösen des Dienstes verwenden möchten.

  7. Klicken Sie auf Erstellen, um das Image in Knative Serving bereitzustellen. Warten Sie, bis die Bereitstellung abgeschlossen ist.

Befehlszeile

  • Legen Sie für vorhandene Dienste das Kubernetes-Dienstkonto fest, indem Sie den Befehl gcloud run services update mit den folgenden Parametern ausführen:

    gcloud run services update SERVICE --service-account KSA_NAME

    Ersetzen Sie:

    • SERVICE durch den Namen Ihres Knative Service-Dienstes.
    • KSA_NAME durch das Kubernetes-Dienstkonto, mit dem Sie die Workload Identity erstellt haben.
  • Legen Sie für neue Dienste das Kubernetes-Dienstkonto fest, indem Sie den Befehl gcloud run deploy mit dem Parameter --service-account ausführen:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME

    Ersetzen Sie:

    • IMAGE_URL durch einen Verweis auf das Container-Image, z. B. gcr.io/cloudrun/hello.
    • KSA_NAME durch das Kubernetes-Dienstkonto, mit dem Sie die Workload Identity erstellt haben.

YAML

Sie können die Konfiguration eines vorhandenen Dienstes in eine YAML-Datei herunterladen – mit dem gcloud run services describe-Befehl mithilfe des Flags --format=export. Sie können diese YAML-Datei dann ändern und diese Änderungen mit dem Befehl gcloud run services replace bereitstellen. Sie müssen sicherstellen, dass Sie nur die angegebenen Attribute ändern.

  1. Laden Sie die Konfiguration des Dienstes in eine Datei mit dem Namen service.yaml im lokalen Arbeitsbereich herunter:

    gcloud run services describe SERVICE --format export > service.yaml

    Ersetzen Sie SERVICE durch den Namen Ihres Knative-Serving-Dienstes.

  2. Aktualisieren Sie in Ihrer lokalen Datei das Attribut serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME

    Ersetzen

    • SERVICE durch den Namen Ihres Knative Service-Dienstes.
    • KSA_NAME durch das Kubernetes-Dienstkonto, mit dem Sie die Workload Identity erstellt haben.
  3. Stellen Sie die Konfiguration mit dem folgenden Befehl in Ihrem Knative Serving-Dienst bereit:

    gcloud run services replace service.yaml

Vorhandene Dienste zur Verwendung der Workload Identity Federation for GKE migrieren

Wenn Sie die Workload Identity Federation for GKE in einem vorhandenen Cluster aktiviert haben, muss jeder Dienst in diesem Cluster, für den Sie die Workload Identity Federation for GKE verwenden möchten, migriert werden. Vorhandene Dienste migrieren

Nächste Schritte

Zugriff auf Ihre Dienste verwalten