Benutzerdefiniertes Dienstkonto für Cloud Build (1. Generation)

Cloud Run-Funktionen nutzen Cloud Build beim Erstellen und Bereitstellen Ihrer Cloud Run-Funktion. Standardmäßig verwendet Cloud Run-Funktionen das Cloud Build-Standarddienstkonto beim Ausführen des Builds als Hauptkonto. Seit Juli 2024 hat Cloud Build das Standardverhalten für die Verwendung von Dienstkonten durch Cloud Build in neuen Projekten geändert. Diese Änderung ist unter Änderung des Cloud Build-Dienstkontos ausführlich beschrieben. Aufgrund dieser Änderung verwenden neue Projekte, die Funktionen zum ersten Mal bereitstellen, möglicherweise ein Cloud Build-Standarddienstkonto mit unzureichenden Berechtigungen zum Erstellen einer Funktion. Wenn Sie von dieser Änderung betroffen sind, haben Sie folgende Möglichkeiten:

  • Lesen Sie die Cloud Build-Anleitung zu Änderungen am Standarddienstkonto und deaktivieren Sie diese Änderungen.

  • Fügen Sie dem Compute Engine-Standarddienstkonto die Rolle "Cloud Build-Konto" (roles/cloudbuild.builds.builder) hinzu.

  • Erstellen Sie ein benutzerdefiniertes Cloud Build-Dienstkonto für Funktionsbereitstellungen.

In diesem Dokument wird beschrieben, wie Sie ein vom Nutzer erstelltes Dienstkonto übergeben, das von Cloud Build beim Bereitstellen Ihrer Funktion verwendet werden soll.

Sie können Funktionen mit benutzerdefinierten Dienstkonten mithilfe der Google Cloud CLI, der Google Cloud Console oder der API für Cloud Run-Funktionen bereitstellen.

Im Folgenden finden Sie einige Szenarien, in denen Sie möglicherweise ein anderes Dienstkonto angeben möchten, das beim Erstellen Ihrer Funktion von Cloud Build verwendet werden soll:

  • Sie möchten mehr Kontrolle darüber haben, welche Dienstkonten Ihrem VPC-SC-Perimeter hinzugefügt werden sollen.

  • Sie möchten, dass Cloud Build mit anderen Berechtigungen als dem Standarddienstkonto ausgeführt wird, ohne jede Berechtigung einzeln widerrufen zu müssen.

  • Sie möchten detaillierte Cloud Build-Berechtigungen speziell für Ihre Funktionen festlegen und kein Cloud Build-Dienstkonto freigeben, das für andere Zwecke optimiert ist.

  • Ihre Organisation hat die Verwendung des Standarddienstkontos deaktiviert.

APIs aktivieren

Für dieses Feature muss die IAM API aktiviert sein.

Verwenden Sie die Google Cloud CLI, um die APIs zu aktivieren, die zum Bereitstellen einer Cloud Run-Funktion erforderlich sind, oder verwenden Sie die Google Cloud Console:

gcloud services enable iam.googleapis.com

Dienstkonto konfigurieren

In diesem Dokument wird beschrieben, wie Sie ein neues Dienstkonto erstellen und die erforderlichen Berechtigungen erteilen. Wenn Sie ein vorhandenes Dienstkonto verwenden möchten, benötigen Sie die E-Mail-Adresse des Dienstkontos, das Sie verwenden möchten. Weitere Informationen finden Sie unter Benutzerdefinierte Dienstkonten konfigurieren.

Sie können Ihre vorhandenen Dienstkonten so anzeigen oder die Google Cloud Console verwenden:

gcloud iam service-accounts list

Dienstkonto erstellen

Verwenden Sie die Google Cloud CLI, um Ihr Dienstkonto zu erstellen, oder verwenden Sie die Google Cloud Console:

gcloud iam service-accounts create SA_EMAIL

Ersetzen Sie SA_EMAIL mit der E-Mail-Adresse des Dienstkontos.

Berechtigungen erteilen

Das von Ihnen verwendete Dienstkonto benötigt die folgenden Rollen:

  • roles/logging.logWriter— Erforderlich zum Erstellen von Build-Logs in Cloud Logging
  • roles/artifactregistry.writer— Erforderlich zum Speichern von Build-Images in Artifact Registry. Für das Standardverhalten benötigt das Dienstkonto Zugriff auf die Repositories „gcf-artifacts“ und „cloud-run-source-deploy“. Der Zugriff auf die Repositories kann in der IAM-Richtlinie des Repositories festgelegt werden. Alternativ können Sie Ihr eigenes Artefakt-Repository über das Feld dockerRepository angeben.
  • roles/storage.objectViewer— Erforderlich zum Abrufen der Funktionsquelle aus dem Cloud Storage-Bucket und zum Speichern von Build-Images in Container Registry. Für das Standardverhalten benötigt das Dienstkonto Zugriff auf die Bucket „gcf-sources-*“. Dazu können Sie der Rollengewährung eine IAM-Bedingung hinzufügen, z. B.: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin: Erforderlich für die Container Registry (jetzt verworfen). Es ist Zugriff auf Bucket mit dem Namen *.artifacts.PROJECT_ID.appspot.com erforderlich, um auf die Container Registry zuzugreifen.

Gewähren Sie die folgenden Rollen mithilfe der Google Cloud CLI oder verwenden Sie die Google Cloud Console.

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin

Ersetzen Sie dabei Folgendes:

Funktion mit einem benutzerdefinierten Dienstkonto bereitstellen

Sie können die Google Cloud CLI verwenden, um eine Funktion bereitzustellen, die ein benutzerdefiniertes Dienstkonto für Cloud Build verwendet:

  • Das Flag --build-service-account gibt ein IAM-Dienstkonto an, dessen Anmeldedaten für den Build-Schritt verwendet werden. Wenn kein benutzerdefiniertes Dienstkonto angegeben ist, verwendet die Funktion das Standarddienstkonto des Projekts für Cloud Build.
  • Optional können Sie einen privaten Pool verwenden, den Sie mit dem Flag --build-worker-pool angeben.

gcloud functions deploy FUNCTION_NAME \
   --no-gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

Ersetzen Sie dabei Folgendes: