Dengan On-Demand Scanning API, Anda dapat memindai image yang disimpan secara lokal di komputer, atau dari jarak jauh di Artifact Registry atau Container Registry. Anda dapat menggunakan Pemindaian On-Demand untuk memindai image di pipeline CI/CD, untuk kerentanan sistem dan kerentanan paket Go sebelum memutuskan apakah akan menyimpannya di registry. Lihat Halaman harga untuk mengetahui informasi harga.
Halaman ini menjelaskan cara memindai image container secara manual untuk menemukan kerentanan sistem dan kerentanan paket Go.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API On-Demand Scanning.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API On-Demand Scanning.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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 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
denganyum
dalam perintah sebelumnya.
-
Untuk Debian/Ubuntu:
- Berikan peran IAM On-Demand Scanning Admin kepada akun pengguna atau layanan yang akan Anda gunakan dengan Pemindaian On-Demand. Jika 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 image 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 image 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 flag opsional 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
, danasia
. Lokasi defaultnya adalahus
.--async
adalah flag opsional untuk menjalankan proses pemindaian secara asinkron. Jika Anda menghilangkan tanda ini, terminal akan diblokir hingga proses pemindaian selesai.
Pemindaian sinkron
Contoh berikut menunjukkan output pemindaian sinkron, tanpa
tanda --async
:
$ gcloud artifacts docker images scan golang:1.17.6-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: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-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
Gunakan nama pemindaian untuk mengambil hasil kerentanan.
Nama pemindaian adalah nilai scan
di baris terakhir pesan output.
Pemindaian asinkron
Contoh berikut menunjukkan output dari pemindaian asinkron:
$ gcloud artifacts docker images scan golang:1.17.6-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/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status. metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
Tindakan ini akan 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.
Melakukan polling 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/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-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
Jika output menyertakan baris done: true
, operasi pemindaian
selesai. Gunakan nama pemindaian untuk mengambil hasil kerentanan.
Namanya 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 keterangan:
SCAN_NAME adalah nama pemindaian. Anda dapat menemukannya di baris terakhir output saat menjalankan pemindaian sinkron atau mengambil sampel operasi yang berjalan lama, setelah pemindaian selesai.
--limit=X
adalah flag opsional yang membatasi jumlah kemunculan yang ditampilkan dalam output.X
adalah nilai numerik.
Contoh:
createTime: '2022-01-11T16:58:11.972043Z' kind: VULNERABILITY name: projects/my-project/locations/us/occurrences/0c607d9b-aff4-4cde-86b7-e2c0a865aadd noteName: projects/goog-vulnz/notes/CVE-2021-38297 resourceUri: golang:1.16.13-alpine updateTime: '2022-01-11T16:58:11.972043Z' vulnerability: cvssScore: 7.5 effectiveSeverity: CRITICAL longDescription: Go before 1.16.9 and 1.17.x before 1.17.2 has a Buffer Overflow via large arguments in a function invocation from a WASM module, when GOARCH=wasm GOOS=js is used. packageIssue: - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.15 affectedPackage: go affectedVersion: fullName: 1.16.13 kind: NORMAL name: 1.16.13 effectiveSeverity: CRITICAL fixedCpeUri: cpe:/o:alpine:alpine_linux:3.15 fixedPackage: go fixedVersion: fullName: 1.17.2 kind: NORMAL name: 1.17.2 packageType: GO_STDLIB relatedUrls: - label: More Info url: https://security-tracker.debian.org/tracker/CVE-2021-38297 - label: More Info url: https://access.redhat.com/security/cve/CVE-2021-38297 - label: More Info url: https://nvd.nist.gov/vuln/detail/CVE-2021-38297 severity: HIGH shortDescription: CVE-2021-38297
Output perintah ini adalah daftar kemunculan dalam format Grafeas. Dalam hal ini, laporan menunjukkan satu kerentanan keparahan tingkat tinggi yang ditemukan dalam gambar.
Pemindaian On-Demand mengidentifikasi dua jenis kerentanan paket Go:
packageType:GO_STDLIB
. Kerentanan library standar Go. Hal ini menunjukkan bahwa kerentanan ditemukan di toolchain Go yang digunakan untuk mem-build biner, atau di library standar yang dipaketkan dengan toolchain. Perbaikan yang mungkin dilakukan adalah mengupgrade toolchain build Anda.packageType:GO
. Kerentanan paket Go. Hal ini menunjukkan bahwa kerentanan ditemukan dalam paket pihak ketiga. Solusi yang mungkin adalah mengupgrade modul dependen Anda.
Hasil pemindaian tersedia selama 48 jam setelah operasi pemindaian selesai.
Langkah selanjutnya
- Gunakan On-Demand Scanning API di pipeline Cloud Build Anda.
- Gunakan Artifact Analysis untuk memindai dan terus memperbarui informasi kerentanan untuk image yang disimpan di Artifact Registry.