Halaman ini menunjukkan cara menentukan batasan Policy Controller menggunakan template batasan yang sudah ada sebelumnya yang disediakan oleh Google.
Halaman ini ditujukan bagi administrator dan Operator IT yang ingin memastikan bahwa semua resource yang berjalan dalam platform cloud memenuhi persyaratan kepatuhan organisasi dengan menyediakan dan mempertahankan otomatisasi untuk mengaudit atau menerapkan, serta menggunakan pembuatan template konfigurasi deklaratif. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE umum.
Dengan Pengontrol Kebijakan, Anda dapat menerapkan kebijakan untuk cluster Kubernetes dengan menentukan satu atau beberapa objek batasan. Setelah batasan diinstal, permintaan ke server API akan diperiksa terhadap batasan dan ditolak jika tidak mematuhi. Resource yang tidak mematuhi kebijakan yang sudah ada dilaporkan pada waktu audit.
Setiap batasan didukung oleh template batasan yang menentukan skema dan logika batasan. Template batasan dapat diperoleh dari Google dan pihak ketiga, atau Anda dapat menulis template sendiri. Untuk mengetahui informasi selengkapnya tentang cara membuat template baru, lihat Menulis template batasan.
Sebelum memulai
Periksa library template batasan
Saat menentukan batasan, Anda menentukan template batasan yang diperluasnya. Library template batasan umum yang dikembangkan oleh Google diinstal secara default, dan banyak organisasi tidak perlu membuat template batasan kustom secara langsung di Rego. Template batasan yang disediakan oleh Google
memiliki label configmanagement.gke.io/configmanagement
.
Untuk mencantumkan batasan, gunakan perintah berikut:
kubectl get constrainttemplates \ -l="configmanagement.gke.io/configmanagement=config-management"
Untuk mendeskripsikan template batasan dan memeriksa parameter yang diperlukan, gunakan perintah berikut:
kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME
Anda juga dapat melihat semua template batasan di library.
Menentukan batasan
Anda menentukan batasan menggunakan YAML, dan Anda tidak perlu memahami atau menulis Rego. Sebagai gantinya, batasan memanggil template batasan dan memberikannya parameter khusus untuk batasan tersebut.
Jika Anda menggunakan Config Sync dengan
repositori hierarkis,
sebaiknya buat batasan di direktori cluster/
.
Batasan memiliki kolom berikut:
kind
huruf kecil cocok dengan nama template batasan.metadata.name
adalah nama batasan.- Kolom
match
menentukan objek mana yang menerapkan batasan. Semua kondisi yang ditentukan harus cocok sebelum objek berada dalam cakupan batasan.match
kondisi ditentukan oleh sub-kolom berikut:kinds
adalah jenis resource yang berlaku untuk batasan, yang ditentukan oleh dua kolom:apiGroups
adalah daftar grup Kubernetes API yang cocok dankinds
adalah daftar jenis yang cocok. "*" cocok dengan semuanya. Jika setidaknya satu entriapiGroup
dan satu entrikind
cocok, kondisikinds
terpenuhi.scope
menerima *, Cluster, atau Namespaced, yang menentukan apakah resource cakupan cluster atau cakupan namespace dipilih (defaultnya adalah *).namespaces
adalah daftar nama namespace yang dapat dimiliki objek. Objek harus termasuk dalam setidaknya salah satu namespace ini. Resource namespace diperlakukan seolah-olah resource tersebut adalah miliknya sendiri.excludedNamespaces
adalah daftar namespace yang tidak dapat dimiliki oleh objek.labelSelector
adalah pemilih label Kubernetes yang harus dipenuhi oleh objek.namespaceSelector
adalah pemilih label pada namespace tempat objek berada. Jika namespace tidak memenuhi objek, namespace tidak akan cocok. Resource namespace diperlakukan seolah-olah resource tersebut adalah miliknya sendiri.
- Kolom
parameters
menentukan argumen untuk batasan, berdasarkan pada yang diharapkan template batasan.
Batasan berikut, yang disebut ns-must-have-geo
, memanggil template batasan
yang disebut K8sRequiredLabels
, yang disertakan dalam
library template batasan
yang disediakan oleh Google. Batasan menentukan parameter yang digunakan template batasan untuk mengevaluasi apakah namespace memiliki label geo
yang ditetapkan ke beberapa nilai.
# ns-must-have-geo.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ns-must-have-geo
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Namespace"]
parameters:
labels:
- key: "geo"
Untuk membuat batasan, gunakan kubectl apply -f
:
kubectl apply -f ns-must-have-geo.yaml
Mengaudit batasan
Jika batasan dikonfigurasi dan diinstal dengan benar, kolom
status.byPod[].enforced
akan ditetapkan ke true
, baik batasan dikonfigurasi
untuk menerapkan atau hanya menguji batasan.
Batasan diterapkan secara default, dan pelanggaran batasan mencegah
operasi cluster tertentu. Anda dapat menetapkan spec.enforcementAction
batasan
ke dryrun
untuk melaporkan pelanggaran di kolom status.violations
tanpa
mencegah operasi.
Untuk mempelajari lebih lanjut audit, lihat Audit menggunakan batasan.
Peringatan saat menyinkronkan batasan
Jika Anda menyinkronkan batasan ke sumber terpusat, seperti repositori Git, dengan Config Sync atau alat gaya GitOps lainnya, perhatikan peringatan berikut saat menyinkronkan batasan.
Konsistensi tertunda
Anda dapat melakukan penerapan batasan ke sumber tepercaya seperti repositori Git, dan dapat membatasi efeknya menggunakan ClusterSelectors atau NamespaceSelectors. Karena sinkronisasi bersifat konsisten tertunda, perhatikan peringatan berikut:
- Jika operasi cluster memicu batasan yang NamespaceSelector-nya merujuk ke namespace yang belum disinkronkan, batasan akan diterapkan dan operasi akan dicegah. Dengan kata lain, namespace yang tidak ada "gagal ditutup".
- Jika Anda mengubah label namespace, cache mungkin berisi data yang sudah tidak berlaku untuk waktu yang singkat.
Minimalkan kebutuhan untuk mengganti nama namespace atau mengubah labelnya, dan uji batasan yang memengaruhi namespace yang diganti nama atau diberi label ulang untuk memastikan batasan tersebut berfungsi seperti yang diharapkan.
Mengonfigurasi Policy Controller untuk batasan referensial
Sebelum dapat mengaktifkan batasan referensial, Anda harus membuat konfigurasi yang memberi tahu Pengontrol Kebijakan jenis objek yang harus dipantau, seperti namespace.
Simpan manifes YAML berikut ke file, dan terapkan dengan kubectl
. Manifest mengonfigurasi Pengontrol Kebijakan untuk memantau namespace dan Ingress.
Buat entri dengan group
, version
, dan kind
di bagian spec.sync.syncOnly
,
dengan nilai untuk setiap jenis objek yang ingin Anda amati.
apiVersion: config.gatekeeper.sh/v1alpha1
kind: Config
metadata:
name: config
namespace: "gatekeeper-system"
spec:
sync:
syncOnly:
- group: ""
version: "v1"
kind: "Namespace"
- group: "extensions"
version: "v1beta1"
kind: "Ingress"
Mengaktifkan batasan referensial
Batasan referensial mereferensikan objek lain dalam definisinya. Misalnya, Anda dapat membuat batasan yang mewajibkan objek Ingress dalam cluster memiliki nama host yang unik. Batasan bersifat referensial jika template
batasannya berisi string data.inventory
dalam Rego-nya.
Batasan referensial diaktifkan secara default jika Anda menginstal Pengontrol Kebijakan menggunakan konsol Google Cloud . Jika menginstal Policy Controller menggunakan Google Cloud CLI, Anda dapat memilih apakah akan mengaktifkan batasan referensial saat Anda Menginstal Policy Controller. Batasan referensial hanya dijamin konsisten pada akhirnya, dan hal ini menimbulkan risiko:
Di server API yang kelebihan beban, konten cache Policy Controller mungkin menjadi tidak valid, sehingga menyebabkan batasan referensial "gagal terbuka", yang berarti tindakan penegakan tampak berfungsi padahal tidak. Misalnya, Anda dapat membuat Ingress dengan nama host duplikat terlalu cepat sehingga pengontrol penerimaan dapat mendeteksi duplikat.
Urutan penginstalan batasan dan urutan pembaruan cache bersifat acak.
Anda dapat mengupdate cluster yang ada untuk mengizinkan batasan referensial.
Konsol
Untuk menonaktifkan batasan referensial, selesaikan langkah-langkah berikut:
- Di Google Cloud konsol, buka halaman Policy GKE Enterprise di bagian Posture Management.
- Di tab Settings, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Luaskan menu Edit Policy Controller configuration.
- Centang kotak Aktifkan Template Batasan yang merujuk selain ke objek yang sedang dievaluasi.
- Pilih Simpan perubahan.
gcloud
Untuk mengaktifkan dukungan untuk batasan referensial, jalankan perintah berikut:
gcloud container fleet policycontroller update \
--memberships=MEMBERSHIP_NAME \
--referential-rules
Ganti MEMBERSHIP_NAME
dengan nama keanggotaan
cluster terdaftar untuk mengaktifkan aturan referensial. Anda dapat menentukan beberapa keanggotaan yang dipisahkan dengan koma.
Menonaktifkan batasan referensial
Jika Anda menonaktifkan batasan referensial, semua template yang menggunakan batasan referensial juga akan dihapus dari cluster, beserta batasan apa pun yang menggunakan template tersebut.
Konsol
Batasan referensial diaktifkan secara default saat Anda menginstal Policy Controller dengan konsol Google Cloud . Untuk menonaktifkan batasan referensial, selesaikan langkah-langkah berikut:
- Di Google Cloud konsol, buka halaman Policy GKE Enterprise di bagian Posture Management.
- Di tab Settings, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Luaskan menu Edit Policy Controller configuration.
- Hapus centang pada kotak Aktifkan Template Batasan yang merujuk selain ke objek yang sedang dievaluasi.
- Pilih Simpan perubahan.
gcloud
Untuk menonaktifkan dukungan untuk batasan referensial, jalankan perintah berikut:
gcloud container fleet policycontroller update \
--memberships=MEMBERSHIP_NAME \
--no-referential-rules
Ganti MEMBERSHIP_NAME
dengan nama keanggotaan
cluster terdaftar untuk mengaktifkan aturan referensial. Anda dapat menentukan beberapa keanggotaan yang dipisahkan dengan koma.
Mencantumkan semua batasan
Untuk mencantumkan semua batasan yang diinstal pada cluster, gunakan perintah berikut:
kubectl get constraint
Anda juga dapat melihat ringkasan batasan yang diterapkan di Google Cloud konsol. Untuk mengetahui informasi selengkapnya, lihat Metrik Pengontrol Kebijakan.
Menghapus batasan
Untuk menemukan semua batasan yang menggunakan template batasan, gunakan perintah
berikut untuk mencantumkan semua objek dengan kind
yang sama dengan metadata.name
template batasan:
kubectl get CONSTRAINT_TEMPLATE_NAME
Untuk menghapus batasan, tentukan kind
dan name
:
kubectl delete CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Saat Anda menghapus batasan, batasan tersebut akan berhenti diterapkan segera setelah server API menandai batasan sebagai dihapus.
Menghapus semua template batasan
Konsol
Untuk menonaktifkan library template batasan, selesaikan langkah-langkah berikut:
- Di Google Cloud konsol, buka halaman Policy GKE Enterprise di bagian Posture Management.
- Di tab Settings, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Di menu Tambahkan/Edit paket kebijakan, nonaktifkan pustaka template dan semua paket kebijakan do_not_disturb_on.
- Pilih Simpan perubahan.
gcloud
Untuk menonaktifkan library template batasan, jalankan perintah berikut:
gcloud container fleet policycontroller content templates disable \
--memberships=MEMBERSHIP_NAME
Ganti MEMBERSHIP_NAME
dengan nama keanggotaan
cluster terdaftar untuk menonaktifkan pustaka template batasan. Anda dapat
menentukan beberapa keanggotaan yang dipisahkan dengan koma.
Memulihkan library template batasan
Konsol
Untuk mengaktifkan library template batasan, selesaikan langkah-langkah berikut:
- Di Google Cloud konsol, buka halaman Policy GKE Enterprise di bagian Posture Management.
- Di tab Settings, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Di menu Tambahkan/Edit paket kebijakan, aktifkan pustaka template check_circle. Anda juga dapat mengaktifkan semua atau sebagian paket kebijakan.
- Pilih Simpan perubahan.
gcloud
Untuk memulihkan library template batasan, jalankan perintah berikut:
gcloud container fleet policycontroller content templates enable \
--memberships=MEMBERSHIP_NAME
Ganti MEMBERSHIP_NAME
dengan nama keanggotaan
cluster terdaftar untuk mengaktifkan library template batasan. Anda dapat
menentukan beberapa keanggotaan yang dipisahkan dengan koma.
Langkah berikutnya
- Pelajari paket Policy Controller.
- Lihat dokumentasi referensi library template batasan.
- Pelajari cara membuat batasan kustom.
- Memecahkan masalah Pengontrol Kebijakan.