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

  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. Verify 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. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Instal kubectl.
  15. 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.

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

      Buka GKE

    2. Klik Buat.

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

      4. Klik link Keamanan untuk menampilkan panel Keamanan.

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

      6. Pilih Khusus penerapan.

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

      8. Untuk mulai membuat cluster, klik Buat.

    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:

    1. Buka halaman Binary Authorization di konsol Google Cloud .

      Buka Otorisasi Biner

      Konsol menampilkan detail tentang kebijakan tersebut.

    2. Klik Edit Kebijakan.

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

    1. Buka halaman Cluster GKE di Google Cloud console.

      Buka GKE

    2. Klik Deploy.

      Konsol akan meminta Anda memasukkan detail tentang deployment.

    3. Pilih Existing Container Image.

    4. Masukkan us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 sebagai jalur image container.

    5. Klik Lanjutkan.

    6. Masukkan hello-server di kolom Nama Aplikasi.

    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 informasi endpoint dan kredensial yang diperlukan untuk mengakses cluster di GKE.

    2. Deploy image:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      

    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 .

    Buka GKE

    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:

    1. Kembali ke halaman Workloads GKE di konsolGoogle Cloud .

      Buka GKE

    2. Pilih beban kerja hello-server.

    3. Klik Hapus.

    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:

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

      Buka Otorisasi Biner

    2. Klik Edit Kebijakan.

    3. Pilih Jangan Izinkan 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 kembali file YAML kebijakan 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 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"
      

    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:

    1. Buka halaman Cluster GKE di Google Cloud console.

      Buka GKE

    2. Klik Deploy.

      Konsol akan meminta Anda memasukkan detail tentang deployment.

    3. Pilih Existing Container Image.

    4. Masukkan us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 sebagai jalur image container.

    5. Klik Lanjutkan.

    6. Masukkan hello-server di kolom Nama Aplikasi.

    7. Klik Deploy.

    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 .

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

    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:

    1. Buka halaman Cluster GKE di Google Cloud console.

      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 berikutnya