Dienstkontoberechtigungen festlegen

Auf dieser Seite wird erläutert, wie das Cloud Build-Dienstkonto funktioniert und wie Sie diesem Zugriff auf andere Projekte gewähren.

Was ist das Cloud Build-Dienstkonto?

Cloud Build führt Ihre Builds mithilfe eines Dienstkontos aus. Dies ist ein spezielles Google-Konto, mit dem Builds in Ihrem Namen ausgeführt werden. Die E-Mail-Adresse für das Cloud Build-Dienstkonto lautet [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.

Sie können die Dienstkonten Ihres Projekts über das IAM-Menü der Cloud Console aufrufen.

Wenn Sie die Cloud Build API aktivieren, wird das Dienstkonto automatisch erstellt und erhält für Ihr Projekt die Rolle Cloud Build Service Account. Mit dieser Rolle können unter anderem die folgenden Aufgaben ausgeführt werden:

  • Code aus dem Cloud Source Repository Ihres Projekts abrufen
  • Dateien aus einem beliebigen zu Ihrem Projekt gehörenden Cloud Storage-Bucket herunterladen
  • Build-Logs in Cloud Logging speichern
  • Docker-Images in Container Registry übertragen
  • Basis-Images aus Container Registry abrufen

Diese Aktionen werden vom Dienstkonto nur zum Ausführen des Builds durchgeführt. Das Dienstkonto ruft ohne ausdrückliche Anweisung beispielsweise keinen Code aus dem Cloud Source Repository ab.

Erweiterten Zugriff gewähren

Die Standardberechtigungen des Dienstkontos erlauben nur bestimmte Aktionen. Nicht zulässig sind etwa das Bereitstellen in App Engine oder Cloud Functions, das Verwalten von Compute Engine- oder Kubernetes Engine-Ressourcen oder der Zugriff auf Cloud Storage-Buckets.

Wenn Ihr Dienstkonto diese Aktionen ausführen soll, weisen Sie ihm zusätzliche IAM-Rollen zu.

So weisen Sie einem Cloud Build-Dienstkonto eine IAM-Rolle zu:

  1. Öffnen Sie die Seite mit den Cloud Build-Einstellungen:

    Zur Seite mit den Cloud Build-Einstellungen

    Sie sehen die Seite Dienstkontoberechtigungen:

    Screenshot der Seite

  2. Setzen Sie den Status der gewünschten Rolle auf Aktivieren.

Private Images aus anderen Google Cloud-Projekten abrufen

Sie können Berechtigungen erteilen, um private Images aus einem anderen Cloud Platform-Projekt abzurufen, sofern das Dienstkonto Zugriff auf das Projekt hat. Sie haben beispielsweise die Möglichkeit, einen Build in Projekt A auszuführen, der Images aus Projekt B abrufen kann.

gsutil

Wenn Sie Ihrem Dienstkonto diese Berechtigungen gewähren möchten, führen Sie im Shell- oder Terminalfenster die folgenden Befehle aus:

  1. Suchen Sie den Namen des Cloud Storage-Buckets für die Registry. Listen Sie dazu die Buckets auf:

    gsutil ls
    

    Die URL des Container Registry-Buckets wird als gs://artifacts.[PROJECT_ID].appspot.com oder gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com aufgeführt.

  2. Erteilen Sie dem Dienstkonto von Projekt A die Berechtigung, Objekte von Projekt B zu lesen:

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Erteilen Sie dem Dienstkonto von Projekt A die Berechtigung, Buckets von Projekt B zu lesen:

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Aktualisieren Sie die Standard-ACL von Projekt B so, dass das Dienstkonto von Projekt A Leseberechtigungen für Objekte hat, die erstellt wurden, nachdem Sie die obigen Schritte 1 und 2 ausgeführt haben:

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Wobei:

  • [STORAGE_REGION] ist der multiregionale Standort (asia, eu oder us) der Registry, die das Image hostet.
  • [PROJECT_NUMBER_A] ist die Projektnummer von Projekt A.
  • [PROJECT_ID_B] ist die Projekt-ID von Projekt B.

Console

Eine Anleitung zum Gewähren von Berechtigungen mit der Cloud Console finden Sie unter Zugriffssteuerungslisten erstellen und verwalten.

Private Images auf andere Google Cloud-Projekte übertragen

Sie können Berechtigungen erteilen, um private Images in ein anderes Cloud Platform-Projekt zu übertragen, sofern das Dienstkonto Zugriff auf das Projekt hat. Sie haben beispielsweise die Möglichkeit, einen Build in Projekt A auszuführen, der Images an Projekt B übertragen kann.

gsutil

Um Ihrem Dienstkonto diese Berechtigungen zu gewähren, führen Sie im Shell- oder Terminalfenster folgenden Befehle aus:

  1. Suchen Sie den Namen des Cloud Storage-Buckets für die Registry. Listen Sie dazu die Buckets auf:

    gsutil ls
    

    Die URL des Container Registry-Buckets wird als gs://artifacts.[PROJECT_ID].appspot.com oder gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com aufgeführt.

  2. Erteilen Sie dem Dienstkonto von Projekt A die Berechtigung, Objekte von Projekt B zu aktualisieren:

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Erteilen Sie dem Dienstkonto von Projekt A die Berechtigung, in Buckets von Projekt B zu schreiben:

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Aktualisieren Sie die Standard-ACL von Projekt B so, dass das Dienstkonto von Projekt A Schreibberechtigungen für Objekte hat, die erstellt wurden, nachdem Sie die obigen Schritte 1 und 2 ausgeführt haben:

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Wobei:

  • [STORAGE_REGION] ist der multiregionale Standort (asia, eu oder us) der Registry, die das Image hostet.
  • [PROJECT_NUMBER_A] ist die Projektnummer von Projekt A.
  • [PROJECT_ID_B] ist die Projekt-ID von Projekt B.

Console

Eine Anleitung zum Gewähren von Berechtigungen mit der Cloud Console finden Sie unter Zugriffssteuerungslisten erstellen und verwalten.

Fehlerbehebung

Falls in Ihren Build-Logs 403-Fehlermeldungen (Zugriff verweigert) auftreten, können Sie die folgenden Schritte ausführen:

  • Deaktivieren Sie die Cloud Build API und aktivieren Sie sie wieder. Das Dienstkonto müsste dadurch wieder auf Ihr Projekt zugreifen können.
  • Führen Sie die oben angegebenen Befehle noch einmal aus.

Weitere Informationen