Mengonfigurasi kebijakan Otorisasi Biner dengan GKE
Panduan memulai ini menunjukkan cara mengonfigurasi dan menguji aturan dasar dalam kebijakan Otorisasi Biner.
Dalam panduan memulai ini, Anda akan melihat dan mengonfigurasi aturan default dalam kebijakan. Aturan default memungkinkan semua image di-deploy. Anda mengujinya dengan men-deploy image penampung di cluster Google Kubernetes Engine (GKE). Kemudian, Anda menetapkan aturan default untuk melarang semua image di-deploy dan mencoba men-deploy image.
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 Artifact Registry, Binary Authorization 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 Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Instal
kubectl
.
Membuat cluster dengan penerapan Otorisasi Biner yang diaktifkan
Sekarang, Anda akan membuat cluster GKE dengan Otorisasi Biner yang diaktifkan. Ini adalah cluster tempat Anda ingin image container yang di-deploy berjalan.
Otorisasi Biner berfungsi dengan cluster Autopilot atau Standard.
Konsol Google Cloud
Langkah-langkah berikut mengonfigurasi cluster Autopilot.
Di konsol Google Cloud, buka halaman Kubernetes cluster GKE:
Klik Create.
Di bagian Membuat cluster Autopilot, lakukan hal berikut:
Di kolom Name, masukkan
test-cluster
.Di menu Region, pilih
us-central1
.Luaskan bagian Advanced settings.
Klik link Keamanan untuk menampilkan panel Keamanan.
Di panel Security, centang kotak Enable Binary Authorization.
Pilih Hanya terapkan.
Klik Berikutnya, lalu klik Berikutnya:Tinjau dan Buat.
Untuk mulai membuat cluster, klik Create.
gcloud
Jalankan gcloud container clusters create
dengan flag --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
diaktifkan.
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
Pembuatan cluster dapat memerlukan waktu beberapa menit.
Kebijakan default
Secara default, kebijakan Otorisasi Biner Anda dikonfigurasi untuk mengizinkan semua image container di-deploy.
Konsol Google Cloud
Untuk melihat kebijakan default, lakukan tindakan berikut:
Buka halaman Binary Authorization di konsol Google Cloud.
Konsol akan menampilkan detail tentang kebijakan.
Klik Edit Policy.
Di Project Default Rule, opsi Allow All Images dipilih.
gcloud
Untuk melihat kebijakan default, ekspor file YAML kebijakan sebagai berikut:
gcloud container binauthz policy export
Secara default, file memiliki konten berikut:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
REST API
Untuk melihat kebijakan default, ambil dalam format JSON sebagai berikut:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Perintah ini menghasilkan output berikut:
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Menguji kebijakan penegakan
Anda dapat menguji kebijakan penerapan dengan mencoba men-deploy contoh image container ke cluster.
Untuk panduan memulai ini, Anda akan menggunakan contoh image container yang terletak di jalur
gcr.io/google-samples/hello-app
di Container Registry. Ini adalah image
container publik yang dibuat oleh Google yang berisi aplikasi contoh "Halo, Dunia!".
Konsol Google Cloud
Untuk menguji kebijakan, lakukan hal berikut:
Buka halaman Clusters GKE di konsol Google Cloud.
Klik Deploy.
Konsol akan meminta Anda memasukkan detail tentang deployment.
Pilih Image Container yang Ada.
Masukkan
gcr.io/google-samples/hello-app:1.0
sebagai jalur image container.Klik Lanjutkan.
Masukkan
hello-server
di kolom Application Name.Klik Deploy.
kubectl
Untuk menguji kebijakan, lakukan hal berikut:
Perbarui file
kubeconfig
lokal:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Tindakan ini akan memberikan kredensial dan informasi endpoint yang diperlukan untuk mengakses cluster di GKE.
Deploy image:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Sekarang, verifikasi bahwa deployment diizinkan oleh Otorisasi Biner.
Konsol Google Cloud
Untuk memverifikasi bahwa image telah di-deploy, buka halaman Workloads GKE di konsol Google Cloud.
Beban kerja untuk deployment akan muncul dengan ikon hijau yang menunjukkan bahwa image berhasil di-deploy.
kubectl
Untuk memverifikasi bahwa image telah di-deploy, lakukan tindakan berikut:
kubectl get pods
Perintah ini akan mencetak pesan yang mirip dengan berikut ini, yang menunjukkan bahwa deployment berhasil:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Pastikan untuk menghapus deployment agar Anda dapat melanjutkan ke langkah berikutnya:
Konsol Google Cloud
Untuk menghapus deployment, lakukan tindakan berikut:
Kembali ke halaman Workloads GKE di konsol Google Cloud.
Pilih beban kerja
hello-server
.Klik Hapus.
kubectl
Untuk menghapus deployment, lakukan tindakan berikut:
kubectl delete deployment hello-server
Mengonfigurasi kebijakan penerapan untuk melarang semua gambar
Sekarang, ubah kebijakan untuk memblokir, bukan mengizinkan semua gambar di-deploy.
Konsol Google Cloud
Untuk mengubah kebijakan, lakukan hal berikut:
Kembali ke halaman Binary Authorization di Konsol Google Cloud.
Klik Edit Policy.
Pilih Larang Semua Gambar.
Klik Simpan Kebijakan.
gcloud
Untuk mengubah kebijakan, lakukan hal berikut:
Ekspor file YAML kebijakan:
gcloud container binauthz policy export > /tmp/policy.yaml
Di editor teks, ubah
evaluationMode
dariALWAYS_ALLOW
menjadiALWAYS_DENY
.File YAML kebijakan akan muncul sebagai berikut:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Impor file YAML kebijakan kembali ke Otorisasi Biner:
gcloud container binauthz policy import /tmp/policy.yaml
REST API
Untuk mengubah kebijakan, lakukan hal berikut:
Buat file teks dengan kebijakan yang diperbarui dalam format JSON:
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
Kirim kebijakan yang telah diperbarui ke REST API:
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Menguji ulang kebijakan
Sekali lagi, uji kebijakan dengan men-deploy contoh image container ke cluster. Kali ini, Otorisasi Biner memblokir image agar tidak di-deploy.
Konsol Google Cloud
Deploy image:
Buka halaman Clusters GKE di konsol Google Cloud.
Klik Deploy.
Konsol akan meminta Anda memasukkan detail tentang deployment.
Pilih Image Container yang Ada.
Masukkan
gcr.io/google-samples/hello-app:1.0
sebagai jalur image container.Klik Lanjutkan.
Masukkan
hello-server
di kolom Application Name.Klik Deploy.
kubectl
Deploy image:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Sekarang Anda dapat memverifikasi bahwa kebijakan telah diblokir:
Konsol Google Cloud
Untuk memverifikasi bahwa image tidak di-deploy, lakukan tindakan berikut:
Kembali ke halaman Workloads GKE di konsol Google Cloud.
Beban kerja untuk image container muncul dengan ikon merah yang menunjukkan bahwa image gagal di-deploy.
kubectl
Untuk memverifikasi bahwa image tidak di-deploy, jalankan perintah berikut:
kubectl get pods
Perintah ini 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. Denied by always_deny admission rule
Dalam output ini:
- POD_NAME: nama Pod.
- IMAGE_NAME: nama image.
- ATTESTOR_NAME: nama pengautentikasi.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.
Hapus cluster yang Anda buat di GKE:
Konsol
Untuk menghapus cluster, lakukan langkah-langkah berikut:
Buka halaman Clusters GKE di konsol Google Cloud.
Pilih cluster
test-cluster
, lalu klik Delete.
gcloud
Untuk menghapus cluster, lakukan langkah-langkah berikut:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Langkah selanjutnya
- Gunakan pengautentikasi
built-by-cloud-build
untuk hanya men-deploy image yang dibuat oleh Cloud Build (Pratinjau). - Untuk tutorial menyeluruh tentang mewajibkan pengesahan, lihat:
- Baca referensi kami tentang DevOps dan jelajahi program riset DevOps Research and Assessment (DORA).