Mengonfigurasi kebijakan menggunakan REST API

Halaman ini berisi petunjuk untuk mengonfigurasi kebijakan Otorisasi Biner dengan menggunakan REST API. Sebagai alternatif, Anda juga dapat melakukan tugas-tugas ini menggunakan Google Cloud CLI atau Konsol Google Cloud. Langkah ini adalah bagian dari menyiapkan Otorisasi Biner.

Ringkasan

Kebijakan adalah serangkaian aturan yang mengatur deployment satu atau beberapa image container.

Saat mengonfigurasi kebijakan menggunakan REST API, Anda akan mengisi nilai dalam format JSON yang strukturnya identik dengan struktur YAML yang digunakan dalam interaksi gcloud dengan layanan. Untuk mengetahui informasi lebih lanjut, lihat Referensi YAML Kebijakan.

Mengonfigurasi kebijakan mengharuskan Anda untuk:

  • Mengekspor file JSON kebijakan
  • Tambahkan gambar pengecualian lainnya (opsional)
  • Menetapkan aturan default
  • Tambahkan aturan khusus cluster (opsional)
  • Mengimpor file JSON kebijakan

Sebagian besar kebijakan di dunia nyata memeriksa apakah semua attestor yang diperlukan telah memverifikasi bahwa image container siap untuk di-deploy. Dalam hal ini, Anda juga harus membuat attestor saat mengonfigurasi kebijakan.

Menetapkan project default

Tetapkan project Google Cloud default jika Anda belum melakukannya:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

dengan PROJECT_ID sebagai ID project Anda.

Mengekspor kebijakan

Bagian ini berlaku untuk Cluster GKE, GKE, Cloud Run, dan Anthos Service Mesh.

Ekspor kebijakan ke file JSON di sistem lokal Anda:

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" \
    -o "/tmp/policy.json"

