Memindai paket Java secara otomatis

Dokumen ini menjelaskan cara mengaktifkan Container Scanning API, mengirim image ke Artifact Registry, dan melihat daftar kerentanan yang ditemukan dalam image.

Artifact Analysis menyimpan informasi kerentanan sebagai catatan. Kemunculan dibuat untuk setiap instance catatan yang terkait dengan gambar. Lihat dokumen ringkasan dan harga untuk mengetahui informasi selengkapnya.

Sebelum memulai

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

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

    Go to project selector

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

  10. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

    gcloud init
  14. Buat repositori Docker di Artifact Registry dan kirim image container dengan kode Java Anda ke repositori. Jika Anda belum terbiasa dengan Artifact Registry, lihat Panduan memulai Docker.

    Untuk mengetahui informasi tentang cara menggunakan Cloud Build untuk membangun dan membuat container aplikasi Java Anda, lihat Membangun, menguji, dan membuat container aplikasi Java.
  15. Melihat kerentanan gambar

    Artifact Analysis memindai image baru saat diupload ke Artifact Registry. Pemindaian ini mengekstrak informasi tentang paket dalam container.

    Anda dapat melihat kemunculan kerentanan untuk image Anda di Artifact Registry menggunakan konsol Google Cloud , Google Cloud CLI, atau Container Analysis API. Jika gambar memiliki kerentanan, Anda dapat memperoleh detailnya.

    Analisis Artefak hanya memperbarui metadata untuk gambar yang di-push atau ditarik dalam 30 hari terakhir. Setelah 30 hari, metadata tidak akan diperbarui lagi, dan hasilnya akan menjadi tidak valid. Selain itu, Analisis Artefak mengarsipkan metadata yang sudah tidak berlaku selama lebih dari 90 hari, dan metadata tersebut tidak akan tersedia di konsol Google Cloud , gcloud, atau menggunakan API. Untuk memindai ulang gambar dengan metadata yang tidak berlaku atau diarsipkan, tarik gambar tersebut. Memperbarui metadata dapat memerlukan waktu hingga 24 jam.

    Melihat kemunculan di konsol Google Cloud

    Untuk melihat kerentanan dalam image:

    1. Dapatkan daftar repositori.

      Buka halaman Repositori

    2. Di daftar repositori, klik repositori.

    3. Di daftar gambar, klik nama gambar.

      Jumlah total kerentanan untuk setiap ringkasan gambar ditampilkan di kolom Kerentanan.

      Screenshot gambar dengan kerentanan

    4. Untuk melihat daftar kerentanan pada image, klik link di kolom Kerentanan.

      Bagian Hasil pemindaian menampilkan ringkasan jenis paket yang dipindai, total kerentanan, kerentanan dengan perbaikan yang tersedia, kerentanan tanpa perbaikan, dan tingkat keparahan efektif.

      Screenshot bagian Hasil Pemindaian dengan kerentanan, perbaikan, dan tingkat keparahan yang efektif

      Tabel kerentanan mencantumkan nama Kerentanan dan Eksposur Umum (CVE) untuk setiap kerentanan yang ditemukan, tingkat keparahan efektif, skor Sistem Penskoran Kerentanan Umum (CVSS), perbaikan (jika tersedia), nama paket yang berisi kerentanan, dan jenis paket.

      Anda dapat memfilter dan mengurutkan file ini untuk memeriksa file, direktori, atau jenis file tertentu menurut ekstensi file.

      Google Cloud menampilkan hingga 1.200 kerentanan dalam tabel ini. Jika image Anda memiliki lebih dari 1.200 kerentanan, Anda harus menggunakan gcloud atau API untuk melihat daftar lengkapnya.

    5. Untuk mengetahui detail CVE tertentu, klik nama CVE.

    6. Untuk melihat detail kemunculan kerentanan seperti nomor versi dan lokasi yang terpengaruh, klik Lihat atau Lihat yang Diperbaiki di baris dengan nama kerentanan. Teks link adalah Lihat untuk kerentanan tanpa perbaikan, dan Lihat yang Sudah Diperbaiki untuk kerentanan yang telah diperbaiki.

    Melihat kemunculan menggunakan gcloud

    Untuk melihat kemunculan image di Artifact Registry, jalankan perintah berikut:

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

    Dengan:

    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori. Anda tidak dapat menentukan tag gambar dengan perintah ini.

      Secara default, perintah ini menampilkan 10 gambar terbaru. Untuk menampilkan jumlah gambar yang berbeda, gunakan tanda --show-occurrences-from. Misalnya, perintah berikut menampilkan 25 gambar terbaru.

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

    Untuk melihat kerentanan pada tag gambar atau lapisan:

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

    atau

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

    Dengan:

    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori.
    • TAG adalah tag gambar yang ingin Anda dapatkan informasinya.
    • HASH adalah ringkasan gambar.

      Artifact Analysis menampilkan hasil yang mencakup packageType.

    Untuk memfilter kemunculan kerentanan:

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

    Dengan:

    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori.
    • FILTER_EXPRESSION adalah contoh ekspresi filter dalam format yang dijelaskan dalam Memfilter kemunculan kerentanan.

    Melihat kemunculan menggunakan API

    Untuk mendapatkan daftar kemunculan dalam project Anda:

     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
    

    Untuk mendapatkan ringkasan kerentanan dalam project Anda:

     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
    

    Untuk mendapatkan detail tentang kemunculan tertentu:

     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
    

    Melihat kerentanan di Cloud Build

    Jika menggunakan Cloud Build, Anda juga dapat melihat kerentanan image di panel samping Insight keamanan dalam konsol Google Cloud .

    Panel samping Insight keamanan memberikan ringkasan tingkat tinggi informasi keamanan build untuk artefak yang disimpan di Artifact Registry. Untuk mempelajari lebih lanjut panel samping dan cara menggunakan Cloud Build untuk membantu melindungi supply chain software Anda, lihat Melihat insight keamanan build.

    Memfilter kemunculan

    Anda dapat menggunakan string filter dalam perintah gcloud dan Artifact Analysis API untuk memfilter kemunculan sebelum melihatnya. Bagian berikut menjelaskan filter penelusuran yang didukung.

    Melihat kemunculan jenis tertentu

    Anda dapat menggunakan nilai kind untuk memfilter menurut jenis kemunculan. Lihat jenis yang tersedia.

    Contoh berikut menunjukkan cara memfilter kemunculan deployment untuk sebuah image:

    gcloud

    Di gcloud CLI, jalankan perintah berikut:

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

    Dengan:

    • DEPLOYMENT adalah jenis kejadian.
    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori.

    API

    Dalam kueri API, gunakan ekspresi filter berikut:

    kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"

    Dengan:

    • DEPLOYMENT adalah jenis kejadian.
    • RESOURCE_URL adalah URL lengkap gambar dalam format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.

    Anda dapat menggunakan fungsi hasPrefix untuk memfilter dengan cakupan yang lebih luas.

    Misalnya, filter berikut untuk kemunculan jenis tertentu di banyak gambar:

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

    Dengan:

    • RESOURCE_URL_PREFIX menentukan substring dari URL resource.
      • Untuk memfilter semua versi gambar, hapus ringkasan gambar. Gunakan format: https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
      • Untuk memfilter semua image dalam project, tentukan hanya lokasi resource dan project. Gunakan format: https://LOCATION-docker.pkg.dev/PROJECT_ID/

    Melihat kemunculan kerentanan

    Untuk mengambil daftar kemunculan kerentanan untuk gambar, Anda dapat memfilter berdasarkan jenis kemunculan VULNERABILITY.

    gcloud

    Di gcloud CLI, jalankan perintah berikut:

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

    Dengan:

    • VULNERABILITY adalah jenis kejadian.
    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori.

    API

    Dalam kueri API, gunakan ekspresi filter berikut:

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

    Dengan:

    • ENCODED_RESOURCE_URL adalah jalur yang dienkode ke gambar Anda. Untuk mempelajari encoding, lihat Encoding URL.

    Untuk mengetahui informasi selengkapnya tentang penggunaan API, lihat projects.occurrences.get.

    Memfilter menurut jenis paket

    Untuk membatasi hasil pemindaian kerentanan ke satu jenis paket, jalankan perintah gcloud CLI berikut:

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

    Dengan:

    • VULNERABILITY adalah jenis kejadian.
    • PACKAGE_TYPE adalah jenis paket bahasa aplikasi. Jenis yang tersedia adalah: COMPOSER, GO, MAVEN, NPM, NUGET, PYTHON, RUBYGEMS, dan RUST.
    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori. Anda tidak dapat menentukan tag gambar dengan perintah ini.

    Melihat gambar yang terkait dengan catatan tertentu

    Anda dapat mengambil daftar resource yang terkait dengan ID catatan tertentu. Misalnya, Anda dapat mencantumkan gambar dengan kerentanan CVE tertentu.

    Untuk mencantumkan semua gambar dalam project yang terkait dengan catatan tertentu, gunakan ekspresi filter berikut:

    gcloud

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

    Dengan:

    • goog-vulnz adalah PROVIDER_PROJECT_ID untuk analisis kerentanan Artifact Analysis. Jika Anda menggunakan Analisis Artefak dalam project kustom, Anda dapat mengganti nilai ini dengan project ID penyedia Anda sendiri.
    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • NOTE_ID adalah ID catatan. Misalnya, saat Anda melihat kerentanan dalam hasil pemindaian Artifact Analysis, kerentanan tersebut sering kali menggunakan format ID CVE yang mirip dengan CVE-2019-12345.

    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

    Dengan:

    • goog-vulnz adalah PROVIDER_PROJECT_ID untuk analisis kerentanan Artifact Analysis. Jika Anda menggunakan Analisis Artefak dalam project kustom, Anda dapat mengganti nilai ini dengan project ID penyedia Anda sendiri.
    • ENCODED_RESOURCE_URL adalah jalur yang dienkode ke gambar Anda. Untuk mempelajari encoding, lihat Encoding URL.
    • NOTE_ID adalah ID catatan. Misalnya, saat Anda melihat kerentanan dalam hasil pemindaian Artifact Analysis, kerentanan tersebut sering kali menggunakan format ID CVE yang mirip dengan CVE-2019-12345.

    Untuk memeriksa gambar tertentu untuk catatan tertentu, gunakan ekspresi filter berikut:

    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
    

    Di mana

    • LOCATION adalah lokasi repositori regional atau multi-regional.
    • PROJECT_ID adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE_ID adalah nama image di repositori. Anda tidak dapat menentukan tag gambar dengan perintah ini.

    API

    Dalam kueri API, tambahkan ekspresi filter berikut:

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

    Dengan:

    • RESOURCE_URL adalah URL lengkap gambar dalam format https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.
    • goog-vulnz adalah PROVIDER_PROJECT_ID untuk analisis kerentanan Artifact Analysis. Jika Anda menggunakan Analisis Artefak dalam project kustom, Anda dapat mengganti nilai ini dengan project ID penyedia Anda sendiri.
    • NOTE_ID adalah ID catatan. Catatan terkait keamanan sering kali diformat sebagai CVE-2019-12345.

    Langkah berikutnya

    • Gunakan notifikasi Pub/Sub untuk mendapatkan notifikasi tentang kerentanan dan metadata lainnya.

    • Buat pengesahan dengan mengintegrasikan Artifact Analysis dengan Otorisasi Biner untuk mencegah image container dengan masalah keamanan yang diketahui berjalan di lingkungan deployment Anda.