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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 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.

  1. Di konsol Google Cloud, buka halaman Kubernetes cluster GKE:

    Buka GKE

  2. Klik Create.

  3. Di bagian Membuat cluster Autopilot, lakukan hal berikut:

    1. Di kolom Name, masukkan test-cluster.

    2. Di menu Region, pilih us-central1.

    3. Luaskan bagian Advanced settings.

    4. Klik link Keamanan untuk menampilkan panel Keamanan.

    5. Di panel Security, centang kotak Enable Binary Authorization.

    6. Pilih Hanya terapkan.

    7. Klik Berikutnya, lalu klik Berikutnya:Tinjau dan Buat.

    8. 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:

  1. Buka halaman Binary Authorization di konsol Google Cloud.

    Buka Otorisasi Biner

    Konsol akan menampilkan detail tentang kebijakan.

  2. Klik Edit Policy.

  3. 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:

  1. Buka halaman Clusters GKE di konsol Google Cloud.

    Buka GKE

  2. Klik Deploy.

    Konsol akan meminta Anda memasukkan detail tentang deployment.

  3. Pilih Image Container yang Ada.

  4. Masukkan gcr.io/google-samples/hello-app:1.0 sebagai jalur image container.

  5. Klik Lanjutkan.

  6. Masukkan hello-server di kolom Application Name.

  7. Klik Deploy.

kubectl

Untuk menguji kebijakan, lakukan hal berikut:

  1. 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.

  2. 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.

Buka GKE

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:

  1. Kembali ke halaman Workloads GKE di konsol Google Cloud.

    Buka GKE

  2. Pilih beban kerja hello-server.

  3. 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:

  1. Kembali ke halaman Binary Authorization di Konsol Google Cloud.

    Buka Otorisasi Biner

  2. Klik Edit Policy.

  3. Pilih Larang Semua Gambar.

  4. Klik Simpan Kebijakan.

gcloud

Untuk mengubah kebijakan, lakukan hal berikut:

  1. Ekspor file YAML kebijakan:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Di editor teks, ubah evaluationMode dari ALWAYS_ALLOW menjadi ALWAYS_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
    
  3. Impor file YAML kebijakan kembali ke Otorisasi Biner:

    gcloud container binauthz policy import /tmp/policy.yaml
    

REST API

Untuk mengubah kebijakan, lakukan hal berikut:

  1. 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
    
  2. 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:

  1. Buka halaman Clusters GKE di konsol Google Cloud.

    Buka GKE

  2. Klik Deploy.

    Konsol akan meminta Anda memasukkan detail tentang deployment.

  3. Pilih Image Container yang Ada.

  4. Masukkan gcr.io/google-samples/hello-app:1.0 sebagai jalur image container.

  5. Klik Lanjutkan.

  6. Masukkan hello-server di kolom Application Name.

  7. 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.

Buka GKE

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:

  1. Buka halaman Clusters GKE di konsol Google Cloud.

    Buka GKE

  2. 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