Dengan menggunakan Pemindaian On-Demand sebagai bagian dari pipeline Cloud Build, Anda dapat memblokir build jika image container memiliki kerentanan dengan tingkat keparahan yang cocok dengan tingkat yang telah ditentukan sebelumnya.
Tutorial ini menunjukkan cara menggunakan Cloud Build untuk membangun image container dari kode sumber, memindainya untuk menemukan kerentanan, memeriksa tingkat keparahan kerentanan, dan mengirim image ke Artifact Registry jika tidak ada kerentanan dengan tingkat keparahan tertentu.
Sebaiknya buat Google Cloud project baru untuk tutorial ini, dan selesaikan langkah-langkahnya di lingkungan yang terisolasi.
Tujuan
- Bangun image dengan Cloud Build.
- Pindai gambar yang dibuat dengan Pemindaian On-Demand.
- Menilai tingkat kerentanan yang dapat diterima.
- Simpan image di Artifact Registry.
Biaya
Di dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init Admin Pemindaian Sesuai Permintaan (
roles/ondemandscanning.admin)Artifact Registry Writer (
roles/artifactregistry.writer)Buka terminal, buat direktori baru bernama
ods-tutorial, dan buka direktori tersebut:mkdir ods-tutorial && cd ods-tutorialBuat file bernama
Dockerfiledengan konten berikut:# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUETetapkan project ID ke project yang sama tempat Anda mengaktifkan API:
gcloud config set project PROJECT_IDBuat repositori Docker bernama
ods-build-repodi lokasius-central1:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"Pastikan repositori Anda berhasil dibuat:
gcloud artifacts repositories listDi folder
ods-tutorial/, buat filecloudbuild.yamldengan konten berikut:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']File ini mencakup lokasi dan repositori yang sebelumnya dibuat di Artifact Registry. Jika Anda memutuskan untuk menggunakan nilai yang berbeda, ubah file
cloudbuild.yamlyang sesuai. Nilai untukPROJECT_IDdanSEVERITYditeruskan ke skrip dalam perintah build.Tentukan tingkat
SEVERITYkerentanan yang ingin Anda blokir dan mulai build.Anda dapat menggunakan nilai berikut untuk
SEVERITY:CRITICALHIGHMEDIUMLOW
Anda dapat menentukan beberapa tingkat keparahan menggunakan ekspresi reguler.
Dalam contoh berikut, Anda menentukan nilai tingkat keparahan
CRITICALdanHIGH. Perintah ini menginstruksikan Cloud Build untuk memeriksa kerentanan yang diklasifikasikan pada atau di atas tingkat keparahanHIGH.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yamlDi mana
- PROJECT_ID adalah project ID Anda.
- SEVERITY memungkinkan Anda menetapkan tingkat keparahan yang ingin diblokir. Jika Pemindaian Sesuai Permintaan menemukan kerentanan yang cocok dengan salah satu tingkat keparahan yang ditentukan, build Anda akan gagal.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Buka halaman Repositori di Google Cloud konsol.
Dalam daftar repositori, pilih repositori
ods-build-repo.Klik Hapus.
Peran yang diperlukan
Akun layanan yang Anda gunakan dengan Cloud Build memerlukan peran berikut:
Akun layanan Cloud Build default memiliki izin yang diperlukan untuk repositori Artifact Registry dalam project yang sama. Jika repositori Anda berada di project yang sama dengan yang Anda gunakan untuk Cloud Build, Anda hanya perlu memberikan peran Admin Pemindaian Sesuai Permintaan.
Jika Anda menggunakan akun layanan yang disediakan pengguna untuk Cloud Build, Anda perlu memberikan kedua peran tersebut.
Menyiapkan file sumber
Untuk tutorial ini, Anda akan membuat image dari Dockerfile. Dockerfile adalah file sumber yang berisi petunjuk bagi Docker untuk membuat image.
Membuat repositori Artifact Registry
Membangun dan memindai
Di bagian ini, Anda akan menjalankan pipeline build menggunakan file konfigurasi build. File konfigurasi build menginstruksikan Cloud Build cara melakukan beberapa tugas berdasarkan spesifikasi Anda.
Memahami hasil Anda
Saat Anda menyetel nilai SEVERITY ke CRITICAL|HIGH, setelah Pemindaian Sesuai Permintaan memindai kerentanan, pemindaian akan memeriksa apakah ada kerentanan di tingkat HIGH dan tingkat CRITICAL yang lebih parah. Jika tidak ada kerentanan yang cocok ditemukan di image Anda, build akan berhasil dan Cloud Build akan mengirimkan image Anda ke Artifact Registry.
Outputnya mirip dengan hal berikut ini:
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
Jika Pemindaian Sesuai Permintaan menemukan kerentanan HIGH atau CRITICAL dalam image Anda, langkah build scan akan gagal, langkah build berikutnya tidak akan dimulai, dan Cloud Build tidak akan mengirimkan image ke Artifact Registry.
Outputnya mirip dengan hal berikut ini:
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
Dalam tutorial ini, hasil Anda mungkin berbeda, karena kode sumber contoh adalah distribusi Linux yang tersedia untuk umum, debian10:latest. Distribusi Linux dan data kerentanan terkait menerima update secara berkelanjutan.
Untuk mempelajari alat dan praktik terbaik tambahan yang dapat membantu melindungi supply chain software Anda, lihat Keamanan supply chain software. Google Cloud
Untuk mengetahui informasi selengkapnya tentang praktik terbaik pengelolaan kerentanan Linux, Anda dapat menggunakan pelatihan online gratis yang disediakan oleh Linux Foundation. Lihat Mengembangkan Software yang Aman.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Menghapus resource satu per satu
Sebelum menghapus repositori, pastikan semua image yang ingin Anda pertahankan tersedia di lokasi lain.
Untuk menghapus repositori:
Konsol
gcloud
Untuk menghapus ods-build-repo repositori, jalankan perintah
berikut:
gcloud artifacts repositories delete ods-build-repo --location=us-central1