Tutorial ini menunjukkan cara mengonfigurasi dan menguji kebijakan Otorisasi Biner yang memerlukan attestations. Jenis kebijakan ini mengamankan supply chain software berbasis container dengan menentukan siapa yang dapat men-deploy image container di Google Kubernetes Engine (GKE) dan image container mana yang diizinkan untuk di-deploy oleh GKE.
Pada waktu deployment, Otorisasi Biner menggunakan attestor untuk memverifikasi tanda tangan digital di attestations. Pengesahan dibuat oleh penandatangan sebagai bagian dari proses build.
Dalam tutorial ini, cluster GKE, pengesahan, dan attestor semuanya berada dalam satu project. Konfigurasi project tunggal sebagian besar berguna untuk menguji atau bereksperimen dengan layanan. Untuk contoh yang lebih nyata, lihat konfigurasi multi-project.
Langkah-langkah di bawah ini menjelaskan tugas yang dilakukan dari Konsol Google Cloud, serta beberapa tugas yang dilakukan menggunakan perintah gcloud
. Untuk melakukan langkah-langkah ini menggunakan gcloud
, lihat Mulai menggunakan Google Cloud CLI.
Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Buat cluster (GKE) dengan Otorisasi Biner yang diaktifkan
- Membuat attestor yang digunakan petugas Otorisasi Biner untuk memverifikasi tanda tangan pada pengesahan
- Mengonfigurasi kebijakan yang memerlukan pengesahan
- Membuat pasangan kunci kriptografis untuk menandatangani pengesahan dan kemudian memverifikasinya
- Menandatangani ringkasan image container, membuat tanda tangan
- Membuat pengesahan menggunakan tanda tangan
- Menguji kebijakan dengan men-deploy image container ke GKE
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
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 Container Registry, Artifact Analysis and Binary Authorization.
- 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 Container Registry, Artifact Analysis and Binary Authorization.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
- Instal
kubectl
.
Menetapkan project default
Untuk memfasilitasi perintah yang mengikutinya, simpan project ID Google Cloud Anda dalam variabel lingkungan sebagai berikut:
PROJECT_ID=PROJECT_ID
dengan PROJECT_ID adalah nama project Anda.
Jika project default tidak dipilih, tetapkan sekarang:
gcloud config set project ${PROJECT_ID}
Membuat cluster yang mengaktifkan Otorisasi Biner
Membuat cluster
Sekarang, Anda dapat membuat cluster GKE dengan Otorisasi Biner yang diaktifkan. Di sini, Anda membuat cluster bernama test-cluster
di
zona GKE us-central1-a
.
Untuk membuat cluster, ikuti langkah-langkah berikut:
Buka menu GKE di Google Cloud Console.
Klik Buat Cluster.
Masukkan
test-cluster
di kolom Name.Pilih Zonal di opsi Jenis lokasi.
Pilih
us-central1-a
dari daftar drop-down Zone.Klik Ketersediaan, jaringan, keamanan, dan fitur tambahan.
Di bagian Keamanan, pilih Aktifkan Otorisasi Biner.
Pilih Enforce-only.
Klik Create.
Konfigurasi kubectl
Anda juga harus mengupdate file kubeconfig
lokal untuk penginstalan
kubectl
. Langkah ini memberikan kredensial dan informasi endpoint yang diperlukan untuk mengakses cluster di GKE.
Untuk mengupdate file kubeconfig
lokal, ikuti langkah-langkah berikut:
gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Lihat kebijakan default
Kebijakan di Otorisasi Biner adalah serangkaian aturan yang mengatur deployment image container. Anda dapat memiliki satu kebijakan per project. Secara default, kebijakan ini dikonfigurasi untuk mengizinkan semua image container di-deploy.
Untuk melihat kebijakan default, ikuti langkah-langkah berikut:
Buka halaman Otorisasi Biner di konsol Google Cloud.
Klik Edit Kebijakan.
Di Project Default Rule, opsi Allow All Images akan ditampilkan.
Klik Simpan Kebijakan.
Membuat attestor
attestor adalah otoritas verifikasi yang digunakan oleh pihak berwenang Otorisasi Biner pada waktu deployment untuk memutuskan apakah akan mengizinkan GKE men-deploy image container bertanda tangan yang sesuai. Attestor berisi kunci publik dan biasanya dikelola oleh orang yang bertanggung jawab atas keamanan supply chain software.
Membuat attestor mengharuskan Anda untuk:
- Membuat attestor itu sendiri di Otorisasi Biner
- Buat catatan attestor terkait secara otomatis di Analisis Artefak untuk menyimpan metadata pengesahan tepercaya yang digunakan dalam proses otorisasi
Untuk tutorial ini, Anda memiliki satu attestor bernama test-attestor
. Dalam skenario dunia nyata, Anda dapat memiliki berapa pun attestor, yang masing-masing mewakili pihak
yang berpartisipasi dalam proses otorisasi untuk image.
Membuat pasangan kunci
Otorisasi Biner menggunakan kunci kriptografis untuk memverifikasi identitas penanda tangan dengan aman. Hal ini memastikan bahwa hanya image container yang diizinkan yang dapat di-deploy. Pasangan kunci terdiri dari kunci pribadi dan kunci publik. Penandatangan menggunakan kunci pribadi untuk menandatangani ringkasan image container, yang menghasilkan tanda tangan yang kemudian disimpan dalam pengesahan. Kunci publik disimpan di attestor. Pada waktu deployment, pemberlakuan Otorisasi Biner menggunakan kunci publik attestor untuk memverifikasi tanda tangan dalam pengesahan sebelum mengizinkan container di-deploy.
Dalam tutorial ini, Anda menggunakan format Public-Key Infrastructure (X.509) (PKIX) untuk kunci kriptografis. Tutorial ini menggunakan Elliptic Curve Digital Signing Algorithm (ECDSA) yang direkomendasikan untuk menghasilkan pasangan kunci PKIX. Anda juga dapat menggunakan kunci RSA atau PGP untuk penandatanganan. Lihat Tujuan dan algoritma utama untuk informasi selengkapnya tentang algoritma penandatanganan.
Kunci yang dihasilkan dan disimpan oleh Cloud Key Management Service (Cloud KMS) sudah mematuhi PKIX. Baca artikel Membuat attestor menggunakan CLI untuk mengetahui informasi selengkapnya tentang cara menggunakan kunci PKIX dan Cloud KMS.
Untuk menghasilkan pasangan kunci PKIX, lakukan hal berikut:
Buat kunci pribadi:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
Ekstrak kunci publik dari kunci pribadi:
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Membuat attestor
Sekarang Anda dapat membuat attestor itu sendiri di Otorisasi Biner dan mengaitkan kunci publik yang Anda buat.
Untuk membuat attestor, lakukan hal berikut:
Kembali ke halaman Otorisasi Biner di konsol Google Cloud.
Di tab Attestors, klik Create.
Isi kolom sebagai berikut:
Masukkan
test-attestor
di kolom Nama attestor.Pastikan opsi Automatically create a Artifact Analysis note dicentang.
Klik Add a PKIX Public Key.
Buka
/tmp/ec_public.pem
di editor teks. Ini adalah file kunci publik yang Anda buat di langkah sebelumnya. Salin konten file ke kotak teks Public key material.Klik
Elliptic Curve P-256 - SHA256 Digest
pada menu pull-down Algoritme tanda tangan.Klik Done.
Klik Create untuk membuat attestor.
Simpan ID kunci publik.
Untuk melihat ID kunci publik attestor setelah menambahkannya ke attestor, gunakan
gcloud container binauthz attestors describe ${ATTESTOR_NAME}
. Untuk membuat variabel lingkungan guna menyimpan ID kunci publik, jalankan perintah berikut:ATTESTOR_NAME=test-attestor PUBLIC_KEY_ID=$(gcloud container binauthz attestors describe ${ATTESTOR_NAME}\ --format='value(userOwnedGrafeasNote.publicKeys[0].id)')
Mengonfigurasi kebijakan
Sekarang, Anda dapat mengonfigurasi kebijakan:
Kembali ke halaman Otorisasi Biner di konsol Google Cloud.
Di tab Kebijakan, klik Edit Kebijakan.
Pilih Hanya Izinkan Gambar yang Telah Disetujui oleh Attestor Berikut.
Klik Add Attestors.
Klik Tambahkan berdasarkan project dan nama attestor.
Masukkan PROJECT_ID di kolom Project name.
Masukkan
test-attestor
di kolom Nama attestor.Klik Add 1 Attestor.
Klik Simpan Kebijakan.
Untuk informasi selengkapnya, lihat Mengonfigurasi Kebijakan Menggunakan Konsol.
Menguji kebijakan
Anda dapat menguji kebijakan yang dikonfigurasi di atas dengan mencoba men-deploy contoh image container ke cluster. Kebijakan ini akan memblokir deployment karena pengesahan yang diperlukan belum dibuat.
Untuk tutorial ini, Anda dapat menggunakan image contoh dari Container Registry dan Artifact Registry. Image dari Container Registry terletak di jalur gcr.io/google-samples/hello-app:1.0
. Image dari Artifact Registry terletak di jalur us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
.
Kedua jalur berisi image publik yang dibuat oleh Google yang berisi aplikasi contoh "Hello,
World!".
Untuk mencoba men-deploy image, jalankan perintah berikut:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Sekarang, verifikasi bahwa deployment diblokir oleh Otorisasi Biner:
kubectl get pods
Perintah tersebut mencetak pesan berikut, yang menunjukkan bahwa image tidak di-deploy:
No resources found.
Anda bisa mendapatkan detail deployment lebih lanjut:
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}\{{.message}}{{"\n"}}{{end}}'
Anda akan melihat respons yang terlihat seperti berikut:
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Image IMAGE_NAME denied by ATTESTOR_NAME: No attestations found
Dalam output ini:
- POD_NAME: nama Pod.
- IMAGE_NAME: nama image.
- ATTESTOR_NAME: nama attestor.
Pastikan untuk menghapus deployment agar Anda dapat melanjutkan ke langkah berikutnya:
kubectl delete deployment hello-server
Membuat pengesahan
Pengesahan adalah dokumen digital yang dibuat oleh penandatangan yang menyatakan bahwa GKE diizinkan untuk men-deploy image container terkait. Proses pembuatan pengesahan terkadang disebut "menandatangani gambar".
Dalam tutorial ini, Anda akan membuat pengesahan, misalnya image dari Container Registry dan Artifact Registry.
Untuk membuat pengesahan, lakukan hal berikut:
Tetapkan variabel yang menyimpan jalur registry dan digest image, serta nama attestor:
Container Registry
IMAGE_PATH="gcr.io/google-samples/hello-app" IMAGE_DIGEST="sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4" ATTESTOR="test-attestor" IMAGE_TO_ATTEST=${IMAGE_PATH}@${IMAGE_DIGEST}
Artifact Registry
IMAGE_PATH="us-docker.pkg.dev/google-samples/containers/gke/hello-app" IMAGE_DIGEST="sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567" ATTESTOR="test-attestor" IMAGE_TO_ATTEST=${IMAGE_PATH}@${IMAGE_DIGEST}
Buat payload pengesahan:
Container Registry
gcloud container binauthz create-signature-payload \ --artifact-url=${IMAGE_PATH}@${IMAGE_DIGEST} > /tmp/generated_payload.json
File JSON payload memiliki konten berikut:
{ "critical": { "identity": { "docker-reference": "gcr.io/google-samples/hello-app" }, "image": { "docker-manifest-digest": "sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea 882eb722c3be4" }, "type": "Google cloud binauthz container signature" } }
Artifact Registry
gcloud container binauthz create-signature-payload \ --artifact-url=${IMAGE_PATH}@${IMAGE_DIGEST} > /tmp/generated_payload.json
File JSON payload memiliki konten berikut:
{ "critical": { "identity": { "docker-reference": "us-docker.pkg.dev/google-samples/containers/gke/hello-app" }, "image": { "docker-manifest-digest": "sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567" }, "type": "Google cloud binauthz container signature" } }
Tanda tangani payload dengan kunci pribadi PKIX dan buat file tanda tangan:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
File tanda tangan adalah versi file JSON payload yang ditandatangani secara digital yang Anda buat di atas.
Buat dan validasi pengesahan:
gcloud container binauthz attestations create \ --project="${PROJECT_ID}" \ --artifact-url="${IMAGE_TO_ATTEST}" \ --attestor="projects/${PROJECT_ID}/attestors/${ATTESTOR_NAME}" \ --signature-file=/tmp/ec_signature \ --public-key-id="${PUBLIC_KEY_ID}" \ --validate
dengan
PUBLIC_KEY_ID
adalah ID kunci publik yang Anda temukan di Membuat pasangan kunci PKIX di atas.Flag
validate
memeriksa apakah pengesahan dapat diverifikasi oleh attestor yang Anda konfigurasi di kebijakan.Pastikan bahwa pengesahan telah dibuat:
gcloud container binauthz attestations list \ --attestor=$ATTESTOR_NAME --attestor-project=$PROJECT_ID
Untuk informasi selengkapnya tentang cara membuat pengesahan, lihat Membuat Pengesahan.
Menguji ulang kebijakan
Sekali lagi, uji kebijakan dengan men-deploy contoh image container ke cluster.
Kali ini, Anda harus men-deploy image menggunakan ringkasan, bukan tag seperti 1.0
atau latest
, karena Otorisasi Biner akan menggunakan jalur dan ringkasan image untuk mencari pengesahan. Di sini, Otorisasi Biner memungkinkan image di-deploy karena pengesahan yang diperlukan telah dibuat.
Untuk men-deploy image, jalankan perintah berikut:
kubectl run hello-server --image ${IMAGE_PATH}@${IMAGE_DIGEST} --port 8080
Untuk memastikan bahwa image telah di-deploy, jalankan perintah berikut:
kubectl get pods
Perintah tersebut mencetak pesan yang mirip dengan yang berikut, yang menunjukkan bahwa deployment berhasil:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Untuk menghapus pod, jalankan perintah berikut:
kubectl delete pod hello-server
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.
Hapus cluster yang Anda buat di GKE:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Langkah selanjutnya
- Pelajari Otorisasi Biner lebih lanjut
- Pelajari konsep utama yang digunakan dalam Otorisasi Biner
- Gunakan attestor
built-by-cloud-build
untuk men-deploy image yang di-build hanya oleh Cloud Build (Pratinjau). - Pelajari cara menggunakan ringkasan gambar dalam manifes Kubernetes
- Mengaktifkan mode uji coba untuk menonaktifkan penerapan