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 untuk di-deploy. Anda mengujinya dengan men-deploy image container di cluster Google Kubernetes Engine (GKE). Kemudian, Anda menetapkan aturan default untuk melarang semua image di-deploy dan mencoba men-deploy image.
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 Artifact Registry, 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 Artifact Registry, Binary Authorization.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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 menjalankan image container yang telah di-deploy.
Otorisasi Biner berfungsi dengan cluster Autopilot atau Standard.
Konsol Google Cloud
Langkah berikut akan mengonfigurasi cluster Autopilot.
Di konsol Google Cloud, buka halaman Cluster Kubernetes GKE:
Klik Create.
Di Create an Autopilot cluster, 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 Enforce-only.
Klik Berikutnya, lalu klik Berikutnya:Tinjau dan Buat.
Untuk mulai membuat cluster, klik Buat.
gcloud
Jalankan gcloud container clusters create
dengan tanda --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 hal berikut:
Buka halaman Otorisasi Biner di konsol Google Cloud.
Konsol 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 tersebut memiliki konten berikut:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
REST API
Untuk menampilkan kebijakan default, ambil dalam format JSON seperti 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 penerapan
Anda dapat menguji kebijakan penerapan dengan mencoba men-deploy contoh image container ke cluster.
Untuk panduan memulai ini, Anda 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 "Hello, World!".
Konsol Google Cloud
Untuk menguji kebijakan, lakukan hal berikut:
Buka halaman Clusters GKE di Google Cloud Console.
Klik Deploy.
Konsol akan meminta Anda untuk 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:
Update file
kubeconfig
lokal:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Tindakan ini 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 memastikan bahwa image telah di-deploy, buka halaman Workloads GKE di Konsol Google Cloud.
Workload untuk deployment akan muncul dengan ikon hijau yang menunjukkan bahwa image berhasil di-deploy.
kubectl
Untuk memastikan bahwa image telah di-deploy, lakukan langkah berikut:
kubectl get pods
Perintah tersebut 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 langkah berikut:
Kembali ke halaman Workloads GKE di Google Cloud Console.
Pilih beban kerja
hello-server
.Klik Delete.
kubectl
Untuk menghapus deployment, lakukan langkah berikut:
kubectl delete deployment hello-server
Konfigurasi kebijakan penerapan untuk melarang semua gambar
Sekarang, ubah kebijakan untuk memblokir, bukan mengizinkan semua image untuk di-deploy.
Konsol Google Cloud
Untuk mengubah kebijakan, lakukan hal berikut:
Kembali ke halaman Otorisasi Biner 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 seperti 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
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 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 Google Cloud Console.
Klik Deploy.
Konsol akan meminta Anda untuk 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 tersebut telah diblokir:
Konsol Google Cloud
Untuk memastikan bahwa image tidak di-deploy, lakukan hal berikut:
Kembali ke halaman Workloads GKE di Google Cloud Console.
Workload untuk image container muncul dengan ikon merah yang menunjukkan bahwa image gagal di-deploy.
kubectl
Untuk memastikan bahwa image tidak di-deploy, jalankan perintah berikut:
kubectl get pods
Perintah tersebut mencetak pesan berikut, yang menunjukkan bahwa image tidak di-deploy:
No resources found.
Anda dapat memperoleh detail lebih lanjut tentang deployment tersebut:
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Anda akan melihat respons yang mirip dengan yang berikut ini:
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 attestor.
Pembersihan
Agar akun Google Cloud Anda tidak dikenakan 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 berikut:
Buka halaman Clusters GKE di Google Cloud Console.
Pilih cluster
test-cluster
, lalu klik Hapus.
gcloud
Untuk menghapus cluster, lakukan langkah berikut:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Langkah selanjutnya
- Gunakan attestor
built-by-cloud-build
untuk men-deploy hanya image yang dibuat oleh Cloud Build (Pratinjau). - Untuk tutorial menyeluruh tentang cara mewajibkan pengesahan, lihat:
- Baca referensi kami tentang DevOps dan jelajahi program riset Riset dan Penilaian DevOps (DORA).