Secara default, file tersebut memiliki konten berikut:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/**"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Daftar admissionWhitelistPatterns default dalam ekspor kebijakan Anda mungkin menampilkan jalur gambar yang berbeda dari jalur yang ditampilkan dalam panduan ini.

Kelola gambar yang dikecualikan

Bagian ini berlaku untuk Cluster GKE, GKE, Cloud Run, dan Anthos Service Mesh.

Image pengecualian adalah image container yang dikecualikan dari aturan kebijakan. Dengan Otorisasi Biner selalu, image yang dikecualikan dapat di-deploy.

Anda menentukan image yang dikecualikan dengan mencantumkan jalur registry-nya di admissionWhitelistPatterns. Jalur ini dapat merujuk ke Container Registry atau registry image lainnya. Proses pemanfaatan mengecualikan image di admissionWhitelistPatterns setelah image dikecualikan oleh mode evaluasi kebijakan sistem.

Untuk menambahkan gambar pengecualian, tambahkan node namePattern pada daftar admissionWhitelistPatterns di file JSON kebijakan:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

dengan MATCHING_PATTERN adalah jalur ke satu gambar dalam registry Anda berdasarkan pencocokan persis, atau ke gambar apa pun yang cocok dengan pola yang menggunakan simbol karakter pengganti (*, **).

Cloud Run

Bagian ini berlaku untuk Cloud Run.

Anda tidak dapat secara langsung menentukan nama gambar yang berisi tag. Misalnya, Anda tidak dapat menentukan IMAGE_PATH:latest.

Jika ingin menentukan nama gambar yang berisi tag, Anda harus menentukan nama gambar menggunakan karakter pengganti seperti berikut:

  • * untuk semua versi gambar tunggal; misalnya, us-docker.pkg.dev/myproject/container/hello@*
  • ** untuk semua gambar dalam project; misalnya, us-docker.pkg.dev/myproject/**

Anda dapat menggunakan nama jalur untuk menentukan ringkasan dalam format IMAGE_PATH@DIGEST.

Mode evaluasi kebijakan sistem

Bagian ini berlaku untuk cluster GKE dan GKE.

Mode evaluasi kebijakan sistem adalah setelan kebijakan yang menyebabkan Otorisasi Biner mengevaluasi kebijakan sistem sebelum mengevaluasi kebijakan yang Anda konfigurasikan. Google mengelola kebijakan sistem, yang mengecualikan daftar image sistem yang dikelola Google yang digunakan GKE. Image yang tercantum dalam kebijakan sistem tidak diblokir oleh penegakan kebijakan. Jika tidak mengaktifkan setelan ini, Anda harus mengelola sendiri daftar gambar yang dikecualikan. Pelajari cara Mengelola image yang dikecualikan.

Anda dapat melihat konten kebijakan sistem menggunakan perintah berikut:

gcloud alpha container binauthz policy export-system-policy

Untuk mengaktifkan mode evaluasi kebijakan sistem, tambahkan node level teratas berikut ke file JSON kebijakan:

"globalPolicyEvaluationMode": "ENABLE"

Untuk menonaktifkan mode evaluasi kebijakan sistem, tambahkan hal berikut:

"globalPolicyEvaluationMode": "DISABLE"

Anda dapat mengekspor kebijakan sistem yang terkait dengan wilayah tertentu, seperti berikut:

gcloud alpha container binauthz policy export-system-policy \
  --location=REGION > /tmp/policy.yaml

Ganti REGION dengan wilayah yang terkait dengan kebijakan sistem yang ingin Anda ekspor (atau "global"). Contohnya mencakup: asia-east1, europe-west1, us-central1.

Jika Anda menghapus --location atau menentukan --location=global, perintah tersebut akan menghasilkan kebijakan sistem dari region dalam grup region terakhir untuk menerima pembaruan. Karena sebagian besar perubahan pada kebijakan sistem merupakan penambahan, output menampilkan kumpulan image sistem yang saat ini diizinkan di semua wilayah.

Menetapkan aturan default

Bagian ini berlaku untuk Cluster GKE, GKE, Cloud Run, dan Anthos Service Mesh.

Aturan adalah bagian dari kebijakan yang menentukan batasan yang harus diteruskan oleh image container sebelum dapat di-deploy. Setiap permintaan masuk memiliki cluster GKE terkait. Jika permintaan tidak cocok dengan aturan khusus cluster, aturan default akan digunakan.

Aturan default ditentukan di node defaultAdmissionRule dalam kebijakan. Untuk mengetahui informasi selengkapnya tentang bagian aturan ini, lihat ADMISSION_RULE di Referensi YAML Kebijakan. Untuk contoh aturan default, lihat Kebijakan Contoh.

Untuk menetapkan aturan default, edit node defaultAdmissionRule dalam file JSON kebijakan sesuai kebutuhan:

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

dengan:

  • EVAL_MODE menentukan jenis batasan yang dievaluasi oleh Otorisasi Biner sebelum mengizinkan image container di-deploy.
  • ENFORCEMENT_MODE menentukan tindakan yang diambil jika image container tidak sesuai dengan batasan yang ditentukan dalam aturan.
  • ATTESTOR menentukan attestor (jika diperlukan) yang harus menandatangani image container sebelum dapat di-deploy. Gunakan jalur yang sepenuhnya memenuhi syarat ke attestor dalam format projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Jika aturan Anda memeriksa untuk melihat apakah semua attestor yang diperlukan telah menandatangani image container, Anda harus membuat attestor sebelum menyelesaikan langkah ini.

Menetapkan aturan khusus cluster (opsional)

Bagian ini berlaku untuk cluster GKE dan GKE.

Sebuah cluster juga dapat memiliki satu atau beberapa aturan khusus cluster. Jenis aturan ini hanya berlaku untuk cluster GKE yang telah ditentukan. Jika cluster tidak memiliki aturan sendiri, aturan default akan digunakan. Aturan khusus cluster adalah bagian opsional dari kebijakan.

Aturan khusus cluster ditentukan dalam node clusterAdmissionRules dalam file JSON kebijakan. Untuk mengetahui informasi selengkapnya tentang bagian aturan ini, lihat ADMISSION_RULE di Referensi YAML Kebijakan. Sebagai contoh, lihat Menggunakan aturan khusus cluster di Kebijakan Contoh.

Untuk menambahkan aturan khusus cluster:

Pada file JSON kebijakan, tambahkan node clusterAdmissionRules:

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

dengan CLUSTER_SPECIFIER adalah ID resource cluster tempat aturan diterapkan.

  • Untuk GKE, cluster terlampir GKE, dan GKE di AWS, formatnya adalah CLUSTER_LOCATION.CLUSTER_NAME—misalnya, us-central1-a.test-cluster.
  • Untuk GKE di Bare Metal dan GKE di VMware, formatnya adalah FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID—misalnya, global.test-membership.

Properti lainnya dijelaskan di awal dalam panduan ini pada bagian Menetapkan aturan default. Lihat Contoh Kebijakan untuk mengetahui contoh aturan khusus cluster.

Jika aturan Anda memeriksa untuk melihat apakah semua attestor yang diperlukan telah menandatangani image container, Anda harus membuat attestor sebelum menyelesaikan langkah ini.

Mengimpor file JSON kebijakan

Bagian ini berlaku untuk Cluster GKE, GKE, Cloud Run, dan Anthos Service Mesh.

Impor kembali file JSON kebijakan ke Otorisasi Biner dengan memasukkan kode berikut:

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"

Langkah selanjutnya