Bilder auf Abruf scannen

Mit der On-Demand Scanning API können Sie lokal auf Ihrem Computer, in Container Registry oder in Artifact Registry gespeicherte Images scannen. Dies gibt Ihnen genaue Kontrolle über die Container, die nach Sicherheitslücken gescannt werden sollen. Mit On-Demand-Scan können Sie in Ihrer CI-/CD-Pipeline Bilder scannen, bevor Sie entscheiden, ob sie in einer Registry gespeichert werden sollen.

Preisinformationen finden Sie auf der Preisseite.

Auf dieser Seite wird beschrieben, wie Sie Container-Images mithilfe des On-Demand-Scans manuell scannen können.

Hinweis

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the On-Demand Scanning API.

    Enable the API

  4. Install the Google Cloud CLI.
  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Browser-based sign-in with the gcloud CLI.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Fügen Sie der Cloud SDK-Installation die Komponente local-extract hinzu.

    Cloud SDK-Komponentenmanager verwenden

    Der Komponentenmanager fordert Sie auf, die erforderlichen Komponenten zum ersten Mal zu scannen, wenn Sie den Scanbefehl ausführen.

    Systempaketmanager verwenden

    • Für Debian/Ubuntu:
      sudo apt install google-cloud-sdk-local-extract
          
    • Für Red Hat/Fedora/CentOS:
      sudo dnf install google-cloud-sdk-local-extract
          

      Alternativ können Sie im vorherigen Befehl dnf durch yum ersetzen.

  8. IAM-Rolle erteilen Administrator für On-Demand-Scans dem Nutzer oder Dienstkonto, das Sie mit dem On-Demand-Scan verwenden. Wenn Sie das Inhaberkonto des Projekts zum Ausführen der Scans verwenden, können Sie diesen Schritt überspringen.

Container-Image scannen

Mit dem folgenden Befehl scannen Sie ein Container-Image:

gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]

Wobei:

  • --remote ist ein optionales Flag, das Sie verwenden müssen, wenn Ihr Image remote in Artifact Registry oder Container Registry gehostet wird. Verwenden Sie für ein Remote-Image eines der folgenden Formate für IMAGE_URI:

    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
    • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID

    Für Images in Artifact Registry muss IMAGE_URI das REPOSTIORY_ID enthalten.

    Wenn Sie ein lokales Image verwenden, lassen Sie das Flag --remote weg und verwenden Sie eines der folgenden Formate für IMAGE_URI:

    • IMAGE_ID:TAG
    • IMAGE_ID
  • --location ist ein optionales Flag, um manuell den multiregionalen Standort auszuwählen, in dem die Scans ausgeführt werden. Die Auswahl einer Mehrfachregion, die näher an Ihrem Standort liegt, minimiert die Latenz. Folgende Standorte sind verfügbar: us, europe und asia. Der Standardspeicherort ist us.

  • --async ist ein optionales Flag, um den Scanvorgang asynchron auszuführen. Wenn Sie dieses Flag weglassen, wird Ihr Terminal blockiert, bis der Scanvorgang abgeschlossen ist.

Synchrones Scannen

Im folgenden Beispiel sehen Sie die Ausgabe eines synchronen Scans ohne das Flag --async:

$ gcloud artifacts docker images scan ubuntu:latest

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
  ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7]
Done.
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:03:04.185261Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Verwenden Sie den Scannamen, um die Ergebnisse der Sicherheitslücken abzurufen. Der Name ist der Wert von scan in der letzten Zeile der Ausgabenachricht.

Asynchrones Scannen

Das folgende Beispiel zeigt die Ausgabe eines asynchronen Scans:

$ gcloud artifacts docker images scan ubuntu:latest --async

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
Done.
Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Dadurch wird ein lang andauernder Vorgang gestartet und seine ID zurückgegeben, ohne das Terminal zu blockieren. Verwenden Sie die Vorgangs-ID, den Wert von name in der letzten Zeile der Ausgabenachricht, um den Vorgang abzufragen.

Lang andauernden Vorgang abfragen

Verwenden Sie die Vorgangs-ID aus der Ausgabe des asynchronen Scanbefehls, um den Vorgangsstatus zu prüfen.

gcloud artifacts docker images get-operation LRO_ID

Dabei ist LRO_ID die ID des lange laufenden Vorgangs.

Fahren Sie mit dem Beispiel des Abschnitts für asynchrones Scannen fort, um den Status des Vorgangs zu überprüfen:

$ gcloud artifacts docker images get-operation \
  projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Wenn die Ausgabe die Zeile done: true enthält, ist der Scan abgeschlossen. Verwenden Sie den Scannamen, um die Ergebnisse der Sicherheitslücken abzurufen. Der Name ist der Wert von scan in der letzten Zeile der Ausgabenachricht.

Scanergebnisse abrufen

Sie können die Scanergebnisse mit dem folgenden Befehl abrufen:

gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]

Wobei:

  • SCAN_NAME ist der Scanname. Sie finden es unten in der Ausgabe, wenn Sie den lang andauernden Vorgang abfragen, nachdem die Scans abgeschlossen sind.
  • --limit=X ist ein optionales Flag, das die Anzahl der in der Ausgabe angezeigten Vorkommen begrenzt.

Beispiel:

gcloud artifacts docker images list-vulnerabilities \
projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

createTime: '2021-01-05T23:05:42.956227Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
noteName: projects/goog-vulnz/notes/CVE-2018-1000654
resourceUri: ubuntu:latest
updateTime: '2021-01-05T23:05:42.956227Z'
vulnerability:
  cvssScore: 7.1
  effectiveSeverity: LOW
  packageIssue:
  - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    affectedPackage: libtasn1-6
    affectedVersion:
      kind: NORMAL
      name: 4.16.0
      revision: '2'
    fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    fixedPackage: libtasn1-6
    fixedVersion:
      kind: MAXIMUM
  severity: HIGH

Die Ausgabe dieses Befehls ist eine Liste der Vorkommen im Grafeas-Format. In diesem Fall wird eine im Image enthaltene Sicherheitslücke mit hoher Wichtigkeit angezeigt.

Die Scanergebnisse sind nach dem Abschluss des Vorgangs 48 Stunden verfügbar.

Nächste Schritte