Tutorial ini menunjukkan cara mengonfigurasi dan menguji kebijakan Otorisasi Biner yang memerlukan pengesahan. Jenis kebijakan ini mengamankan rantai pasokan software berbasis container Anda dengan menentukan siapa yang dapat men-deploy image container di Google Kubernetes Engine (GKE) dan image container mana yang diizinkan GKE untuk di-deploy.
Pada waktu deployment, Otorisasi Biner menggunakan attestor untuk memverifikasi tanda tangan digital dalam pengesahan. Pengesahan dibuat oleh penandatangan sebagai bagian dari proses build.
Dalam tutorial ini, cluster GKE, pengesahan, dan pengesah semuanya berada dalam satu project. Konfigurasi satu project 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 Anda lakukan dari konsol Google Cloud , serta beberapa tugas yang Anda lakukan menggunakan perintah gcloud. Untuk melakukan langkah-langkah ini
menggunakan gcloud, lihat Mulai menggunakan Google Cloud CLI.
Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Membuat cluster (GKE) dengan Otorisasi Biner diaktifkan
- Buat attestor yang digunakan pengelola Otorisasi Biner untuk memverifikasi tanda tangan pada pengesahan
- Mengonfigurasi kebijakan yang memerlukan pengesahan
- Buat pasangan kunci kriptografi untuk menandatangani pengesahan dan memverifikasinya nanti
- Menandatangani ringkasan image container, membuat tanda tangan
- Buat pengesahan menggunakan tanda tangan
- Uji kebijakan dengan men-deploy image container ke GKE
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Container Registry, Artifact Analysis and Binary Authorization APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Container Registry, Artifact Analysis and Binary Authorization APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Instal
kubectl.
Menetapkan project default
Untuk mempermudah perintah berikutnya, simpan Google Cloud project ID Anda dalam variabel lingkungan sebagai berikut:
PROJECT_ID=PROJECT_ID
dengan PROJECT_ID adalah nama project Anda.
Jika project default belum dipilih, tetapkan sekarang:
gcloud config set project ${PROJECT_ID}
Membuat cluster dengan Otorisasi Biner diaktifkan
Membuat cluster
Sekarang Anda dapat membuat cluster GKE dengan Otorisasi Biner yang diaktifkan. Di sini, Anda akan membuat cluster bernama test-cluster di zona GKE us-central1-a.
Untuk membuat cluster, ikuti langkah-langkah berikut:
Buka menu GKE di konsol Google Cloud .
Klik Create Cluster.
Masukkan
test-clusterdi kolom Name.Pilih Zonal di opsi Jenis lokasi.
Pilih
us-central1-adari menu drop-down Zone.Di panel navigasi, di bagian Cluster, klik Advanced settings.
Di baris Otorisasi Biner, klik edit Edit configuration.
Pilih Aktifkan Otorisasi Biner.
Pilih Terapkan saja, lalu klik Simpan.
Klik Create.
Konfigurasi kubectl
Anda juga harus mengupdate file kubeconfig lokal untuk penginstalan kubectl
Anda. Tindakan ini memberikan informasi endpoint dan kredensial yang diperlukan untuk
mengakses cluster di GKE.
Untuk memperbarui file kubeconfig lokal, ikuti langkah-langkah berikut:
gcloud container clusters get-credentials \
--zone us-central1-a \
test-cluster
Melihat kebijakan default
Kebijakan di Otorisasi Biner adalah serangkaian aturan yang mengatur deployment image container. Anda dapat memiliki satu kebijakan per project. Secara default, kebijakan 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 ditampilkan.
Klik Simpan Kebijakan.
Membuat attestor
attestor adalah otoritas verifikasi yang digunakan oleh penerap Otorisasi Biner pada waktu deployment untuk memutuskan apakah akan mengizinkan GKE men-deploy image container bertanda tangan yang sesuai. Pengesah berisi kunci publik dan biasanya dikelola oleh orang yang bertanggung jawab atas keamanan supply chain software.
Untuk membuat attestor, Anda harus:
- Membuat attestor itu sendiri di Otorisasi Biner
- Membuat catatan attestor terkait secara otomatis di Artifact Analysis untuk menyimpan metadata pengesahan tepercaya yang digunakan dalam proses otorisasi
Untuk tutorial ini, Anda memiliki satu pengesah bernama test-attestor. Dalam skenario dunia nyata, Anda dapat memiliki sejumlah pengesah, yang masing-masing mewakili pihak yang berpartisipasi dalam proses otorisasi untuk image.
Buat pasangan kunci
Otorisasi Biner menggunakan kunci kriptografi untuk memverifikasi identitas penanda tangan secara aman. Hal ini memastikan hanya image container yang diizinkan yang dapat di-deploy. Pasangan kunci terdiri dari kunci pribadi dan kunci publik. Penanda tangan menggunakan kunci pribadi untuk menandatangani ringkasan image container, sehingga menghasilkan tanda tangan yang kemudian disimpan dalam pengesahan. Kunci publik disimpan di attestor. Pada waktu deployment, penerapan Otorisasi Biner menggunakan kunci publik attestor untuk memverifikasi tanda tangan dalam pengesahan sebelum mengizinkan container di-deploy.
Dalam tutorial ini, Anda akan menggunakan format Public-Key Infrastructure (X.509) (PKIX) untuk kunci kriptografi. Tutorial ini menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) yang direkomendasikan untuk menghasilkan pasangan kunci PKIX. Anda juga dapat menggunakan kunci RSA atau PGP untuk penandatanganan. Lihat Tujuan utama dan algoritma untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan.
Kunci yang dibuat dan disimpan oleh Cloud Key Management Service (Cloud KMS) sesuai dengan PKIX. Lihat Membuat pengesah menggunakan CLI untuk mengetahui informasi selengkapnya tentang penggunaan kunci PKIX dan Cloud KMS.
Untuk membuat 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}
Buat 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-attestordi kolom Nama yang mengesahkan.Pastikan opsi Buat catatan Analisis Artefak secara otomatis dicentang.
Klik Tambahkan Kunci Publik PKIX.
Buka
/tmp/ec_public.pemdi editor teks. Ini adalah file kunci publik yang Anda buat di langkah sebelumnya. Salin konten file ke kotak teks Materi kunci publik.Klik
Elliptic Curve P-256 - SHA256 Digestdi menu drop-down Algoritma tanda tangan.Klik Done.
Klik Buat 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 Izinkan Hanya Gambar yang Telah Disetujui oleh Pengesah Berikut.
Klik Tambahkan Pengesah.
Klik Tambahkan menurut nama project dan pengesah.
Masukkan PROJECT_ID di kolom Project name.
Masukkan
test-attestordi kolom Nama yang mengesahkan.Klik Tambahkan 1 Pengesah.
Klik Simpan Kebijakan.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Kebijakan Menggunakan Konsol.
Menguji kebijakan
Anda dapat menguji kebijakan yang dikonfigurasi di atas dengan mencoba men-deploy image container contoh ke cluster. Kebijakan akan memblokir deployment karena pengesahan yang diperlukan belum dilakukan.
Untuk tutorial ini, Anda dapat menggunakan image contoh dari
Artifact Registry. Image dari Artifact Registry berada
di jalur us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0.
Jalur ini 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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Sekarang, verifikasi bahwa deployment diblokir oleh Otorisasi Biner:
kubectl get pods
Perintah akan mencetak pesan berikut, yang menunjukkan bahwa image tidak di-deploy:
No resources found.
Anda bisa mendapatkan detail lebih lanjut tentang deployment:
kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}\{{.message}}{{"\n"}}{{end}}'
Anda akan melihat respons yang menyerupai 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 pengesah.
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 penanda tangan yang mengonfirmasi bahwa GKE diizinkan untuk men-deploy image container terkait. Proses pembuatan pengesahan terkadang disebut "menandatangani image".
Dalam tutorial ini, Anda akan membuat pengesahan untuk contoh image dari Artifact Registry.
Untuk membuat pengesahan, lakukan hal berikut:
Tetapkan variabel yang menyimpan jalur dan ringkasan image registry, serta nama attestor:
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:
Artifact Registry
gcloud container binauthz create-signature-payload \ --artifact-url=${IMAGE_PATH}@${IMAGE_DIGEST} > /tmp/generated_payload.jsonFile 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" } }Tandatangani payload dengan kunci pribadi PKIX Anda dan keluarkan file tanda tangan:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signatureFile 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}" \ --validatedengan
PUBLIC_KEY_IDadalah ID kunci publik yang Anda temukan di Generate a PKIX pasangan kunci di atas.Flag
validatememeriksa apakah pengesahan dapat diverifikasi oleh attestor yang Anda konfigurasi dalam kebijakan Anda.Pastikan bahwa pengesahan telah dibuat:
gcloud container binauthz attestations list \ --attestor=$ATTESTOR_NAME --attestor-project=$PROJECT_ID
Untuk mengetahui informasi selengkapnya tentang cara membuat pengesahan, lihat Membuat Pengesahan.
Tes ulang kebijakan
Sekali lagi, uji kebijakan dengan men-deploy image container sampel ke cluster.
Kali ini, Anda harus men-deploy image menggunakan ringkasan, bukan tag seperti
1.0 atau latest, karena Otorisasi Biner akan menggunakan ringkasan untuk mencari
pengesahan. Di sini, Otorisasi Biner mengizinkan 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 memverifikasi bahwa image telah di-deploy, jalankan perintah berikut:
kubectl get pods
Perintah ini akan mencetak pesan yang mirip dengan 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 berikutnya
- Pelajari Otorisasi Biner lebih lanjut
- Pelajari konsep utama yang digunakan dalam Otorisasi Biner
- Gunakan pengesah
built-by-cloud-builduntuk men-deploy hanya image yang dibangun oleh Cloud Build. - Pelajari cara menggunakan ringkasan image dalam manifes Kubernetes
- Mengaktifkan mode uji coba untuk menonaktifkan penerapan