Java-Pakete automatisch scannen

In diesem Dokument wird erläutert, wie Sie die Container Scanning API aktivieren, ein Image per Push in die Artifact Registry übertragen und die Liste der im Image gefundenen Sicherheitslücken aufrufen.

In der Artefaktanalyse werden Informationen zu Sicherheitslücken als Hinweise gespeichert. Für jede mit einem Image verknüpfte Instanz eines Hinweises wird ein Vorkommen erstellt. Weitere Informationen finden Sie in den Dokumenten Übersicht und Preise.

Hinweise

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  9. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Erstellen Sie ein Docker-Repository in Artifact Registry und verschieben Sie ein Container-Image mit Ihrem Java-Code in das Repository. Wenn Sie mit Artifact Registry nicht vertraut sind, lesen Sie die Docker-Kurzanleitung.

    Informationen dazu, wie Sie mit Cloud Build Java-Anwendungen erstellen und containerisieren, finden Sie unter Java-Anwendungen erstellen, testen und containerisieren.

Image-Sicherheitslücken ansehen

Artefaktanalyse scannt neue Images, sobald sie in Artifact Registry hochgeladen werden. Bei diesem Scan werden Informationen zu den Paketen im Container extrahiert.

Sie können Sicherheitslücken für Ihre Images in der Artifact Registry mit der Google Cloud Console, der Google Cloud CLI oder der Container Analysis API ansehen. Wenn ein Image Sicherheitslücken aufweist, können Sie dann die Details abrufen.

Die Artefaktanalyse aktualisiert nur die Metadaten für Images, die in den letzten 30 Tagen per Push oder Pull übertragen wurden. Nach 30 Tagen werden die Metadaten nicht mehr aktualisiert und die Ergebnisse sind veraltet. Außerdem archiviert die Artefaktanalyse Metadaten, die seit mehr als 90 Tagen inaktiv sind. Diese Metadaten sind dann nicht mehr in der Google Cloud Console, in gcloud oder über die API verfügbar. Wenn Sie ein Image mit veralteten oder archivierten Metadaten noch einmal scannen möchten, übertragen Sie es per Pull. Das Aktualisieren von Metadaten kann bis zu 24 Stunden dauern.

Vorkommnisse in der Google Cloud Console ansehen

So rufen Sie die Sicherheitslücken in einem Bild auf:

  1. Liste der Repositories abrufen

    Zur Seite „Repositories“

  2. Klicken Sie in der Liste der Repositories auf ein Repository.

  3. Klicken Sie in der Bilderliste auf einen Bildnamen.

    Die Gesamtzahl der Sicherheitslücken für jeden Image-Digest wird in der Spalte Sicherheitslücken angezeigt.

    Screenshot eines Images mit Sicherheitslücken

  4. Wenn Sie die Liste der Sicherheitslücken für ein Image aufrufen möchten, klicken Sie auf den Link in der Spalte Vulnerabilities (Sicherheitslücken).

    Im Bereich Scanergebnisse finden Sie eine Zusammenfassung der gescannten Pakettypen, der Sicherheitslücken insgesamt, der Sicherheitslücken mit verfügbaren Lösungen, der Sicherheitslücken ohne Lösungen und des effektiven Schweregrads.

    Screenshot des Bereichs „Scanergebnisse“ mit Sicherheitslücken, Fehlerkorrekturen und effektivem Schweregrad

    In der Tabelle mit den Sicherheitslücken sind der CVE-Name (Common Vulnerabilities and Exposures) für jede gefundene Sicherheitslücke, der effektive Schweregrad, die CVSS-Punktzahl (Common Vulnerability Scoring System), Fehlerkorrekturen (falls verfügbar), der Name des Pakets, das die Sicherheitslücke enthält, und der Pakettyp aufgeführt.

    Sie können diese Dateien filtern und sortieren, um eine bestimmte Datei, ein bestimmtes Verzeichnis oder einen bestimmten Dateityp anhand der Dateiendung zu prüfen.

    In der Google Cloud Console werden in dieser Tabelle bis zu 1.200 Sicherheitslücken angezeigt. Wenn Ihr Image mehr als 1.200 Sicherheitslücken aufweist, müssen Sie gcloud oder die API verwenden, um die vollständige Liste aufzurufen.

  5. Klicken Sie auf den Namen der CVE, um Details zu einer bestimmten CVE aufzurufen.

  6. Wenn Sie Details zum Vorkommen der Sicherheitslücke wie die Versionsnummer und den betroffenen Speicherort aufrufen möchten, klicken Sie in der Zeile mit dem Namen der Sicherheitslücke auf Anzeigen oder Behoben ansehen. Der Linktext lautet Anzeigen für Sicherheitslücken ohne Korrektur und Behoben ansehen für Sicherheitslücken, für die eine Korrektur angewendet wurde.

