GSP521

Ringkasan
Dalam challenge lab, Anda diberi sebuah skenario dan serangkaian tugas. Tidak ada petunjuk langkah demi langkah. Anda akan menggunakan keahlian yang dipelajari dari lab dalam kursus untuk mencari cara menyelesaikan sendiri tugas-tugas tersebut. Sistem pemberian skor otomatis (ditampilkan pada halaman ini) akan memberikan masukan tentang apakah Anda telah menyelesaikan tugas dengan benar atau tidak.
Saat mengikuti challenge lab, Anda tidak akan diajari konsep-konsep baru Google Cloud. Anda diharapkan dapat memperluas keahlian yang dipelajari, seperti mengubah nilai default dan membaca serta mengkaji pesan error untuk memperbaiki kesalahan Anda sendiri.
Untuk meraih skor 100%, Anda harus berhasil menyelesaikan semua tugas dalam jangka waktu tertentu.
Lab ini direkomendasikan bagi siswa yang sudah mendaftar ke kursus Pengiriman Software yang Aman. Apakah Anda siap menghadapi tantangan ini?
Skenario Tantangan
Anda adalah seorang software engineer di Cymbal Bank, yang bertugas men-deploy aplikasi web baru ke cloud secara aman. Aplikasi ini menangani data pelanggan yang sensitif, sehingga keamanan menjadi hal yang sangat penting. Tujuan Anda adalah mengimplementasikan pipeline otomatis yang tangguh yang membangun, memindai, menandatangani, dan men-deploy aplikasi dalam container sekaligus tetap mematuhi standar keamanan yang ketat. Untuk tantangan ini, Anda akan menggunakan layanan Google Cloud seperti Artifact Registry, Otorisasi Biner, dan Cloud Build untuk mencapai tujuan ini pada aplikasi sampel.
Topik yang diujikan
-
Membuat Repositori Artifact Registry: Menyiapkan repositori Artifact Registry untuk menyimpan image Docker untuk pemindaian dan produksi.
-
Mengirim Image Docker: Membangun dan mengirim image Docker ke Artifact Registry melalui Cloud Build untuk pemindaian kerentanan.
-
Menyiapkan Otorisasi Biner: Mengonfigurasi Otorisasi Biner dengan attestor dan kunci untuk menerapkan kebijakan penandatanganan image.
-
Melihat Pemindaian Kerentanan: Memeriksa hasil pemindaian kerentanan dalam Artifact Registry untuk mengidentifikasi dan memahami potensi risiko keamanan.
-
Membuat Pipeline CI/CD yang Aman: Membangun pipeline Cloud Build yang mengotomatiskan pembuatan image, pemindaian kerentanan, dan penandatanganan image.
-
Meninjau dan Memperbaiki: Menganalisis build yang gagal karena kerentanan kritis dan memperbaiki masalah dalam kode aplikasi.
-
Membangun Ulang dan Men-deploy: Menjalankan kembali pipeline CI/CD dengan kode yang telah diperbaiki dan memastikan deployment berhasil ke Cloud Run.
Penyiapan dan persyaratan
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan 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 (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Tugas 1. Mengaktifkan API dan menyiapkan lingkungan
Sebelum dapat mulai membangun pipeline CI/CD yang aman, Anda perlu mengaktifkan API Google Cloud yang diperlukan dan menyiapkan lingkungan pengembangan Anda. Ini akan memastikan Anda memiliki akses ke semua layanan dan alat yang diperlukan.
- Aktifkan API yang diperlukan untuk lab ini:
gcloud services enable \
cloudkms.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
artifactregistry.googleapis.com \
containerscanning.googleapis.com \
ondemandscanning.googleapis.com \
binaryauthorization.googleapis.com
- Di Cloud Shell, jalankan perintah berikut untuk mendownload file sampel Python, Docker, dan Cloud Build:
mkdir sample-app && cd sample-app
gcloud storage cp gs://spls/gsp521/* .
- Buat dua repositori Artifact Registry: satu untuk pemindaian dan satu untuk produksi. Beri nama repositori tersebut masing-masing
artifact-scanning-repo dan artifact-prod-repo.
Repositori pemindaian akan digunakan untuk menyimpan image Docker sebelum dipindai untuk mengetahui kerentanan, sedangkan repositori produksi akan menyimpan image setelah ditandatangani dan siap di-deploy.
Untuk memverifikasi tujuan, klik Periksa progres saya.
Mengaktifkan API dan menyiapkan Artifact Registry.
Tugas 2. Membuat pipeline Cloud Build
Dalam tugas ini, Anda akan meletakkan dasar untuk pipeline CI/CD dengan membuat konfigurasi Cloud Build dasar untuk membangun dan mengirim image Docker Anda ke Artifact Registry. Langkah awal ini akan memungkinkan Anda memindai image untuk mengetahui kerentanan nanti di lab.
-
Mulai dengan menambahkan peran berikut ke akun layanan Cloud Build:
roles/iam.serviceAccountUser
roles/ondemandscanning.admin
-
Di Cloud Shell Editor, buka file sample-app/cloudbuild.yaml.
-
Selesaikan TODO: Isi placeholder nama image (<image-name>). Untuk ini, Anda perlu mereferensikan repositori artifact-scanning-repo, dan nama image harus sample-image. Pastikan untuk menggunakan region .
-
Kirim build.
-
Lihat image yang Anda kirim ke repositori artifact-scanning-repo dan pastikan Anda dapat melihat sejumlah kerentanan Critical dalam hasil pemindaian.
Untuk memverifikasi tujuan, klik Periksa progres saya.
Membuat pipeline Cloud Build.
Tugas 3. Menyiapkan Otorisasi Biner
Untuk menerapkan kebijakan keamanan yang ketat untuk deployment container, Anda akan memanfaatkan Otorisasi Biner. Layanan ini memungkinkan Anda menentukan siapa yang dapat men-deploy gambar apa, dan dalam kondisi apa. Dalam tugas ini, Anda akan membuat dan mengonfigurasi komponen yang diperlukan dari Otorisasi Biner, termasuk attestor, catatan, dan kunci KMS. Dengan begitu, Anda akan siap untuk mengintegrasikan Otorisasi Biner ke dalam pipeline CI/CD.
Membuat Attestor
-
Di Cloud Shell, buat file JSON. File ini akan menentukan catatan Attestor yang berisi petunjuk pengesahan. human_readable_name dari petunjuk pengesahan harus ditetapkan ke "Container Vulnerabilities attestation authority".
-
Gunakan Container Analysis API untuk membuat catatan baru dengan ID vulnerability_note. Detail catatan harus ditentukan dalam file catatan yang Anda buat di langkah sebelumnya. Pastikan untuk menyertakan autentikasi yang tepat dan menetapkan header Content-Type yang sesuai dalam permintaan API Anda.
-
Gunakan Container Analysis API untuk mengambil detail catatan Attestor yang baru saja Anda buat. Pastikan untuk menyertakan autentikasi yang tepat dalam permintaan API Anda.
-
Gunakan alat command line gcloud untuk membuat Attestor Otorisasi Biner baru. ID Attestor harus vulnerability-attestor, dan harus dikaitkan dengan catatan Attestor yang Anda buat sebelumnya.
-
Gunakan alat command line gcloud untuk mencantumkan semua Attestor Otorisasi Biner yang ada. Pastikan Attestor yang baru saja Anda buat disertakan dalam daftar.
-
Buat kebijakan IAM yang memberikan peran roles/containeranalysis.notes.occurrences.viewer kepada akun layanan Otorisasi Biner pada catatan Attestor yang Anda buat. Kemudian, gunakan Container Analysis API untuk menetapkan kebijakan IAM ini pada catatan.
Membuat Pasangan KMS
Di bagian ini, Anda akan membuat pasangan kunci KMS untuk menandatangani pengesahan.
-
Menyiapkan Pengelolaan Kunci:
- Buat keyring KMS bernama
binauthz-keys di lokasi global untuk menyimpan kunci.
- Dalam keyring ini, buat pasangan kunci penandatanganan asimetris baru. Beri nama kunci ini
lab-key dan pastikan ini adalah version 1.
-
Menautkan Kunci ke Attestor:
- Gunakan alat command line
gcloud untuk mengaitkan lab-key (version 1) dengan Attestor Otorisasi Biner Anda. Pastikan untuk menentukan lokasi global dan keyring binauthz-keys saat mereferensikan kunci.
Memperbarui Kebijakan Otorisasi Biner
-
Memodifikasi Kebijakan: Sesuaikan kebijakan Otorisasi Biner untuk memberlakukan persyaratan pengesahan untuk aturan default.
-
Menggabungkan Attestor Anda: Sertakan vulnerability-attestor yang sebelumnya Anda buat sebagai bagian dari konfigurasi kebijakan.
Untuk memverifikasi tujuan, klik Periksa progres saya.
Membuat Attestor, pasangan KMS, dan memperbarui kebijakan.
Tugas 4. Membuat pipeline CI/CD Cloud Build dengan pemindaian kerentanan
Dengan memanfaatkan pipeline dasar dari Tugas 2, Anda akan menyempurnakannya dengan fitur keamanan penting. Ini mencakup pemindaian kerentanan untuk mengidentifikasi potensi kelemahan dalam image container Anda dan penandatanganan image untuk memastikan integritasnya. Dalam tugas ini, Anda akan mengintegrasikan pemindaian kerentanan dan penandatanganan image ke dalam pipeline CI/CD, sehingga menjadikannya lebih tangguh dan aman.
Menambahkan peran yang diperlukan ke akun layanan Cloud Build
-
Berikan peran IAM berikut kepada akun layanan Cloud Build di project Anda:
roles/binaryauthorization.attestorsViewer
roles/cloudkms.signerVerifier
roles/containeranalysis.notes.attacher
roles/iam.serviceAccountUser
roles/ondemandscanning.admin
-
Selain itu, pastikan akun layanan default Compute Engine juga memiliki peran cloudkms.signerVerifier.
Menginstal langkah Custom Build
- Anda akan menggunakan langkah Custom Build di Cloud Build untuk menyederhanakan proses pengesahan. Google menyediakan langkah Custom Build ini yang berisi fungsi bantuan untuk menyederhanakan proses. Sebelum digunakan, kode untuk langkah build kustom harus dibangun ke dalam container dan dikirim ke Cloud Build. Untuk melakukannya, jalankan perintah berikut:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
cd cloud-builders-community/binauthz-attestation
gcloud builds submit . --config cloudbuild.yaml
cd ../..
rm -rf cloud-builders-community
Mengupdate pipeline Cloud Build
Di bagian ini, Anda akan menyelesaikan pipeline Cloud Build untuk menyertakan pemindaian kerentanan, pemeriksaan tingkat keparahan, penandatanganan image, dan deployment ke Cloud Run. Kode yang disediakan di bawah ini adalah implementasi parsial dari pipeline. Anda harus mengisi bagian yang kosong untuk menyelesaikan pipeline.
-
Selesaikan TODO: Isi bagian pipeline yang kosong, termasuk:
- Menentukan lokasi image di Artifact Registry untuk pemindaian kerentanan. Perhatikan bahwa Anda ingin memindai image di repositori
artifact-scanning-repo.
- Menetapkan tingkat keparahan yang sesuai untuk pemeriksaan kerentanan. Pipeline akan gagal jika ada kerentanan
CRITICAL yang ditemukan.
- Mengonfigurasi langkah penandatanganan image dengan informasi attestor dan kunci KMS yang benar. Nama attestor-nya adalah
vulnerability-attestor, dan versi kuncinya adalah jalur lengkap ke lab-key versi 1.
- Memberi tag ulang pada image untuk produksi dan mengirimkannya ke repositori produksi. Anda harus menggunakan repositori
artifact-prod-repo untuk tujuan ini.
- Men-deploy image ke Cloud Run. Anda akan menggunakan image produksi dari repositori
artifact-prod-repo untuk langkah ini.
Catatan: Anda telah mengisi beberapa TODO pertama di file cloudbuild.yaml pada tugas kedua lab ini. Pastikan untuk mengganti placeholder lainnya dengan nilai yang benar untuk TODO yang tersisa.
cloudbuild.yaml
steps:
# TODO: #1. Build Step. Replace the <image-name> placeholder with the correct value.
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '<image-name>', '.']
waitFor: ['-']
# TODO: #2. Push to Artifact Registry. Replace the <image-name> placeholder with the correct value.
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '<image-name>']
# TODO: #3. Run a vulnerability scan. Replace the <image-name> placeholder with the correct value.
- id: scan
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
(gcloud artifacts docker images scan \
<image-name> \
--location us \
--format="value(response.scan)") > /workspace/scan_id.txt
# TODO: #4. Analyze the result of the scan. IF CRITICAL vulnerabilities are found, fail the build.
# Replace the <correct vulnerability> placeholders with the correct values. Case sensitive!
- 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 <correct vulnerability>; \
then echo "Failed vulnerability check for <correct vulnerability> level" && exit 1; else echo \
"No <correct vulnerability> vulnerability found, congrats !" && exit 0; fi
# TODO: #5. Sign the image only if the previous severity check passes.
# Replace the placeholders with the correct values: <image-name>, <attestor-name>, and <key-version>.
# Note the <key-version> should be the **full** path to the key version.
- id: 'create-attestation'
name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
args:
- '--artifact-url'
- '<image-name>'
- '--attestor'
- '<attestor-name>'
- '--keyversion'
- '<key-version>'
# TODO: #6. Re-tag the image for production and push it to the production repository using the latest tag.
# Replace the <image-name> and <production-image-name> placeholders with the correct values.
- id: "push-to-prod"
name: 'gcr.io/cloud-builders/docker'
args:
- 'tag'
- '<image-name>'
- '<production-image-name>'
- id: "push-to-prod-final"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '<production-image-name>']
# TODO: #7. Deploy to Cloud Run. Replace the <image-name> and <your-region> placeholders with the correct values.
- id: 'deploy-to-cloud-run'
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud run deploy auth-service --image=<image-name> \
--binary-authorization=default --region=<your-region> --allow-unauthenticated
# TODO: #8. Replace <image-name> placeholder with the value from the build step.
images:
- <image-name>
-
Memicu Build:
- Kirim konfigurasi Cloud Build yang Anda buat untuk memulai proses build.
- Perhatikan region tempat Anda bekerja saat mengirimkan build.
-
Mengamati Kegagalan Build:
- Buka halaman Cloud Build History di Konsol Google Cloud.
- Cari build yang baru saja Anda picu dan periksa statusnya.
- Pastikan build gagal karena adanya kerentanan dengan tingkat keparahan
CRITICAL.
Catatan: build Anda seharusnya gagal karena kerentanan dengan tingkat keparahan CRITICAL. Anda akan mengatasi masalah ini di tugas berikutnya.
Untuk memverifikasi tujuan, klik Periksa progres saya.
Mengintegrasikan pemindaian kerentanan ke dalam pipeline CI/CD Anda.
Tugas 5. Memperbaiki kerentanan dan men-deploy ulang pipeline CI/CD
Dalam skenario dunia nyata, pemindaian kerentanan sering kali mengungkapkan masalah yang perlu ditangani. Tugas ini menyimulasikan skenario seperti itu, di mana build Anda gagal karena kerentanan kritis. Dalam tugas ini, Anda akan menganalisis kegagalan build, mengidentifikasi kerentanan, dan memperbaikinya dengan mengupdate dependensi aplikasi Anda. Kemudian, Anda akan memicu ulang pipeline Cloud Build untuk memastikan build selesai dengan sukses tanpa kerentanan kritis.
-
Mengupdate Dockerfile: Ubah Dockerfile Anda untuk menggunakan image dasar python:3.8-alpine. Update dependensi Flask, Gunicorn, dan Werkzeug ke versi berikut:
- Flask:
3.0.3
- Gunicorn:
23.0.0
- Werkzeug:
3.0.4
-
Memicu ulang Build: Kirim konfigurasi Cloud Build yang telah diperbarui untuk memulai build baru.
-
Memverifikasi Keberhasilan Build: Periksa halaman Cloud Build History untuk mengonfirmasi bahwa build selesai dengan sukses tanpa masalah kerentanan CRITICAL.
-
Untuk tujuan pengujian, jalankan perintah berikut untuk mengizinkan akses yang tidak diautentikasi ke layanan Cloud Run sehingga Anda dapat memvalidasi deployment. Ganti <your-region> dengan region tempat Anda men-deploy layanan.
gcloud beta run services add-iam-policy-binding --region=<your-region> --member=allUsers --role=roles/run.invoker auth-service
Catatan: perintah ini hanya untuk tujuan pengujian dan tidak boleh digunakan di lingkungan produksi.
-
Memvalidasi Deployment: Akses URL layanan Cloud Run untuk memastikan aplikasi Anda di-deploy dan berfungsi dengan benar.
Untuk memverifikasi tujuan, klik Periksa progres saya.
Memperbaiki kerentanan dan men-deploy ulang pipeline CI/CD.
Selamat!
Selamat! Di lab ini, Anda telah berhasil mengimplementasikan pipeline CI/CD yang aman yang membangun, memindai, menandatangani, dan men-deploy aplikasi web ke cloud. Pengalaman praktis ini telah membekali Anda dengan keterampilan penting untuk membangun dan men-deploy aplikasi yang aman di cloud, menggabungkan praktik terbaik keamanan ke dalam alur kerja pengembangan Anda, dan memastikan integritas proses pengiriman software Anda.

Langkah berikutnya/pelajari lebih lanjut
Lihat referensi berikut untuk mempelajari lebih lanjut topik yang dibahas dalam lab ini:
Sertifikasi dan pelatihan Google Cloud
...membantu Anda mengoptimalkan 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 untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 10 Desember 2025
Lab Terakhir Diuji pada 10 September 2024
Hak cipta 2026 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.