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 pengesahan Otorisasi Biner untuk image tersebut. Voucher 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, langkah tersebut akan mengirimkan image ke Server Voucher, yang 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 mengaktifkan pemeriksaan dalam file konfigurasi dengan
menetapkan opsi fail-on
ke nilai minimum kerentanan, seperti yang ditunjukkan nanti dalam
tutorial ini.
Setelah pemeriksaan snakeoil
selesai, jika semua kerentanan yang diidentifikasi berada di bawah nilai minimum, Server Voucher akan membuat pengesahan Otorisasi Biner untuk image. Jika salah satu kerentanan yang diidentifikasi memenuhi atau
melampaui nilai minimum, Server Voucher tidak akan membuat pengesahan.
Pada waktu deployment image container, tanpa pengesahan terverifikasi, penegak Binary Authorization tidak mengizinkan image di-deploy.
Tujuan
Dalam panduan ini, Anda akan melakukan hal berikut:
- Siapkan Server Voucher di Cloud Run.
- Siapkan Klien Voucher.
- Menggunakan Voucher dalam 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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Sebaiknya Anda menyiapkan Otorisasi Biner dengan Google Kubernetes Engine. Tutorial ini menjelaskan cara membuat pengesahan. Untuk menggunakan penerapan waktu deployment guna memverifikasi pengesahan dan men-deploy image terkait, Otorisasi Biner harus disiapkan. Pastikan Anda mengonfigurasi kebijakan untuk memerlukan pengesahan. Anda dapat mengonfigurasi kebijakan di Konsol Google Cloud atau di command line.
-
Tentukan project Google Cloud Anda dalam 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 selanjutnya:
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" \ --format='value(project_number)')
Menyiapkan Server Voucher
Pada langkah-langkah berikut, Anda akan menyiapkan Server Voucher.
Membuat kunci penandatanganan Cloud Key Management Service
Di bagian ini, Anda akan 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 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 akan memberikan peran
cloudkms.signer
ke akun layanan yang menjalankan Server Voucher. Hal ini memungkinkan Server Voucher untuk 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
Buat 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}"
Mem-build dan mengonfigurasi Server Voucher
Dalam penyiapan satu kali ini, Anda akan mendapatkan, mengonfigurasi, dan mem-build image Server Voucher. Kemudian, Anda menyimpannya di Container Registry.
Clone repositori Voucher:
git clone https://github.com/grafeas/voucher.git cd voucher/
Repositori ini berisi:
- Kode sumber untuk mem-build Server Voucher.
- Kode sumber untuk mem-build Klien Voucher.
- Contoh yang menunjukkan penggunaan Voucher.
Perbarui file konfigurasi Server Voucher.
Linux
Buat file konfigurasi Server Voucher dari template, dengan mengganti
dan dengan nilai yang Anda tentukan di atas. Anda 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 gambar. Jika image berisi kerentanan dengan tingkat keparahanHIGH
, pemeriksaan akan gagal dan Server Voucher tidak akan membuat pengesahan Binary Authorization. Untuk mengetahui informasi selengkapnya tentang setelanfail-on
, lihat Fail-On: Gagal pada kerentanan.Build dan upload image container Server Voucher:
Di bagian ini, Anda akan menjalankan pipeline Cloud Build yang mem-build image container Server Voucher. Build 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 region yang tersedia, lihat Melihat daftar region yang tersedia. Buat variabel untuk menyimpan region yang Anda pilih:
export REGION=REGION
Ganti REGION dengan nama region tempat Anda berencana untuk men-deploy Server Voucher.
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)')
Menyiapkan 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 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 pemanggil untuk Cloud Build.Di bagian ini, Anda akan memberikan izin akun layanan Cloud Build untuk meniru identitas akun layanan pemanggil sehingga Klien Voucher memiliki izin untuk mengirim permintaan ke Server Voucher selama 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 image
Di bagian ini, Anda akan menjalankan dua contoh pipeline Cloud Build. Di kedua pipeline, Anda mem-build image, lalu menggunakan Voucher untuk memeriksa kerentanan.
Kasus kegagalan
Di bagian ini, contoh pipeline build gagal membuat pengesahan.
Image yang Anda build berdasarkan Debian 9 berisi setidaknya satu kerentanan
dengan tingkat keparahan HIGH
. Opsi fail-on
di Voucher Server 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 Voucher
snakeoil
: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 View Raw.
Telusuri
snakeoil
menggunakan browser Anda.Anda akan melihat output seperti berikut:
"name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
gcloud
Simpan ID build dari build:
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 diidentifikasi diklasifikasikan lebih rendah dari nilai minimum
fail-on
sehingga pemeriksaan lulus pipeline yang 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 Voucher
snakeoil
: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 View Raw.
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 sebagai 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 pengesah terlebih dahulu.
Untuk membuat pengautentikasi, 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 pengautentikasi menggunakan materi kunci publik dalam file dan catatan yang Anda buat sebelumnya dalam panduan ini. Anda dapat membuat pengautentikasi melalui konsol Google Cloud atau gcloud CLI.
Buat kebijakan yang mewajibkan pengesahan dan berikan attestor yang Anda buat di bagian ini. Anda dapat membuat kebijakan melalui Konsol Google Cloud atau gcloud CLI
Membuat pengesahan
Untuk membuat pengesahan menggunakan pengautentikasi, lihat Membuat pengesahan menggunakan Cloud KMS.
Langkah selanjutnya
- Konfigurasikan kebijakan Otorisasi Biner untuk mewajibkan pengesahan menggunakan alat command line atau Konsol Google Cloud.
- Buat pengautentikasi yang digunakan Binary Authorization untuk memverifikasi pengesahan pada waktu deployment menggunakan alat command line atau Konsol Google Cloud.
- Lihat dokumentasi Voucher di GitHub.
- Pelajari Otorisasi Biner.
- Pelajari Artifact Analysis dan pemindaian kerentanan.
- Pelajari Cloud Key Management Service.