Workload Identity verwenden

Hier erfahren Sie, wie Sie Ihre Knative-Bereitstellungsdienste mit Workload Identity authentifizieren, um auf Google Cloud APIs wie die Compute APIs, Storage und Database APIs oder Machine Learning APIs zuzugreifen.

So authentifizieren Sie die Knative-Bereitstellungsdienste:

  1. Workload Identity 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-Bereitstellungsdienst bereitstellen, der die von Ihnen erstellte Identität verwendet.

Workload Identity in Ihrem Cluster aktivieren

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

Berechtigungen konfigurieren, um alle Messwerte zu aktivieren

Wenn Sie Messwerte wie die Anzahl der Anfragen oder die Anfragelatenz für Google Cloud Observability aktivieren möchten, müssen Sie Schreibberechtigungen für Cloud Monitoring erteilen. Beispielsweise können Sie dem Google-Dienstkonto, das mit der Bereitstellung von Knative verknüpft ist, die Rolle „Monitoring-Messwert-Autor“ (roles/monitoring.metricWriter) zuweisen, da es 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 zu bindende KSA muss im Cluster und Namespace des Knative-Bereitstellungsdienstes vorhanden sein, für den Sie Workload Identity verwenden möchten. Die Google Search Appliance kann zu einem anderen Google Cloud-Projekt als dem Google Cloud-Projekt gehören, 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 eine Google Search Appliance zur Verwendung mit Knative in einem beliebigen Google Cloud-Projekt in Ihrer Organisation erstellen und diese dann im Google Cloud-Projekt verwenden, in dem Ihre Knative-Bereitstellungsdienste 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 den Knative-Bereitstellungsdiensten 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-Bereitstellungsdienst. 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 stellen Sie sie dann in Ihrem Cluster bereit:

    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 die Knative-Bereitstellungsdienste 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 von Workload Identity bereitstellen

Stellen Sie einen neuen Knative-Bereitstellungsdienst bereit, der die von Ihnen erstellte Workload Identity verwendet.

Console

  1. Rufen Sie in der Google Cloud Console die Knative-Bereitstellung auf:

    Zur Knative-Bereitstellung

  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 für Knative bereitzustellen, und 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-Bereitstellungsdienstes.
    • 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-Bereitstellungsdienstes.

  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 Sie

    • SERVICE durch den Namen Ihres Knative-Bereitstellungsdienstes.
    • KSA_NAME durch das Kubernetes-Dienstkonto, mit dem Sie die Workload Identity erstellt haben.
  3. Stellen Sie die Konfiguration mit dem folgenden Befehl für Ihren Knative-Bereitstellungsdienst bereit:

    gcloud run services replace service.yaml

Vorhandene Dienste zur Verwendung von Workload Identity migrieren

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

Weitere Informationen

Zugriff auf Ihre Dienste verwalten