Memindai paket OS secara manual

On-Demand Scanning API memungkinkan Anda memindai image yang disimpan secara lokal di komputer Anda atau dari jarak jauh di Artifact Registry. Tindakan ini memberi Anda kontrol terperinci atas container yang ingin dideteksi kerentanannya. Anda dapat menggunakan Pemindaian On-Demand untuk memindai image di pipeline CI/CD sebelum menentukan apakah akan menyimpannya di registry atau tidak. Lihat halaman Harga untuk mengetahui informasi harga.

Halaman ini menjelaskan cara memindai image container secara manual dengan Pemindaian On-Demand.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the On-Demand Scanning API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the On-Demand Scanning API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Menambahkan komponen local-extract ke penginstalan Google Cloud CLI Anda

    Menggunakan Pengelola Komponen Google Cloud CLI

    Pengelola komponen akan meminta Anda menginstal komponen yang diperlukan saat pertama kali Anda menjalankan perintah pemindaian.

    Menggunakan pengelola paket sistem

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

      Atau, Anda dapat mengganti dnf dengan yum di perintah sebelumnya.

  15. Berikan peran IAM Admin Pemindaian Sesuai Permintaan kepada pengguna atau akun layanan yang akan Anda gunakan dengan Pemindaian Sesuai Permintaan. Jika Anda menggunakan akun pemilik project untuk menjalankan pemindaian, Anda dapat melewati langkah ini.

Memindai image container

  • Pemindaian lokal:

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

    Untuk gambar lokal, gunakan salah satu format berikut untuk IMAGE_URI:

    • REPOSITORY:TAG
    • REPOSITORY
  • Pemindaian jarak jauh:

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

    Untuk gambar jarak jauh, gunakan salah satu format berikut untuk 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

    Untuk image di Artifact Registry, IMAGE_URI harus menyertakan REPOSITORY_ID.

Untuk pemindaian lokal dan jarak jauh, Anda dapat menggunakan flag opsional berikut:

  • --location adalah tanda untuk memilih multi-region tempat pemindaian dilakukan secara manual. Memilih multi-region yang lebih dekat dengan lokasi fisik Anda akan meminimalkan latensi. Lokasi yang tersedia adalah: us, europe, dan asia. Lokasi defaultnya adalah us.

  • --async adalah tanda untuk menjalankan proses pemindaian secara asinkron. Jika Anda menghilangkan tanda ini, terminal Anda akan diblokir hingga proses pemindaian selesai.

Pemindaian sinkron

Contoh berikut menunjukkan output pemindaian sinkron, tanpa tanda --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

Gunakan nama pemindaian untuk mengambil hasil kerentanan. Nama pemindaian adalah nilai scan di baris terakhir pesan output.

Pemindaian asinkron

Contoh berikut menunjukkan output dari melakukan pemindaian asinkron:

$ 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

Tindakan ini meluncurkan operasi yang berjalan lama dan menampilkan ID-nya tanpa memblokir terminal Anda. Gunakan ID operasi, nilai name di baris terakhir pesan output, untuk melakukan polling pada operasi.

Jajak pendapat untuk menjalankan operasi yang berjalan lama

Gunakan ID operasi, dari output perintah pemindaian asinkron, untuk memeriksa status operasi.

gcloud artifacts docker images get-operation LRO_ID

Dengan LRO_ID adalah ID operasi yang berjalan lama.

Melanjutkan contoh bagian pemindaian asinkron, untuk memeriksa status operasi:

$ 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

Jika output menyertakan baris done: true, operasi pemindaian telah selesai. Gunakan nama pemindaian untuk mengambil hasil kerentanan Nama adalah nilai scan di baris terakhir pesan output

Mengambil hasil pemindaian

Untuk mengambil hasil pemindaian setelah operasi pemindaian selesai, gunakan perintah berikut:

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

Dengan:

  • SCAN_NAME adalah nama pemindaian. Anda dapat menemukannya di bagian bawah output saat Anda melakukan polling operasi yang berjalan lama, setelah pemindaian selesai.
  • --limit=X adalah tanda opsional yang membatasi jumlah kemunculan yang ditampilkan dalam output. X adalah nilai numerik.

Contoh:

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
  cvssv3:
    attackComplexity: ATTACK_COMPLEXITY_LOW
    attackVector: ATTACK_VECTOR_NETWORK
    availabilityImpact: IMPACT_HIGH
    baseScore: 7.2
    confidentialityImpact: IMPACT_HIGH
    exploitabilityScore: 1.2
    impactScore: 5.9
    integrityImpact: IMPACT_HIGH
    privilegesRequired: PRIVILEGES_REQUIRED_HIGH
    scope: SCOPE_UNCHANGED
    userInteraction: USER_INTERACTION_NONE
  effectiveSeverity: MEDIUM

Output perintah ini adalah daftar kemunculan dalam format Grafeas. Dalam hal ini, kerentanan yang ditemukan dalam image memiliki tingkat keparahan sedang.

Hasil pemindaian tersedia selama 48 jam setelah operasi pemindaian selesai.

Langkah berikutnya