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 Loggingroles/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 FelddockerRepository
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:
- PROJECT_ID: Ihre Google Cloud-Projekt-ID..
- SA_EMAIL: Die E-Mail-Adresse Ihres Dienstkontos.
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:
- FUNCTION_NAME: Der Name, unter dem Sie die Funktion bereitgestellt haben.
- REGION: Der Name der Google Cloud-Region, in der Sie die Funktion bereitstellen möchten (z. B.
us-west1
). - PROJECT_ID: Ihre Google Cloud-Projekt-ID..
- RUNTIME: Die Laufzeit-ID einer unterstützten Laufzeitversion, um Ihre Funktion auszuführen, z. B.
nodejs18
. - CODE_ENTRYPOINT: Der Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der beim Ausführen der Funktion ausgeführt wird.
- SA_EMAIL: Die E-Mail-Adresse Ihres Dienstkontos.