Vorkommnisse mit gcloud ansehen

Führen Sie den folgenden Befehl aus, um Vorkommen eines Images in Artifact Registry aufzurufen:

  gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Wobei:

  • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository. Mit diesem Befehl können Sie kein Image-Tag angeben.

    Standardmäßig gibt der Befehl die zehn neuesten Bilder zurück. Wenn Sie eine andere Anzahl von Bildern anzeigen möchten, verwenden Sie das Flag --show-occurrences-from. Mit dem folgenden Befehl werden beispielsweise die 25 neuesten Bilder zurückgegeben.

    gcloud artifacts docker images list --show-occurrences-from=25 \
        us-central1-docker.pkg.dev/my-project/my-repo/my-image
    

So zeigen Sie Sicherheitslücken für ein Image-Tag oder eine Ebene an:

  gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
      --show-package-vulnerability

oder

  gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
      --show-package-vulnerability

Wobei:

  • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository.
  • TAG ist das Image-Tag, über das Sie Informationen erhalten möchten.
  • HASH ist der Image-Digest.

    Die Artefaktanalyse gibt Ergebnisse zurück, die die packageType enthalten.

So filtern Sie die Vorkommen von Sicherheitslücken:

  gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
      --occurrence-filter=FILTER_EXPRESSION

Wobei:

  • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository.
  • FILTER_EXPRESSION ist ein Beispiel für einen Filterausdruck in dem Format, das unter Vorkommen von Sicherheitslücken filtern erläutert wird.

Vorkommnisse mit der API aufrufen

So rufen Sie eine Liste der Vorkommen in Ihrem Projekt ab:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

So erhalten Sie eine Zusammenfassung der Sicherheitslücken in Ihrem Projekt:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary

So rufen Sie Details zu einem bestimmten Vorkommen ab:

 curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID

Sicherheitslücken in Cloud Build ansehen

Wenn Sie Cloud Build verwenden, können Sie sich Image-Sicherheitslücken auch in der Seitenleiste Sicherheitsinformationen in der Google Cloud Console ansehen.

Im Seitenbereich Sicherheitsinformationen finden Sie einen allgemeinen Überblick über die Informationen zur Build-Sicherheit für Artefakte, die in Artifact Registry gespeichert sind. Weitere Informationen zum Seitenbereich und dazu, wie Sie Cloud Build zum Schutz Ihrer Softwarelieferkette verwenden können, finden Sie unter Sicherheitserkenntnisse zu Builds ansehen.

Vorkommen filtern

Sie können Filterstrings in den gcloud-Befehlen und der Artifact Analysis API verwenden, um Vorkommen vor dem Abruf zu filtern. In den folgenden Abschnitten werden die unterstützten Suchfilter beschrieben.

Vorkommen eines bestimmten Typs aufrufen

Mit dem Wert kind können Sie nach dem Ereignistyp filtern. Verfügbare Arten

Die folgenden Beispiele zeigen, wie Sie nach Bereitstellungsvorkommnissen für ein Bild filtern:

gcloud

Führen Sie in der gcloud CLI den folgenden Befehl aus:

gcloud artifacts docker images list --show-occurrences \
    --occurrence-filter='kind="DEPLOYMENT"' --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Wobei:

  • DEPLOYMENT ist die Art des Vorkommens.
  • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository.

API

Verwenden Sie in Ihrer API-Abfrage den folgenden Filterausdruck:

kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"

Wobei:

  • DEPLOYMENT ist die Art des Vorkommens.
  • RESOURCE_URL ist die vollständige URL des Bildes im Format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.

Mit der Funktion hasPrefix können Sie einen breiteren Filter verwenden.

Die folgenden Filter beziehen sich beispielsweise auf Vorkommen einer bestimmten Art in vielen Bildern:

kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

Wobei:

  • Mit RESOURCE_URL_PREFIX wird ein Teilstring aus einer Ressourcen-URL angegeben.
    • Wenn Sie nach allen Versionen eines Bilds filtern möchten, lassen Sie den Bild-Digest weg. Verwenden Sie das Format: https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@.
    • Wenn Sie nach allen Bildern in einem Projekt filtern möchten, geben Sie nur den Speicherort der Ressource und das Projekt an. Verwenden Sie das Format: https://LOCATION-docker.pkg.dev/PROJECT_ID/.

Vorkommen von Sicherheitslücken ansehen

