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 mengizinkan semua image di-deploy. Anda mengujinya dengan men-deploy image container di cluster Google Kubernetes Engine (GKE). Kemudian, Anda menetapkan aturan default untuk melarang semua gambar di-deploy dan mencoba men-deploy gambar.
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init
- Instal
kubectl
. Di konsol Google Cloud , buka halaman GKE Kubernetes clusters:
Klik Buat.
Di bagian Membuat cluster Autopilot, lakukan hal berikut:
Di kolom Name, masukkan
test-cluster
.Di menu Region, pilih
us-central1
.Luaskan bagian Setelan lanjutan.
Klik link Keamanan untuk menampilkan panel Keamanan.
Di panel Security, centang kotak Enable Binary Authorization.
Pilih Khusus penerapan.
Klik Berikutnya, lalu klik Berikutnya:Tinjau dan Buat.
Untuk mulai membuat cluster, klik Buat.
Buka halaman Binary Authorization di konsol Google Cloud .
Konsol menampilkan detail tentang kebijakan tersebut.
Klik Edit Kebijakan.
Di Project Default Rule, opsi Allow All Images dipilih.
Buka halaman Cluster GKE di Google Cloud console.
Klik Deploy.
Konsol akan meminta Anda memasukkan detail tentang deployment.
Pilih Existing Container Image.
Masukkan
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
sebagai jalur image container.Klik Lanjutkan.
Masukkan
hello-server
di kolom Nama Aplikasi.Klik Deploy.
Perbarui file
kubeconfig
lokal:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Tindakan ini akan memberikan informasi endpoint dan kredensial yang diperlukan untuk mengakses cluster di GKE.
Deploy image:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Kembali ke halaman Workloads GKE di konsolGoogle Cloud .
Pilih beban kerja
hello-server
.Klik Hapus.
Kembali ke halaman Binary Authorization di konsol Google Cloud .
Klik Edit Kebijakan.
Pilih Jangan Izinkan Semua Gambar.
Klik Simpan Kebijakan.
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 kembali file YAML kebijakan ke Otorisasi Biner:
gcloud container binauthz policy import /tmp/policy.yaml
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 diupdate 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"
Buka halaman Cluster GKE di Google Cloud console.
Klik Deploy.
Konsol akan meminta Anda memasukkan detail tentang deployment.
Pilih Existing Container Image.
Masukkan
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
sebagai jalur image container.Klik Lanjutkan.
Masukkan
hello-server
di kolom Nama Aplikasi.Klik Deploy.
- POD_NAME: nama Pod.
- IMAGE_NAME: nama image.
- ATTESTOR_NAME: nama pengesah.
Buka halaman Cluster GKE di Google Cloud console.
Pilih cluster
test-cluster
, lalu klik Delete.- Gunakan pengesah
built-by-cloud-build
untuk men-deploy hanya image yang dibuat oleh Cloud Build (Pratinjau). - Untuk tutorial end-to-end tentang mewajibkan pengesahan, lihat:
- Baca referensi kami tentang DevOps dan jelajahi program riset DevOps Research and Assessment (DORA).
Membuat cluster dengan penerapan Otorisasi Biner diaktifkan
Sekarang, Anda akan membuat cluster GKE dengan Otorisasi Biner diaktifkan. Ini adalah cluster tempat Anda ingin menjalankan image container yang di-deploy.
Otorisasi Biner berfungsi dengan cluster Autopilot atau Standard.
Google Cloud console
Langkah-langkah berikut mengonfigurasi cluster Autopilot.
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.
Google Cloud console
Untuk melihat kebijakan default, lakukan hal berikut:
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 tersebut 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 image container contoh ke cluster.
Untuk panduan memulai ini, Anda menggunakan contoh image container yang berada di jalur
us-docker.pkg.dev/google-samples/containers/gke/hello-app
di Artifact Registry. Ini adalah image container publik yang dibuat oleh Google yang berisi aplikasi contoh "Hello, World!".
Google Cloud console
Untuk menguji kebijakan, lakukan hal berikut:
kubectl
Untuk menguji kebijakan, lakukan hal berikut:
Sekarang, verifikasi bahwa deployment diizinkan oleh Otorisasi Biner.
Google Cloud console
Untuk memverifikasi bahwa image telah di-deploy, buka halaman Workloads GKE di konsol Google Cloud .
Beban kerja untuk deployment muncul dengan ikon hijau yang menunjukkan bahwa image berhasil di-deploy.
kubectl
Untuk memverifikasi bahwa image telah di-deploy, lakukan hal 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
Pastikan untuk menghapus deployment agar Anda dapat melanjutkan ke langkah berikutnya:
Google Cloud console
Untuk menghapus deployment, lakukan langkah-langkah berikut:
kubectl
Untuk menghapus deployment, lakukan langkah-langkah berikut:
kubectl delete deployment hello-server
Mengonfigurasi kebijakan penerapan untuk melarang semua gambar
Sekarang, ubah kebijakan untuk memblokir, bukan mengizinkan semua gambar di-deploy.
Google Cloud console
Untuk mengubah kebijakan, lakukan hal berikut:
gcloud
Untuk mengubah kebijakan, lakukan hal berikut:
REST API
Untuk mengubah kebijakan, lakukan hal berikut:
Menguji ulang kebijakan
Sekali lagi, uji kebijakan dengan men-deploy image container sampel ke cluster. Kali ini, Otorisasi Biner memblokir image agar tidak di-deploy.
Google Cloud console
Deploy image:
kubectl
Deploy image:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Sekarang Anda dapat memverifikasi bahwa kebijakan diblokir:
Google Cloud console
Untuk memastikan bahwa image tidak di-deploy, lakukan hal berikut:
Kembali ke halaman Workloads GKE di konsolGoogle 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 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:
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya 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:
gcloud
Untuk menghapus cluster, lakukan langkah-langkah berikut:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster