Java-Pakete manuell scannen

Mit der On-Demand Scanning API können Sie lokal auf Ihrem Computer oder aus der Ferne in Artifact Registry oder Container Registry gespeicherte Images scannen. Mit dem On-Demand-Scan können Sie Images in Ihrer CI/CD-Pipeline auf System- und Java-Paketsicherheitslücken (Maven) prüfen, bevor Sie entscheiden, ob Sie sie in einer Registry speichern möchten. Preisinformationen finden Sie auf der Preisseite.

Auf dieser Seite wird beschrieben, wie Sie Container-Images manuell auf Systemlücken und Maven-Paketlücken prüfen.

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 On-Demand Scanning API.

    Enable the API

  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 On-Demand Scanning API.

    Enable the API

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

    gcloud init
  12. Komponente local-extract zur Google Cloud CLI-Installation hinzufügen

    Google Cloud CLI-Komponentenmanager verwenden

    Wenn Sie den Scanbefehl zum ersten Mal ausführen, werden Sie vom Komponentenmanager aufgefordert, die erforderlichen Komponenten zu installieren.

    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.

  13. Weisen Sie dem Nutzer- oder Dienstkonto, das Sie für das On-Demand-Scannen verwenden möchten, die IAM-Rolle On-Demand Scanning Admin zu. Wenn Sie die Prüfungen mit dem Inhaberkonto des Projekts ausführen, können Sie diesen Schritt überspringen.

Container-Image scannen

  • Lokaler Scan:

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

    Verwenden Sie für ein lokales Image eines der folgenden Formate für die IMAGE_URI:

    • REPOSITORY:TAG
    • REPOSITORY
  • Remote-Scan:

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

    Verwenden Sie für ein Remote-Image eines der folgenden Formate für die 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

    Bei Images in Artifact Registry muss die IMAGE_URI die REPOSITORY_ID enthalten.

Sowohl für lokale als auch für Remote-Scans können Sie die folgenden optionalen Flags verwenden:

  • --location ist ein optionales Flag, mit dem Sie die Multiregion, in der der Scan ausgeführt wird, manuell auswählen können. Wenn Sie einen multiregionalen Standort auswählen, der Ihrem physischen Standort näher ist, wird die Latenz minimiert. Verfügbare Standorte sind us, europe und asia. Der Standardspeicherort ist us.

  • --async ist ein optionales Flag, mit dem der Scanvorgang asynchron ausgeführt wird. Wenn Sie dieses Flag weglassen, wird Ihr Terminal blockiert, bis der Scanvorgang abgeschlossen ist.

Synchrones Scannen

Das folgende Beispiel zeigt die Ausgabe eines synchronen Scans ohne das Flag --async:

$ gcloud artifacts docker images scan jenkins:2.60.3-alpine

✓ 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: jenkins:2.60.3-alpine
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 des Sicherheitslücken-Scans abzurufen. Im Beispiel ist der Scanname 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 jenkins:2.60.3-alpine --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: jenkins:2.60.3-alpine
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Dadurch wird ein Vorgang mit langer Ausführungszeit gestartet und seine ID zurückgegeben, ohne dass das Terminal blockiert wird. Verwenden Sie die Vorgangs-ID, den Wert von name in der letzten Zeile der Ausgabemeldung, um den Vorgang abzufragen.

Lang andauernden Vorgang abfragen

Verwenden Sie die Vorgangs-ID aus der Ausgabe des Befehls für das asynchrone Scannen, um den Vorgangsstatus zu prüfen:

gcloud artifacts docker images get-operation LRO_ID

Dabei ist LRO_ID die ID des Vorgangs mit langer Ausführungszeit.

Anhand des Beispiels aus dem Abschnitt zum asynchronen Scannen können Sie den Status des Vorgangs so prü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: jenkins:2.60.3-alpine
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 Scanvorgang abgeschlossen. Verwenden Sie den Scannamen, um die Ergebnisse des Scans auf Sicherheitslücken abzurufen. Der Scanname ist der Wert von scan in der letzten Zeile der Ausgabemeldung.

Scanergebnisse abrufen

Führen Sie den folgenden Befehl aus, um die Scanergebnisse abzurufen, nachdem der Scanvorgang abgeschlossen wurde:

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

Wobei:

  • SCAN_NAME ist der Scanname. Sie finden sie in der letzten Zeile der Ausgabe, wenn Sie entweder einen synchronen Scan ausführen oder nach Abschluss des Scans den lang laufenden Vorgang abfragen.

  • --limit=X ist ein optionales Flag, mit dem die Anzahl der Vorkommen in der Ausgabe begrenzt wird. X ist ein numerischer Wert.

Beispiel:

createTime: '2021-06-29T17:01:18.819477Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/06305977-f557-4772-8586-4260684291d3
noteName: projects/my-project/notes/CVE-2014-0114
resourceUri: jenkins:2.60.3-alpine
updateTime: '2021-06-29T17:01:18.819477Z'
vulnerability:
  cvssScore: 4.3
  effectiveSeverity: MEDIUM
  longDescription: http/conn/ssl/SSLConnectionSocketFactory.java in ...
  packageIssue:
  - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    affectedPackage: org.apache.httpcomponents:httpclient
    affectedVersion:
      fullName: 4.0.2
      kind: NORMAL
      name: 4.0.2
    effectiveSeverity: MEDIUM
    fixedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    fixedPackage: org.apache.httpcomponents:httpclient
    fixedVersion:
      fullName: 4.3.6
      kind: NORMAL
      name: 4.3.6
    packageType: MAVEN
  relatedUrls:
  - label: More Info
    url: https://security-tracker.debian.org/tracker/CVE-2015-5262
  severity: MEDIUM
  shortDescription: CVE-2015-5262

Die Ausgabe dieses Befehls ist eine Liste der Vorkommen im Grafeas-Format. In diesem Fall wird eine Sicherheitslücke mit mittlerer Schwere angezeigt, die im Image gefunden wurde. Maven-Paketlücken enthalten das Feld packageType:MAVEN.

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

Nächste Schritte