Workload Identity verwenden

Authentifizieren Sie Ihre Knative serving-Dienste mit Workload Identity, um auf Google Cloud APIs wie die Compute APIs, Storage und Database APIs oder Machine Learning APIs zuzugreifen.

So authentifizieren Sie Ihre Knative serving-Dienste:

  1. Workload Identity in Ihrem Cluster aktivieren
  2. Berechtigungen konfigurieren
  3. Binden Sie Ihr Kubernetes-Dienstkonto (Kubernetes Service Account, 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 in Ihrem Cluster aktivieren

Zum Einrichten von Workload Identity mit Knative serving können Sie die Workload Identity-Föderation für Flotten einrichten, anstatt eine JSON-Datei des Google Cloud-Dienstkontos zu verwenden.

Berechtigungen zum Aktivieren aller Messwerte konfigurieren

Wenn Sie Messwerte wie die Anzahl der Anfragen oder die Latenz von Anfragen an Google Cloud Observability melden möchten, müssen Sie Cloud Monitoring Schreibberechtigungen erteilen. Sie können beispielsweise dem mit Knative serving verknüpften Google-Dienstkonto 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 KSA, das Sie binden, muss im Cluster und Namespace des Knative serving-Dienstes vorhanden sein, für den Sie Workload Identity verwenden möchten. Die GSA kann zu einem anderen Google Cloud-Projekt gehören als das Google 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 eine GSA zur Verwendung mit Knative serving in jedem Google Cloud-Projekt in Ihrer Organisation erstellen und 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. Fahren Sie andernfalls 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 das Kubernetes-Dienstkonto und die 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 von Workload Identity bereitstellen

Stellen Sie einen neuen Knative serving-Dienst bereit, der die von Ihnen erstellte Workload Identity 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 für Knative serving 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 serving-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 Sie

    • SERVICE durch den Namen Ihres Knative serving-Dienstes.
    • 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 serving-Dienst 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