Um in Cloud Build das Prinzip der geringsten Berechtigung zu befolgen, können Sie Cloud Build so konfigurieren, dass ein Dienst konto mit genau den Berechtigungen verwendet wird, die zum Ausführen eines Builds erforderlich sind. Auf dieser Seite wird beschrieben, wie Sie ein Dienstkonto einrichten.
Wenn Sie kein Dienstkonto angeben, wählt Cloud Build möglicherweise automatisch ein Dienstkonto aus, um Builds in Ihrem Namen auszuführen. Dieses Dienstkonto hat möglicherweise Berechtigungen, die für Ihren Anwendungsfall unnötig weit gefasst sind, z. B. Zugriff auf Ihre Cloud Source Repositories und alle Cloud Storage-Bucket in Ihrem Projekt.
Um die Sicherheit Ihrer Projekte zu verbessern und die potenziellen Auswirkungen von Fehlkonfigurationen oder böswilligen Nutzern zu verringern, empfehlen wir, den Grundsatz der geringsten Berechtigung zu befolgen. Wenn Sie diesen Grundsatz anwenden, können Sie jedem Dienstkonto die Berechtigungen und Rollen zuweisen, die für die jeweilige Aufgabe erforderlich sind. Sie können beispielsweise ein Dienstkonto zum Erstellen und Übertragen von Images an Artifact Registry verwenden, wie im Google Cloud Blog beschrieben.
Hinweis
-
Aktivieren Sie die Cloud Build und IAM APIs.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Informationen zum Zuweisen von Rollen. Wenn Sie dieses Konto zum Erstellen und Verwalten von Anmeldedaten verwenden möchten, z. B. zum Erstellen kurzlebiger Anmeldedaten, aktivieren Sie die IAM Service Account Credentials API.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Informationen zum Zuweisen von Rollen.Erstellen Sie ein Dienstkonto, falls noch nicht geschehen.
IAM-Berechtigungen gewähren
Damit Ihr Build auf die Dienste zugreifen kann, mit denen er eine Verbindung herstellen muss, müssen Sie einige Rollen und Berechtigungen gewähren:
-
Rufen Sie in der Google Cloud Console die settings Cloud Build Berechtigungen Seite auf:
Berechtigungen aufrufen
Rufen Sie das Menü Dienstkonto auf und wählen Sie Ihr Dienstkonto aus.
Setzen Sie den Status der Rolle oder Rollen, die Sie hinzufügen möchten, auf Aktivieren.
Wenn die Rolle, die Sie für Ihre Build-Pipeline benötigen, hier nicht aufgeführt ist, können Sie auf der Seite mit den IAM-Konfigurationen zusätzliche Rollen gewähren.
Weitere Informationen zu den Rollen, die üblicherweise für einen Build erforderlich sind, finden Sie unter Zugriff auf Cloud Build Ressourcen konfigurieren und in der vollständigen Liste der Cloud Build IAM-Rollen und -Berechtigungen.
Build-Logs einrichten
Wenn Sie ein eigenes Dienstkonto für Builds angeben, müssen Sie Ihre Build-Logs entweder in Cloud Logging oder in einem vom Nutzer erstellten Cloud Storage-Bucket speichern. Sie können Ihre Logs **nicht** im Standard-Log-Bucket speichern.
Folgen Sie der Anleitung in Build-Logs im vom Nutzer erstellten Bucket speichern, um Ihre Logs in einem Cloud Storage-Bucket zu speichern. Achten Sie darauf, keine Aufbewahrungsrichtlinie für den Log-Bucket festgelegt zu haben, da dies dazu führen kann, dass Cloud Build keine Build-Logs in den Bucket schreibt.
Zum Speichern von Build-Logs in Cloud Logging weisen Sie dem Dienstkonto die Rolle „Logautor (
roles/logging.logWriter)“ zu.Weitere Informationen zum Speicherort von Build-Logs finden Sie unter Speicherort für Build-Logs auswählen.
Build mit einer Konfigurationsdatei ausführen
So führen Sie einen Build manuell mit einer Konfigurationsdatei aus:
Erstellen Sie im Stammverzeichnis des Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yamlodercloudbuild.json.Fügen Sie das Feld
serviceAccountund die bevorzugte Logging-Einrichtung hinzu.Wenn Sie die Build-Logs in Cloud Logging speichern, fügen Sie das Feld
logginghinzu und setzen Sie den Wert des Felds aufCLOUD_LOGGING_ONLY.Wenn Sie die Build-Logs in einem vom Nutzer erstellten Cloud Storage-Bucket speichern:
- Fügen Sie das Feld
logginghinzu und setzen Sie den Wert aufGCS_ONLY. - Fügen Sie das Feld
logsBuckethinzu und legen Sie als Wert den Standort Ihres Cloud Storage-Bucket fest.
- Fügen Sie das Feld
Im folgenden Beispiel wird Cloud Build so konfiguriert, dass Builds mit einem benutzerdefinierten Dienstkonto ausgeführt werden. Außerdem werden Build-Logs konfiguriert, die in einem vom Nutzer erstellten Cloud Storage-Bucket gespeichert werden sollen:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }Ersetzen Sie die Platzhalterwerte in Ihrer Build-Konfigurationsdatei durch Folgendes:
LOGS_BUCKET_LOCATIONist der Cloud Storage-Bucket, in dem Build-Logs gespeichert werden. Beispiel:gs://mylogsbucket.PROJECT_IDist die ID des Google Cloud Projekts , in dem Sie den Build ausführen.SERVICE_ACCOUNTist die E-Mail-Adresse oder eindeutige ID des Dienstkontos, das Sie für Builds angeben möchten. Eine E-Mail-Adresse eines Dienstkontos sieht beispielsweise so aus:service-account-name@project-id.iam.gserviceaccount.com.
Starten Sie mit der Build-Konfigurationsdatei den Build:
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORYErsetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
CONFIG_FILE_PATHist der Pfad zur Build-Konfigurationsdatei.SOURCE_DIRECTORYist der Pfad oder die URL zum Quellcode.
Wenn Sie in den
gcloud builds submitBefehlen keine Werte für CONFIG_FILE_PATH und SOURCE_DIRECTORY angeben, geht Cloud Build davon aus, dass sich die Build-Konfigurationsdatei und der Quellcode im aktuellen Arbeitsverzeichnis befinden.
Builds mit Triggern ausführen
Wenn Sie einen Build mit Cloud Build-Triggern mit Ihrem eigenen Dienstkonto ausführen möchten, richten Sie die gewünschte Logging-Option ein und wählen Sie beim Erstellen des Triggers das gewünschte Dienstkonto aus.
In der Build-Konfigurationsdatei:
Wenn Sie die Build-Logs in Cloud Logging speichern, fügen Sie das Feld
logginghinzu und setzen Sie den Wert des Felds aufCLOUD_LOGGING_ONLY.Wenn Sie die Build-Logs in einem vom Nutzer erstellten Cloud Storage-Bucket speichern:
- Fügen Sie das Feld
logginghinzu und setzen Sie den Wert aufGCS_ONLY. - Fügen Sie das Feld
logsBuckethinzu und legen Sie als Wert den Standort Ihres Cloud Storage-Bucket fest.
- Fügen Sie das Feld
Im folgenden Beispiel werden Build-Logs konfiguriert, die in einem vom Nutzer erstellten Cloud Storage-Bucket gespeichert werden sollen:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }Ersetzen Sie
LOGS_BUCKET_LOCATIONdurch den Cloud Storage-Bucket, in dem Build-Logs gespeichert werden. Beispiel:gs://mylogsbucket.Geben Sie ein Dienstkonto an, das mit Ihrem Build-Trigger verwendet werden soll:
Console
Wenn Sie Builds über die Seite „Trigger“ in der Google Cloud Console ausführen möchten, muss sich das benutzerdefinierte Dienstkonto im selben Projekt wie Ihr Build Trigger befinden. Wenn Sie Trigger mit projektübergreifenden Dienstkonten verwenden möchten, erstellen Sie den Build-Trigger mit dem Tool
gcloud.Geben Sie im Feld Dienstkonto Ihr Dienstkonto an. Wenn Sie kein Dienstkonto angeben, verwendet Cloud Build das Standarddienstkonto.
Klicken Sie auf Erstellen , um den Build-Trigger zu speichern.
gcloud
Geben Sie beim Erstellen eines Build-Triggers Ihr Dienstkonto mit dem Flag
--service-accountan. Im folgenden Beispiel erstellt der Befehlgcloudeinen Build-Trigger, der Code aus einem Git-Repository abruft:gcloud builds triggers create github \ --name=TRIGGER_NAME \ --repo-name=REPO_NAME \ --repo-owner=REPO_OWNER \ --branch-pattern=BRANCH_PATTERN --build-config=BUILD_CONFIG_FILE --service-account=SERVICE_ACCOUNT --project=BUILD_PROJECTErsetzen Sie die Platzhalterwerte in Ihrer Build-Konfigurationsdatei durch Folgendes:
TRIGGER_NAMEist der Name Ihres Build-Triggers.REPO_NAMEist der Name Ihres Repositorys.REPO_OWNERist der Nutzername des Repository-Inhabers.BRANCH_PATTERNist der Zweigname in Ihrem Repository, für den der Build aufgerufen werden soll.TAG_PATTERNist der Tagname in Ihrem Repository, für den der Build aufgerufen werden soll.BUILD_CONFIG_FILEist der Pfad zu Ihrer Build-Konfigurationsdatei.SERVICE_ACCOUNTist Ihr Dienstkonto im Format/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL.BUILD_PROJECTist das Projekt, in dem Sie Builds starten.
Projektübergreifende Einrichtung
Sie können ein benutzerdefiniertes Dienstkonto verwenden, um Builds in einem anderen Projekt als dem Projekt auszuführen, in dem Sie das Dienstkonto erstellt haben. Dies ist jedoch nur möglich, wenn die Einschränkung der Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage nicht erzwungen wird. Diese Einschränkung wird standardmäßig erzwungen.
Weitere Informationen.
Mit dem folgenden Befehl wird das Erzwingen dieser Einschränkung deaktiviert und der erforderliche Zugriff gewährt. Ihre Organisation muss sich der damit verbundenen Sicherheitsrisiken bewusst sein, bevor sie die Einschränkung in der Organisationsrichtlinie festlegt:
gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_IDIn diesem Befehl ist SERVICE_ACCOUNT_PROJECT_ID das Projekt, das Ihr benutzerdefiniertes Dienstkonto enthält.
Gewähren Sie in dem Projekt, das Ihr benutzerdefiniertes Dienstkonto enthält, dem Cloud Build-Dienst-Agent des Projekts, in dem Sie Builds ausführen, die Rolle
roles/iam.serviceAccountTokenCreator:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"Ersetzen Sie die Platzhalterwerte im Befehl durch Folgendes:
SERVICE_ACCOUNT_PROJECT_ID: Die Projekt-ID des Projekts, das Ihr benutzerdefiniertes Dienstkonto enthält.BUILD_SERVICE_AGENT: Die E-Mail-ID des Dienst-Agents im Formatservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, wobeiBUILD_PROJECT_NUMBERdie Projektnummer des Projekts ist, in dem Sie Builds ausführen. Sie finden die Projektnummer auf der Seite mit den Projekteinstellungen.
Beschränkungen :
Ihr Google Cloud Projekt muss sich in einer Google Cloud Organisation befinden.
Sie müssen Builds über die Befehlszeile mit
gcloud builds submitodergcloud builds triggers createstarten. Wenn Sie die Seite „Trigger“ in der Google Cloud Console verwenden möchten, müssen sich das benutzerdefinierte Dienstkonto und der Build-Trigger im selben Projekt befinden.
Nächste Schritte
- Weitere Informationen zu IAM-Rollen und -Berechtigungen in Cloud Build.
- Informationen dazu, wie sich die Änderungen am Dienstkonto auf die Ausführung von Builds auswirken