Tutorial ini menjelaskan cara menyiapkan dan menggunakan Voucher untuk membuat pengesahan Otorisasi Biner.
Ringkasan Voucher
Voucher adalah alat open source yang menjalankan serangkaian pemeriksaan pada image container sebelum membuat attestations Otorisasi Biner untuk gambar. {i>Voucher<i} memiliki komponen klien dan server. Anda menjalankan Voucher Client sebagai langkah tambahan dalam pipeline build, setelah langkah yang mem-build image. Saat langkah build Klien Voucher berjalan, image akan dikirimkan ke Server Voucher yang akan melakukan pemeriksaan. Anda menentukan pemeriksaan yang dijalankan Voucher, beserta kriteria lainnya, di file konfigurasi Server Voucher.
Tutorial ini menunjukkan cara menggunakan pemeriksaan snakeoil
Voucher untuk menguji kerentanan dalam gambar. Anda dapat mengaktifkan pemeriksaan di file konfigurasi dengan menetapkan opsi fail-on
ke ambang batas kerentanan, seperti yang akan ditampilkan dalam tutorial ini.
Setelah pemeriksaan snakeoil
selesai, jika semua kerentanan yang teridentifikasi berada di bawah batas, Server Voucher akan membuat pengesahan Otorisasi Biner untuk image. Jika salah satu kerentanan yang teridentifikasi memenuhi atau melampaui ambang batas, Server Voucher tidak akan membuat pengesahan.
Pada waktu deployment image container, tanpa pengesahan terverifikasi, pelaksana Otorisasi Biner tidak mengizinkan image di-deploy.
Tujuan
Dalam panduan ini, Anda akan melakukan hal-hal berikut:
- Siapkan Server Voucher di Cloud Run.
- Siapkan Klien Voucher.
- Menggunakan Voucher di contoh pipeline build.
Biaya
Panduan ini menggunakan produk Google Cloud berikut.
- Container Registry
- Artifact Analysis
- Cloud Build
- Cloud Key Management Service
- Cloud Run
Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
- Sebaiknya Anda menyiapkan Otorisasi Biner dengan Google Kubernetes Engine. Tutorial ini menjelaskan cara membuat pengesahan. Agar dapat menggunakan penerapan waktu deployment untuk memverifikasi pengesahan dan men-deploy image terkait, Otorisasi Biner harus disiapkan. Pastikan Anda mengonfigurasi kebijakan agar mewajibkan pengesahan. Anda dapat mengonfigurasi kebijakan ini di Google Cloud Console atau di command line.
-
Tentukan project Google Cloud Anda di variabel lingkungan.
export PROJECT_ID=PROJECT_ID
Ganti PROJECT_ID dengan project ID Anda.
-
Tetapkan project ID untuk perintah
gcloud
:gcloud config set project ${PROJECT_ID}
-
Tentukan nomor project dalam variabel lingkungan untuk langkah-langkah mendatang:
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" \ --format='value(project_number)')
Siapkan Server Voucher
Pada langkah-langkah berikut, Anda dapat menyiapkan Server Voucher.
Membuat kunci penandatanganan Cloud Key Management Service
Di bagian ini, Anda membuat kunci yang digunakan Server Voucher untuk membuat pengesahan Otorisasi Biner.
Buat key ring:
gcloud kms keyrings create KEY_RING\ --location global
Ganti KEY_RING dengan nama key ring, seperti
voucher-key-ring
.Buat kunci penandatanganan:
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location global \ --purpose "asymmetric-signing" \ --default-algorithm "rsa-sign-pkcs1-4096-sha512"
Ganti KEY_NAME dengan nama nama kunci, seperti
voucher-key
.Simpan ID resource versi kunci Cloud Key Management Service:
export KMS_RESOURCE_ID=projects/$PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
Berikan peran
cloudkms.signer
ke akun layanan mesin runtime Compute Engine.Pada langkah ini, Anda memberikan peran
cloudkms.signer
ke akun layanan yang menjalankan Voucher Server. Hal ini memungkinkan Server Voucher menandatangani pengesahan dengan kunci Cloud Key Management Service. Untuk melakukannya, jalankan perintah berikut:gcloud kms keys add-iam-policy-binding\ KEY_NAME --keyring=KEY_RING\ --location=global\ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com\ --role=roles/cloudkms.signer
Membuat catatan Artifact Analysis
Di bagian ini, Anda akan membuat catatan.
Simpan ID catatan:
export NOTE_ID=snakeoil
Simpan URI catatan:
export NOTE_URI=projects/$PROJECT_ID/notes/$NOTE_ID
Membuat payload permintaan:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "voucher note for snakeoil check" } } } EOM
Buat catatan:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud --project ${PROJECT_ID} auth print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/?noteId=${NOTE_ID}"
Membuat dan mengonfigurasi Server Voucher
Dalam penyiapan satu kali ini, Anda akan mendapatkan, mengonfigurasi, dan mem-build image Server Voucher. Selanjutnya, Anda menyimpannya di Container Registry.
Clone repositori Voucher:
git clone https://github.com/grafeas/voucher.git cd voucher/
Repositori ini berisi:
- Kode sumber untuk membuat Server Voucher.
- Kode sumber untuk membuat Klien Voucher.
- Contoh yang menunjukkan penggunaan Voucher.
Memperbarui file konfigurasi Server Voucher.
Linux
Buat file konfigurasi Server Voucher dari template, dengan mengganti
dan dengan nilai yang Anda tentukan di atas. Anda dapat melakukannya dengan menjalankan perintah berikut: cat tutorials/cloudrun/config.toml.template \ | sed -e "s?<PROJECT_ID>?${PROJECT_ID}?g" \ | sed -e "s?<KMS_KEY_NAME>?${KMS_RESOURCE_ID}?g" \ > tutorials/cloudrun/config.toml
OS lainnya
Edit file
tutorials/cloudrun/config.toml.template
.- Ganti
<PROJECT_ID>
dengan nilai di${PROJECT_ID}
. - Ganti
<KMS_KEY_NAME>
dengan nilai di${KMS_RESOURCE_ID}
.
- Ganti
Simpan file sebagai
tutorials/cloudrun/config.toml
.
Lihat file konfigurasi Server Voucher:
cat tutorials/cloudrun/config.toml
Anda akan melihat output yang berisi hal berikut:
failon = "high"
Perhatikan bahwa dalam file konfigurasi, opsi
failon
ditetapkan kehigh
. Setelan ini mengonfigurasi Server Voucher untuk melakukan pemeriksaan kerentanan pada image. Jika image berisi kerentanan dengan tingkat keparahanHIGH
, pemeriksaan akan gagal dan Server Voucher tidak akan membuat pengesahan Otorisasi Biner. Untuk informasi selengkapnya tentang setelanfail-on
, lihat Fail-On: Gagal pada kerentanan.Buat dan upload image penampung Server Voucher:
Di bagian ini, Anda akan menjalankan pipeline Cloud Build yang membuat image container Server Voucher. Build tersebut juga mengupload image Server Voucher ke gcr.io/$PROJECT_ID/voucher-server.
gcloud builds submit --config ./tutorials/cloudrun/cloudbuild-server.yaml
Men-deploy Server Voucher di Cloud Run
Pilih wilayah.
Untuk melihat daftar wilayah yang tersedia, buka Melihat daftar wilayah yang tersedia. Buat variabel untuk menyimpan region yang dipilih:
export REGION=REGION
Ganti REGION dengan nama wilayah tempat Anda berencana untuk men-deploy Server Voucher Anda.
Men-deploy Server Voucher di Cloud Run.
gcloud run deploy --image gcr.io/${PROJECT_ID}/voucher-server \ --platform managed voucher-server \ --region ${REGION} \ --no-allow-unauthenticated
Anda akan melihat output seperti berikut:
Service [voucher-server] revision [voucher-server-00001-caw] has been deployed and is serving 100 percent of traffic. Service URL: https://voucher-server-4wjtm2amga-uc.a.run.app
Simpan URL layanan Server Voucher:
export SERVER_SERVICE_URL=$(gcloud run services describe voucher-server --platform managed --region ${REGION} --format='value(status.url)')
Siapkan Klien Voucher
Pada langkah-langkah berikut, Anda akan menyiapkan Klien Voucher.
Buat akun layanan invoker untuk Klien Voucher:
gcloud iam service-accounts create INVOKER_ACCOUNT_NAME
Ganti INVOKER_ACCOUNT_NAME dengan nama untuk akun layanan invoker, seperti
voucher-invoker
.Tentukan akun layanan:
export INVOKER_SERVICE_ACCOUNT=INVOKER_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com
Berikan peran
run.invoker
ke akun layanan invoker untuk project Anda.Berikan izin pada akun layanan invoker Anda untuk memanggil Server Voucher di Cloud Run. Untuk melakukannya, masukkan perintah berikut:
gcloud run services add-iam-policy-binding voucher-server \ --member serviceAccount:$INVOKER_SERVICE_ACCOUNT \ --role roles/run.invoker \ --platform managed \ --region ${REGION}
Berikan peran
iam.serviceAccountTokenCreator
ke akun layanan invoker untuk Cloud Build.Di bagian ini, Anda mengizinkan akun layanan Cloud Build untuk meniru identitas akun layanan invoice, sehingga Klien Voucher memiliki izin untuk mengirim permintaan ke Server Voucher selama proses build. Untuk melakukannya, masukkan perintah berikut:
gcloud iam service-accounts add-iam-policy-binding $INVOKER_SERVICE_ACCOUNT \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Menggunakan Voucher untuk memeriksa kerentanan pada image
Di bagian ini, Anda akan menjalankan dua contoh pipeline Cloud Build. Di kedua pipeline, Anda membuat gambar, lalu menggunakan Voucher untuk memeriksa kerentanannya.
Kasus kegagalan
Di bagian ini, contoh pipeline build gagal membuat pengesahan.
Image yang Anda build berbasis Debian 9 berisi setidaknya satu kerentanan
dengan tingkat keparahan HIGH
. Opsi fail-on
di Server Voucher config.toml
ditetapkan untuk gagal pada kerentanan tingkat keparahan HIGH
. Dalam hal ini, Server Voucher tidak membuat pengesahan Otorisasi Biner.
Jalankan pipeline build:
gcloud builds submit \ --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT \ --config=tutorials/cloudrun/examples/cloudbuild-bad.yaml tutorials/cloudrun/examples
Telusuri log dari build terakhir untuk menemukan temuan
snakeoil
Voucher:Konsol
Catat ID build dari build terakhir.
Di konsol Google Cloud, buka halaman Build History.
Di bagian Build, klik item yang berisi beberapa karakter pertama ID build.
Klik Lihat Mentah.
Telusuri
snakeoil
menggunakan browser Anda.Anda akan melihat output seperti berikut:
"name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
gcloud
Simpan ID build dari build tersebut:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Telusuri log build Anda dengan memasukkan perintah berikut:
gcloud builds log ${BUILD_ID} | grep "snakeoil"
Outputnya akan terlihat seperti berikut:
"name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
Kasus keberhasilan
Di bagian ini, contoh pipeline build berhasil membuat pengesahan.
Semua kerentanan yang teridentifikasi diklasifikasikan lebih rendah dari nilai minimum fail-on
, sehingga pemeriksaan lulus pipeline akan membuat pengesahan.
Menjalankan pipeline:
gcloud builds submit\ --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT\ --config=tutorials/cloudrun/examples/cloudbuild-good.yaml tutorials/cloudrun/examples
Telusuri log dari build terakhir untuk menemukan temuan
snakeoil
Voucher:Konsol
Catat ID build dari build terakhir.
Di konsol Google Cloud, buka halaman Build History.
Di bagian Build, klik item yang berisi beberapa karakter pertama ID build.
Klik Lihat Mentah.
Telusuri
snakeoil
menggunakan browser Anda.Anda akan melihat output seperti berikut:
"name":"snakeoil","success":true,"attested":true
gcloud
Simpan ID build dari build terakhir:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Telusuri log build Anda dengan memasukkan perintah berikut:
gcloud builds log ${BUILD_ID} | grep "snakeoil"
Outputnya akan terlihat seperti berikut:
"name":"snakeoil","success":true,"attested":true
Pembersihan
Untuk membersihkan resource yang digunakan dalam dokumen ini, Anda dapat menghapus project dengan cara berikut:
gcloud projects delete ${PROJECT_ID}
Membuat attestor
Untuk membuat kebijakan yang memerlukan pengesahan yang Anda buat menggunakan metode yang dijelaskan dalam panduan ini, Anda harus membuat attestor terlebih dahulu.
Untuk membuat attestor, lakukan hal berikut:
Ambil materi kunci publik dari kunci Cloud KMS yang Anda buat sebelumnya dalam panduan ini:
gcloud kms keys versions get-public-key 1 \ --key KEY_NAME \ --keyring KEY_RING \ --location global \ --output-file OUTPUT_PATH
KEY_NAME
: adalah nama kunciKEY_RING
: nama key ringOUTPUT_PATH
: jalur file—misalnya,my-key.pem
Buat attestor menggunakan materi kunci publik dalam file dan catatan yang Anda buat sebelumnya dalam panduan ini. Anda dapat membuat attestor melalui Google Cloud Console atau gcloud CLI.
Buat kebijakan yang memerlukan pengesahan dan berikan attestor yang Anda buat di bagian ini. Anda dapat membuat kebijakan melalui Google Cloud Console atau gcloud CLI
Membuat pengesahan
Untuk membuat pengesahan menggunakan attestor, lihat Membuat pengesahan menggunakan Cloud KMS.
Langkah selanjutnya
- Konfigurasikan kebijakan Otorisasi Biner untuk mewajibkan pengesahan menggunakan alat command line atau Konsol Google Cloud.
- Buat attestor yang digunakan oleh Otorisasi Biner attestor untuk memverifikasi pengesahan pada waktu deployment menggunakan alat command line atau Konsol Google Cloud.
- Lihat Dokumentasi voucher di GitHub.
- Pelajari Otorisasi Biner.
- Pelajari Analisis Artefak dan pemindaian kerentanan.
- Pelajari Cloud Key Management Service.