Benutzerdefiniertes Dienstkonto für Cloud Build

Cloud Functions nutzt Cloud Build beim Erstellen und Bereitstellen Ihrer Cloud Functions-Funktion. Standardmäßig verwendet Cloud Functions das Cloud Build-Standarddienstkonto beim Ausführen des Builds als Hauptkonto. 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 Cloud Functions API 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.

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 Functions-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 gewähren

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

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

gcloud projects add-iam-policy-binding SA_PROJECT_ID \
--member=user:DEPLOYING_USER_EMAIL \
--role=roles/iam.serviceAccountUser

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.objectAdmin

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID..
  • SA_EMAIL: Die E-Mail-Adresse Ihres Dienstkontos.
  • SA_PROJECT_ID: Die Projekt-ID Ihres Dienstkontos.
  • DEPLOYING_USER_EMAIL: Die E-Mail-Adresse des Nutzers, der die Funktion bereitstellt.

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 \
   --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 Folgendes: