Wenn Sie On-Demand-Scans als Teil Ihrer Cloud Build-Pipeline verwenden, können Sie Builds blockieren, wenn das Container-Image Sicherheitslücken mit einem Schweregrad aufweist, der einem vordefinierten Level entspricht.
In dieser Anleitung erfahren Sie, wie Sie mit Cloud Build Ihr Container-Image aus dem Quellcode erstellen, es auf Sicherheitslücken prüfen, die Schweregrade der Sicherheitslücken prüfen und das Image in die Artifact Registry übertragen, wenn keine Sicherheitslücken mit einem bestimmten Schweregrad vorhanden sind.
Wir empfehlen, für diese Anleitung ein neues Google Cloud Projekt zu erstellen und die Schritte in einer isolierten Umgebung auszuführen.
Ziele
- Erstellen Sie mit Cloud Build ein Image.
- Scannen Sie das erstellte Image mit On-Demand-Scans.
- Bewerten Sie akzeptable Sicherheitslückenebenen.
- Speichern Sie das Image in der Artifact Registry.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Verwenden Sie den Preisrechner.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch nicht mit Google Cloudvertraut sind, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
Erforderliche Rollen
Das Dienstkonto, das Sie mit Cloud Build verwenden, benötigt die folgenden Rollen:
Administrator für On-Demand-Scanning (
roles/ondemandscanning.admin)Artifact Registry-Autor (
roles/artifactregistry.writer)
Das Cloud Build-Standarddienstkonto hat die erforderlichen Berechtigungen für Artifact Registry-Repositories im selben Projekt. Wenn sich Ihre Repositories im selben Projekt befinden, das Sie für Cloud Build verwenden, müssen Sie nur die Rolle „Administrator für On-Demand-Scanning“ gewähren.
Wenn Sie ein vom Nutzer bereitgestelltes Dienstkonto für Cloud Build verwenden, müssen Sie beide Rollen gewähren.
Quelldatei vorbereiten
In dieser Anleitung erstellen Sie ein Image aus einem Dockerfile. Ein Dockerfile ist eine Quelldatei, die Anweisungen für Docker zum Erstellen eines Images enthält.
Öffnen Sie ein Terminal, erstellen Sie ein neues Verzeichnis mit dem Namen
ods-tutorialund wechseln Sie zu diesem Verzeichnis:mkdir ods-tutorial && cd ods-tutorialErstellen Sie eine Datei mit dem Namen
Dockerfileund mit folgendem Inhalt:# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUE
Artifact Registry-Repository erstellen
Legen Sie die Projekt-ID auf dasselbe Projekt fest, in dem Sie die APIs aktiviert haben:
gcloud config set project PROJECT_IDErstellen Sie in der Region
us-central1ein Docker-Repository mit dem Namenods-build-repo:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"Prüfen Sie, ob das Repository erfolgreich erstellt wurde:
gcloud artifacts repositories list
Erstellen und scannen
In diesem Abschnitt führen Sie Ihre Build-Pipeline mit einer Build Konfigurationsdatei aus. Eine Build-Konfigurationsdatei weist Cloud Build an, mehrere Aufgaben gemäß Ihren Spezifikationen auszuführen.
Erstellen Sie im Ordner
ods-tutorial/die Dateicloudbuild.yamlmit folgendem Inhalt:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']Diese Datei enthält den Speicherort und das Repository, die zuvor in der Artifact Registry erstellt wurden. Wenn Sie andere Werte verwenden möchten, ändern Sie die Datei
cloudbuild.yamlentsprechend. Die Werte fürPROJECT_IDundSEVERITYwerden im Build-Befehl an das Skript übergeben.Geben Sie die
SEVERITYStufen für Sicherheitslücken an, die Sie blockieren möchten, und starten Sie den Build.Sie können die folgenden Werte für
SEVERITYverwenden:CRITICALHIGHMEDIUMLOW
Sie können mehrere Schweregrade mit einem regulären Ausdruck angeben.
Im folgenden Beispiel geben Sie sowohl die Schweregrade
CRITICALals auchHIGHan. Dadurch wird Cloud Build angewiesen, nach Sicherheitslücken zu suchen, die mit dem SchweregradHIGHoder höher klassifiziert sind.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yamlWo
- PROJECT_ID ist die Projekt-ID.
- SEVERITY ermöglicht es Ihnen, die Schweregrade festzulegen, die Sie blockieren möchten. Wenn On-Demand-Scans Sicherheitslücken finden, die einem der angegebenen Schweregrade entsprechen, schlägt der Build fehl.
Ergebnisse verstehen
Wenn Sie den Wert für SEVERITY auf CRITICAL|HIGH setzen, sucht On-Demand-Scanning nach Sicherheitslücken mit dem Schweregrad HIGH und dem schwerwiegenderen Schweregrad CRITICAL. Wenn in Ihrem Image keine entsprechenden Sicherheitslücken gefunden werden, ist der Build erfolgreich und Cloud Build überträgt das Image per Push in die Artifact Registry.
Die Ausgabe sieht etwa so aus:
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
Wenn On-Demand-Scans in Ihrem Image Sicherheitslücken mit dem Schweregrad HIGH oder CRITICAL finden, schlägt der Build-Schritt scan fehl. Nachfolgende Build-Schritte werden nicht gestartet und Cloud Build überträgt kein Image per Push in die Artifact Registry.
Die Ausgabe sieht etwa so aus:
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
In dieser Anleitung können die Ergebnisse variieren, da der Beispielquellcode eine öffentlich verfügbare Linux-Distribution ist: debian10:latest. Linux-Distributionen und zugehörige Daten zu Sicherheitslücken werden fortlaufend aktualisiert.
Weitere Informationen zu zusätzlichen Google Cloud Tools und Best Practices zum Schutz Ihrer Softwarelieferkette finden Sie unter Sicherheit der Softwarelieferkette.
Weitere Informationen zu Best Practices für die Verwaltung von Sicherheitslücken in Linux finden Sie in der kostenlosen Online-Schulung der Linux Foundation. Siehe Sichere Software entwickeln.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.
Einzelne Ressourcen löschen
Prüfen Sie vor dem Entfernen des Repositorys, ob alle Images, die Sie beibehalten möchten, an einem anderen Speicherort verfügbar sind.
So löschen Sie das Repository:
Console
Öffnen Sie in der Google Cloud console die Seite Repositories.
Wählen Sie in der Repository-Liste das Repository
ods-build-repoaus.Klicken Sie auf Löschen.
gcloud
Führen Sie den folgenden Befehl aus, um das Repository ods-build-repo zu löschen:
gcloud artifacts repositories delete ods-build-repo --location=us-central1