Memperbarui kebijakan Otorisasi Biner

Dokumen ini menjelaskan cara mengecualikan gambar dalam kebijakan Otorisasi Biner.

Dalam dokumen ini, Anda akan memperbarui kebijakan untuk mengecualikan image container di Artifact Registry dari penerapan Otorisasi Biner dan menetapkan aturan default untuk melarang semua container lainnya di-deploy.

Sebelum memulai

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal 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. Jika Anda tidak menggunakan Cloud Shell, instal kubectl.

Membuat cluster dengan Otorisasi Biner diaktifkan

Buat cluster GKE dengan Otorisasi Biner diaktifkan. Ini adalah cluster tempat Anda ingin menjalankan image container yang di-deploy.

Konsol Google Cloud

  1. Buka halaman Clusters GKE di Google Cloud konsol.

    Buka GKE

    Konsol menampilkan daftar cluster GKE di project Anda. Google Cloud

  2. Klik Create Cluster.

  3. Masukkan test-cluster di kolom Name.

    Kolom nama di template cluster standar

  4. Pilih Zonal di opsi Jenis Lokasi.

  5. Pilih us-central1-a dari daftar drop-down Zone.

  6. Klik link Keamanan untuk menampilkan panel Keamanan.

  7. Di panel Security, pilih Enable Binary Authorization.

    Mengaktifkan opsi Otorisasi Biner

  8. Pilih Khusus penerapan.

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

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

  1. Buka halaman Binary Authorization di konsol Google Cloud .

    Buka Otorisasi Biner

    Konsol akan 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, lakukan hal 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/<var>PROJECT_ID</var>/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"

REST API menampilkan hal berikut:

{
  "name": "projects/PROJECT_ID/policy",
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Hanya izinkan gambar yang dikecualikan

Bagian ini menjelaskan cara mengubah kebijakan untuk mengecualikan gambar dan melarang semua gambar lainnya 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 Kebijakan.

  3. Pilih Jangan Izinkan Semua Gambar.

  4. Di bagian Gambar yang dikecualikan dari aturan deployment, luaskan Jalur gambar.

  5. Klik Tambahkan Jalur Gambar.

    Artifact Registry

    Di New image path, tempel jalur berikut dari repositori Artifact Registry:

    us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    
  6. Klik Selesai untuk menyimpan jalur gambar.

  7. Klik Simpan Kebijakan.

gcloud

Untuk mengubah kebijakan agar mengizinkan contoh gambar dari Artifact Registry, 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 dan tambahkan gambar yang dikecualikan ke admissionWhitelistPatterns.

    Untuk mengecualikan contoh gambar berikut dari Artifact Registry, ubah file YAML kebijakan Anda sebagai berikut:

    admissionWhitelistPatterns:
    - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/<var>PROJECT_ID</var>/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",
      "admissionWhitelistPatterns": [
        {
          "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "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 kebijakan

Untuk menguji kebijakan dengan men-deploy image yang Anda tambahkan ke daftar yang diizinkan Exempt image, lakukan hal berikut:

  1. Men-deploy image yang dikecualikan ke cluster.

    Konsol Google Cloud

    Men-deploy gambar yang dikecualikan:

    1. Buka halaman Clusters GKE di Google Cloud konsol.

      Buka GKE

    2. Klik Deploy.

      Konsol akan meminta Anda memasukkan detail tentang deployment.

    3. Pilih Existing Container Image.

    4. Masukkan jalur image container.

      Artifact Registry

      Untuk men-deploy image dari Artifact Registry, masukkan perintah berikut:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    5. Klik Lanjutkan.

    6. Masukkan hello-server di kolom Nama Aplikasi.

    7. Klik Deploy.

    kubectl

    Artifact Registry

    Deploy image dari Artifact Registry:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    
  2. Pastikan gambar diizinkan untuk di-deploy:

    Konsol Google Cloud

    Untuk memverifikasi bahwa image telah di-deploy, lakukan hal berikut:

    1. Buka halaman GKE.

    Buka GKE

    1. Buka halaman Workloads.

    Beban kerja hello-server muncul dengan ikon hijau, yang menunjukkan bahwa beban kerja tersebut sedang berjalan.

    kubectl

    Untuk memverifikasi bahwa image diizinkan untuk di-deploy, masukkan perintah berikut:

    kubectl get pods
    

    Anda akan melihat gambar berjalan.

  3. Hapus pod.

    Konsol Google Cloud

    Di halaman Workloads GKE:

    1. Pilih beban kerja hello-server.

    2. Klik Hapus.

    3. Saat diminta untuk menghapus resource, klik Hapus.

    kubectl

    kubectl delete pod hello-server
    

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 Clusters GKE di Google Cloud konsol.

    Buka GKE

  2. Pilih cluster test-cluster, lalu klik Hapus.

gcloud

Untuk menghapus cluster, masukkan perintah berikut:

gcloud container clusters delete \
    --zone=us-central1-a \
    test-cluster

Langkah berikutnya