Wenn Sie eine Liste der Vorkommen von Sicherheitslücken für ein Image abrufen möchten, können Sie nach dem Vorkommenstyp VULNERABILITY filtern.

gcloud

Führen Sie in der gcloud CLI den folgenden Befehl aus:

gcloud artifacts docker images list \
    --show-occurrences \
    --occurrence-filter='kind="VULNERABILITY"' \
    --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Wobei:

  • VULNERABILITY ist die Art des Vorkommens.
  • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository.

API

Verwenden Sie in Ihrer API-Abfrage den folgenden Filterausdruck:

GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

Wobei:

  • ENCODED_RESOURCE_URL ist der codierte Pfad zu Ihrem Bild. Weitere Informationen zur Codierung finden Sie unter URL-Codierung.

Weitere Informationen zur Verwendung der API finden Sie unter projects.occurrences.get.

Nach Pakettyp filtern

Wenn Sie die Ergebnisse des Sicherheitslücken-Scans auf einen Pakettyp beschränken möchten, führen Sie den folgenden gcloud CLI-Befehl aus:

  gcloud artifacts docker images list /
      --show-occurrences /
      --occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Wobei:

  • VULNERABILITY ist die Art des Vorkommens.
  • PACKAGE_TYPE ist der Pakettyp der Anwendungssprache. Verfügbare Typen sind: COMPOSER, GO, MAVEN, NPM, NUGET, PYTHON, RUBYGEMS und RUST.
  • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository. Mit diesem Befehl können Sie kein Image-Tag angeben.

Bilder aufrufen, die einem bestimmten Hinweis zugeordnet sind

Sie können eine Liste von Ressourcen abrufen, die einer bestimmten Hinweis-ID zugeordnet sind. So können Sie beispielsweise Images mit einer bestimmten CVE-Sicherheitslücke auflisten.

Verwenden Sie den folgenden Filterausdruck, um alle Images in einem Projekt aufzulisten, die einem bestimmten Hinweis zugeordnet sind:

gcloud

gcloud artifacts docker images list /
    --show-occurrences /
    --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
    LOCATION-docker.pkg.dev/PROJECT_ID

Wobei:

  • goog-vulnz ist der PROVIDER_PROJECT_ID für die Sicherheitslückenanalyse der Artefaktanalyse. Wenn Sie Artefaktanalyse in einem benutzerdefinierten Projekt verwenden, können Sie diesen Wert durch Ihre eigene Anbieterprojekt-ID ersetzen.
  • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • NOTE_ID ist die ID des Hinweises. Wenn Sie beispielsweise in den Scanergebnissen der Artefaktanalyse eine Sicherheitslücke sehen, wird häufig die CVE-ID-Formatierung verwendet, die CVE-2019-12345 ähnelt.

API

GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22

Wobei:

  • goog-vulnz ist der PROVIDER_PROJECT_ID für die Sicherheitslückenanalyse der Artefaktanalyse. Wenn Sie Artefaktanalyse in einem benutzerdefinierten Projekt verwenden, können Sie diesen Wert durch Ihre eigene Anbieterprojekt-ID ersetzen.
  • ENCODED_RESOURCE_URL ist der codierte Pfad zu Ihrem Bild. Weitere Informationen zur Codierung finden Sie unter URL-Codierung.
  • NOTE_ID ist die ID des Hinweises. Wenn Sie beispielsweise in den Scanergebnissen der Artefaktanalyse eine Sicherheitslücke sehen, wird häufig die CVE-ID-Formatierung verwendet, die CVE-2019-12345 ähnelt.

Mit dem folgenden Filterausdruck können Sie ein bestimmtes Image auf einen konkreten Hinweis prüfen:

gcloud

gcloud artifacts docker images list /
    --show-occurrences /
    --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID

Dabei gilt:

  • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  • PROJECT_ID ist Ihre Projekt-ID in der Google Cloud Console.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE_ID ist der Name des Images im Repository. Mit diesem Befehl können Sie kein Image-Tag angeben.

API

Fügen Sie Ihrer API-Abfrage den folgenden Filterausdruck hinzu:

resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \
AND noteId="NOTE_ID"

Wobei:

  • RESOURCE_URL ist die vollständige URL des Bildes im Format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.
  • goog-vulnz ist der PROVIDER_PROJECT_ID für die Sicherheitslückenanalyse der Artefaktanalyse. Wenn Sie Artefaktanalyse in einem benutzerdefinierten Projekt verwenden, können Sie diesen Wert durch Ihre eigene Anbieterprojekt-ID ersetzen.
  • NOTE_ID ist die ID des Hinweises. Sicherheitsrelevante Hinweise werden häufig als CVE-2019-12345 formatiert.

Nächste Schritte