GSP1184

Ringkasan
Kerentanan software adalah kelemahan yang dapat menyebabkan kegagalan sistem yang tidak disengaja atau mengekspos celah bagi pelaku kejahatan untuk membahayakan software Anda. Artifact Analysis menyediakan dua jenis pemindaian OS untuk menemukan kerentanan dalam container:
-
On-Demand Scanning API memungkinkan Anda memindai image container secara manual untuk mendeteksi kerentanan OS, baik secara lokal di komputer Anda maupun dari jarak jauh di Artifact Registry. Tindakan ini memberi Anda kontrol terperinci atas container yang ingin dideteksi kerentanannya.
-
Container Scanning API memungkinkan Anda mengotomatiskan deteksi kerentanan OS, dengan melakukan pemindaian setiap kali Anda mengirim image ke Artifact Registry. Anda dapat menggunakan Pemindaian On-Demand untuk memindai image di pipeline CI/CD sebelum menentukan apakah akan menyimpannya di registry atau tidak. Mengaktifkan API ini juga akan mengaktifkan pemindaian paket bahasa untuk mencari kerentanan Go dan Java.
Di lab ini, Anda akan mempelajari cara membuat image container dan memindai kerentanan image container yang disimpan di Artifact Registry menggunakan Cloud Build.
Yang akan Anda pelajari
Di lab ini, Anda akan:
- Membuat Image dengan Cloud Build
- Menggunakan Artifact Registry untuk Container
- Memanfaatkan pemindaian kerentanan otomatis
- Mengonfigurasi Pemindaian On-Demand
- Menambahkan pemindaian image dalam CI/CD di Cloud Build
Penyiapan dan Persyaratan
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer yang tidak dapat dijeda. Timer, yang dimulai saat Anda mengklik Start Lab, akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab praktis ini dapat Anda gunakan untuk mengerjakan sendiri aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
- Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran atau browser rahasia untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa, yang mungkin menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Jika Anda sudah memiliki project atau akun pribadi Google Cloud, jangan menggunakannya untuk lab ini agar terhindar dari tagihan ekstra pada akun Anda.
Cara memulai lab dan login ke Konsol Google Cloud
-
Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran.
Panel Lab Details di sebelah kiri berisi:
- Tombol Open Google Cloud console
- Waktu tersisa
- Kredensial sementara yang harus Anda gunakan untuk lab ini
- Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
-
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
-
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
{{{user_0.username | "Username"}}}
Anda juga dapat menemukan Username di panel Lab Details.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab Details.
-
Klik Next.
Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda.
Catatan: Penggunaan akun Google Cloud sendiri untuk lab ini mungkin dikenai biaya tambahan.
-
Klik untuk melanjutkan ke halaman berikutnya:
- Setujui persyaratan dan ketentuan.
- Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
- Jangan daftar uji coba gratis.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Catatan: Untuk melihat menu dengan daftar produk dan layanan Google Cloud, klik Navigation menu di kiri atas.
Mengaktifkan Cloud Shell
Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.
- Klik Activate Cloud Shell
di bagian atas konsol Google Cloud.
Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:
Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}
gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.
- (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
- Klik Authorize.
Output:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
Untuk menetapkan akun aktif, jalankan:
$ gcloud config set account `ACCOUNT`
- (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project
Output:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.
Penyiapan Lingkungan
- Di Cloud Shell, tetapkan project ID dan nomor project untuk project Anda. Simpan keduanya sebagai variabel
PROJECT_ID dan PROJECT_NUMBER:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
- Aktifkan semua layanan yang diperlukan:
gcloud services enable \
cloudkms.googleapis.com \
cloudbuild.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
artifactregistry.googleapis.com \
containerscanning.googleapis.com \
ondemandscanning.googleapis.com \
binaryauthorization.googleapis.com
Klik Periksa progres saya untuk memverifikasi tujuan.
Mengaktifkan API yang diperlukan
Tugas 1. Membuat image dengan Cloud Build
Di bagian ini, Anda akan membuat pipeline build otomatis untuk membuat image container, memindainya, lalu mengevaluasi hasilnya. Jika tidak ditemukan kerentanan KRITIS, image akan dikirim ke repositori. Jika ditemukan kerentanan KRITIS, build akan gagal dan keluar.
- Sediakan akses untuk Akun Layanan Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
Cloud Build memerlukan hak untuk mengakses API pemindaian on-demand. Berikan akses dengan perintah berikut.
- Buat dan ubah ke direktori kerja:
mkdir vuln-scan && cd vuln-scan
- Tentukan image sampel:
Buat file bernama Dockerfile dengan isi berikut:
cat > ./Dockerfile << EOF
FROM gcr.io/google-appengine/debian11
# System
RUN apt update && apt install python3-pip -y
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==1.1.4
RUN pip3 install gunicorn==20.1.0
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
EOF
- Buat file bernama main.py dengan isi sebagai berikut:
cat > ./main.py << EOF
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "Worlds")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
EOF
Membuat pipeline Cloud Build
Anda harus membuat file cloudbuild.yaml di direktori yang akan digunakan untuk proses otomatis. Untuk lab ini, langkah-langkahnya terbatas pada proses build container. Namun, dalam praktiknya, Anda harus menyertakan petunjuk dan pengujian spesifik per aplikasi selain langkah-langkah container.
- Buat file dengan perintah berikut:
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
EOF
- Jalankan pipeline CI:
Kirim build agar diproses:
gcloud builds submit
- Setelah proses build dimulai, buka dasbor Cloud Build di Konsol Cloud untuk melihat isinya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat image dengan Cloud Build
Tugas 2. Menggunakan Artifact Registry untuk Container
Membuat repositori Artifact Registry
Anda akan menggunakan Artifact Registry untuk menyimpan dan memindai image.
- Buat repositori dengan perintah berikut:
gcloud artifacts repositories create artifact-scanning-repo \
--repository-format=docker \
--location={{{ project_0.default_region | "REGION" }}} \
--description="Docker repository"
- Konfigurasi Docker agar menggunakan kredensial gcloud Anda saat mengakses Artifact Registry:
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
- Ubah pipeline Cloud Build untuk mengirim image yang dihasilkan ke Artifact Registry:
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
# push to artifact registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
- Jalankan pipeline CI:
gcloud builds submit
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat repositori Artifact Registry
Tugas 3. Memanfaatkan pemindaian kerentanan Otomatis
Pemindaian dipicu secara otomatis setiap kali Anda mengirim image baru ke Artifact Registry. Informasi kerentanan terus diperbarui ketika kerentanan baru ditemukan.
Di bagian ini, Anda akan meninjau image yang baru saja dibuat dan dikirim ke Artifact Registry serta mempelajari hasil kerentanan.
Meninjau Detail Image
Setelah proses build selesai, tinjau hasil image dan kerentanan di dasbor Artifact Registry.
- Di Konsol Cloud, buka Artifact Registry.
- Klik artifact-scanning-repo untuk melihat isinya.
- Klik image details.
- Klik ringkasan terbaru image Anda.
- Setelah pemindaian selesai, klik tab Vulnerabilities untuk image tersebut.
Dari tab vulnerabilities, Anda akan melihat hasil pemindaian otomatis untuk image yang baru saja Anda buat.
Pemindaian otomatis aktif secara default. Jelajahi Setelan Artifact Registry untuk melihat cara menonaktifkan/mengaktifkan pemindaian otomatis.
Tugas 4. Mengonfigurasi pemindaian on-demand
Ada berbagai skenario yang mengharuskan Anda melakukan pemindaian sebelum mengirim image ke repositori. Misalnya, developer container dapat memindai image dan memperbaiki masalah yang ditemukan sebelum mengirimkan kode ke kontrol sumber.
Dalam contoh di bawah, Anda akan membuat dan menganalisis image secara lokal sebelum mengambil tindakan berdasarkan hasilnya.
- Gunakan docker lokal untuk membuat image ke cache lokal:
docker build -t {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image .
- Setelah image dibuat, buat permintaan pemindaian image:
gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--format="value(response.scan)" > scan_id.txt
Hasil pemindaian disimpan di server metadata. Tugas selesai dan informasi lokasi hasilnya dapat ditemukan di server metadata.
- Tinjau output yang disimpan dalam file
scan_id.txt:
cat scan_id.txt
Perhatikan lokasi laporan hasil pemindaian di server metadata.
- Untuk melihat hasil pemindaian yang sebenarnya, gunakan perintah
list-vulnerabilities di lokasi laporan yang tercantum dalam file output:
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt)
Output berisi sejumlah besar data tentang semua kerentanan dalam image. Manusia jarang menggunakan data yang disimpan dalam laporan secara langsung. Biasanya, hasilnya digunakan oleh proses otomatis.
- Gunakan perintah di bawah untuk membaca detail laporan dan membuat log jika ditemukan kerentanan KRITIS:
export SEVERITY=CRITICAL
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt) --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq ${SEVERITY}; then echo "Failed vulnerability check for ${SEVERITY} level"; else echo "No ${SEVERITY} Vulnerabilities found"; fi
Output dari perintah ini adalah
Failed vulnerability check for CRITICAL level
Klik Periksa progres saya untuk memverifikasi tujuan.
Pindai image menggunakan Pemindaian On-Demand
Tugas 5. Menggunakan Pemindaian Artefak dalam CI/CD di Cloud Build
Pertama, Anda perlu memberikan hak Cloud Build untuk mengakses API pemindaian on-demand.
- Berikan akses dengan perintah berikut:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
- Perbarui pipeline Cloud Build menggunakan perintah berikut untuk membuat file
cloudbuild.yaml yang akan digunakan untuk proses otomatis:
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
#Run a vulnerability scan at _SECURITY level
- id: scan
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
(gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--location us \
--format="value(response.scan)") > /workspace/scan_id.txt
#Analyze the result of the scan
- id: severity check
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud artifacts docker images list-vulnerabilities \$(cat /workspace/scan_id.txt) \
--format="value(vulnerability.effectiveSeverity)" | if grep -Fxq CRITICAL; \
then echo "Failed vulnerability check for CRITICAL level" && exit 1; else echo "No CRITICAL vulnerability found, congrats !" && exit 0; fi
#Retag
- id: "retag"
name: 'gcr.io/cloud-builders/docker'
args: ['tag', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
#pushing to artifact registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
Untuk contoh ini, langkah-langkahnya terbatas pada proses build container. Dalam praktiknya, Anda harus menyertakan petunjuk dan pengujian khusus aplikasi tertentu selain langkah-langkah container.
- Kirimkan build untuk diproses guna memverifikasi bahwa proses build gagal saat ditemukan kerentanan dengan tingkat keparahan KRITIS.
gcloud builds submit
- Tinjau Kegagalan Build di halaman Histori Cloud Build.
Klik Periksa progres saya untuk memverifikasi tujuan.
Pastikan bahwa build gagal saat ditemukan kerentanan dengan tingkat keparahan KRITIS
Memperbaiki Kerentanan
Perbarui Dockerfile agar menggunakan image dasar yang tidak berisi kerentanan KRITIS.
- Timpa Dockerfile agar menggunakan image Debian 10 dengan perintah berikut:
cat > ./Dockerfile << EOF
FROM python:3.8-alpine
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==2.1.0
RUN pip3 install gunicorn==20.1.0
RUN pip3 install Werkzeug==2.2.2
CMD exec gunicorn --bind :\$PORT --workers 1 --threads 8 main:app
EOF
- Kirimkan build untuk diproses guna memverifikasi bahwa build akan berhasil jika tidak ditemukan kerentanan dengan tingkat keparahan KRITIS:
gcloud builds submit
- Di Konsol Cloud, buka Cloud Build > Histori Cloud Build untuk meninjau keberhasilan build.
Klik Periksa progres saya untuk memverifikasi tujuan.
Memperbaiki Kerentanan
Meninjau Hasil pemindaian
Meninjau image berhasil di Artifact Registry
- Buka Artifact Registry di Konsol Cloud.
- Klik artifact-scanning-repo untuk melihat isinya.
- Klik image details.
- Klik ringkasan terbaru image Anda.
- Klik tab Vulnerabilities untuk image tersebut.
Selamat!
Anda telah mempelajari cara membuat image dengan Cloud Build dan menyimpannya di Artifact Registry, serta melihat pemicuan pemindaian Artifact secara otomatis. Anda juga mengetahui cara memindai image "on-demand" - sebelum dikirimkan ke kontrol sumber.
Langkah berikutnya/pelajari lebih lanjut
Pelatihan & Sertifikasi Google Cloud
...membantu Anda mendapatkan manfaat optimal dari teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual agar dapat disesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui: 23 Juli 2025
Lab Terakhir Diuji pada 23 Juli 2025
Hak cipta 2024 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.