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 ein Container-Image aus dem Quellcode erstellen, es auf Sicherheitslücken scannen, 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.
Lernziele
- Erstellen Sie mit Cloud Build ein Image.
- Scannen Sie das erstellte Image mit On-Demand-Scanning.
- Akzeptable Sicherheitslückengrade bewerten
- Speichern Sie das Image in 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.
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.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Administrator für On-Demand-Scanning (
roles/ondemandscanning.admin
)Artifact Registry-Autor (
roles/artifactregistry.writer
)
Erforderliche Rollen
Das Dienstkonto, das Sie mit Cloud Build verwenden, benötigt die folgenden Rollen:
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 „On-Demand Scanning Admin“ (Administrator für On-Demand-Scans) gewähren.
Wenn Sie ein vom Nutzer bereitgestelltes Dienstkonto für Cloud Build verwenden, müssen Sie beide Rollen zuweisen.
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-tutorial
und rufen Sie dieses Verzeichnis auf:mkdir ods-tutorial && cd ods-tutorial
Erstellen Sie eine Datei mit dem Namen
Dockerfile
und 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 für dasselbe Projekt fest, in dem Sie die APIs aktiviert haben:
gcloud config set project PROJECT_ID
Erstellen Sie am Speicherort
us-central1
ein Docker-Repository namensods-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
Build erstellen und scannen
In diesem Abschnitt führen Sie Ihre Build-Pipeline mit einer Build-Konfigurationsdatei aus. Eine Build-Konfigurationsdatei weist Cloud Build an, wie mehrere Aufgaben gemäß Ihren Spezifikationen ausgeführt werden sollen.
Erstellen Sie im Ordner
ods-tutorial/
die Dateicloudbuild.yaml
mit 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 Artifact Registry erstellt wurden. Wenn Sie andere Werte verwenden möchten, müssen Sie die Datei
cloudbuild.yaml
entsprechend ändern. Die Werte fürPROJECT_ID
undSEVERITY
werden im Build-Befehl an das Skript übergeben.Geben Sie die
SEVERITY
-Sicherheitsrisikostufen an, die Sie blockieren möchten, und starten Sie den Build.Sie können die folgenden Werte für
SEVERITY
verwenden:CRITICAL
HIGH
MEDIUM
LOW
Sie können mehrere Schweregrade mit einem regulären Ausdruck angeben.
Im folgenden Beispiel werden sowohl die Schweregrade
CRITICAL
als auchHIGH
angegeben. Damit wird Cloud Build angewiesen, nach Sicherheitslücken zu suchen, die auf oder über dem SchweregradHIGH
eingestuft sind.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yaml
Wo
- PROJECT_ID ist die Projekt-ID.
- Mit SEVERITY können Sie die Wichtigkeitsstufen festlegen, die Sie blockieren möchten. Wenn beim On-Demand-Scanning Sicherheitslücken gefunden werden, die einem der angegebenen Schweregrade entsprechen, schlägt der Build fehl.
Ergebnisse nachvollziehen
Wenn Sie den Wert SEVERITY
auf CRITICAL|HIGH
setzen, wird nach dem Scannen auf Sicherheitslücken durch On-Demand-Scanning geprüft, ob Sicherheitslücken auf der Ebene HIGH
und der schwerwiegenderen Ebene CRITICAL
vorhanden sind. Wenn in Ihrem Image keine übereinstimmenden Sicherheitslücken gefunden werden, wird der Build erfolgreich ausgeführt und Cloud Build überträgt Ihr Image per Push-Funktion an 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 beim On-Demand-Scanning HIGH
- oder CRITICAL
-Sicherheitslücken in Ihrem Image gefunden werden, schlägt der Build-Schritt scan
fehl, nachfolgende Build-Schritte werden nicht gestartet und Cloud Build überträgt kein Image per Push an 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
Die Ergebnisse in dieser Anleitung können variieren, da der Beispielquellcode eine öffentlich verfügbare Linux-Distribution, debian10:latest
, ist. Linux-Distributionen und die zugehörigen Daten zu Sicherheitslücken werden fortlaufend aktualisiert.
Weitere 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 Linux-Sicherheitslücken finden Sie in den kostenlosen Onlineschulungen der Linux Foundation. Weitere Informationen finden Sie unter 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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-repo
aus.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