Halaman ini menunjukkan cara menentukan yang dibatasi Pengontrol Kebijakan dengan menggunakan template batasan yang sudah ada sebelumnya dan disediakan oleh Google.
Halaman ini ditujukan untuk admin IT dan Operator yang ingin memastikan bahwa semua resource yang berjalan dalam platform {i>cloud<i} memenuhi persyaratan persyaratan kepatuhan dengan menyediakan dan mempertahankan otomatisasi untuk menerapkan, dan menggunakan template konfigurasi deklaratif. Untuk mempelajari lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
Pengontrol Kebijakan memungkinkan Anda menerapkan kebijakan untuk cluster Kubernetes dengan mendefinisikan satu atau beberapa objek pembatas. Setelah sebuah batasan diinstal, permintaan ke server API diperiksa terhadap batasan dan ditolak jika mereka tidak mematuhinya. Referensi yang sudah ada dan tidak mematuhi kebijakan dilaporkan di waktu audit.
Setiap batasan didukung oleh {i>template<i} batasan yang mendefinisikan skema dan yang logis dari batasan tersebut. Template batasan dapat berasal dari Google dan pihak ketiga, atau Anda dapat menulisnya sendiri. Untuk informasi selengkapnya tentang cara membuat template, lihat Menulis template batasan.
Sebelum memulai
Memeriksa library template batasan
Saat menentukan batasan, Anda menentukan template batasan
yang diperluas. {i>Library<i} {i>template<i} batasan umum yang dikembangkan oleh Google adalah
diinstal secara default, dan banyak organisasi tidak perlu membuat
membatasi template secara langsung di Rego. Template batasan disediakan oleh Google
memiliki label configmanagement.gke.io/configmanagement
.
Untuk menampilkan daftar 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 {i>template <i}batasan dan memberinya parameter yang spesifik untuk batasan tersebut.
Jika Anda menggunakan Config Sync dengan
repositori hierarkis,
sebaiknya buat batasan dalam direktori cluster/
.
Batasan memiliki kolom berikut:
kind
berhuruf kecil cocok dengan nama template batasan.metadata.name
adalah nama batasan.- Kolom
match
menentukan objek tempat batasan diterapkan. Semua kondisi yang ditentukan harus dicocokkan sebelum objek berada dalam cakupan untuk batasan.match
kondisi ditentukan oleh sub-isian berikut:kinds
adalah jenis resource yang dikenai batasan, ditentukan oleh dua kolom:apiGroups
adalah daftar grup Kubernetes API yang cocok dankinds
adalah daftar jenis yang cocok. "*" cocok dengan semuanya. Jika setidaknya satuapiGroup
dan satu entrikind
cocok, kondisikinds
merasa puas.scope
menerima *, Cluster, atau Namespaced, yang menentukan apakah cakupan cluster atau resource cakupan dengan namespace dipilih (default-nya adalah *).namespaces
adalah daftar nama namespace yang dapat mencakup objek. Objek setidaknya harus termasuk dalam salah satu namespace ini. Resource namespace adalah diperlakukan seolah-olah mereka milik mereka sendiri.excludedNamespaces
adalah daftar namespace yang tidak dapat dimiliki objek.labelSelector
adalah pemilih label Kubernetes yang harus dipenuhi objek.namespaceSelector
adalah pemilih label pada namespace tempat objek berada. Jika namespace tidak memenuhi objek, ID tersebut tidak akan cocok. Ruang nama resource diperlakukan seolah-olah milik mereka sendiri.
- Kolom
parameters
menentukan argumen untuk batasan, berdasarkan hal yang diharapkan oleh 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 untuk mengevaluasi apakah namespace memiliki label geo
yang ditetapkan ke beberapa
dengan sejumlah 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 itu dikonfigurasi dan
diinstal dengan benar,
Kolom status.byPod[].enforced
disetel ke true
, terlepas dari apakah batasannya
dikonfigurasikan untuk menerapkan atau hanya menguji batasan.
Batasan diberlakukan secara {i>default<i},
dan pelanggaran batasan mencegah
operasi cluster tertentu. Anda dapat menetapkan spec.enforcementAction
batasan
ke dryrun
untuk melaporkan pelanggaran di kolom status.violations
tanpa
sehingga mencegah operasi.
Untuk mempelajari audit lebih lanjut, lihat Audit menggunakan batasan.
Peringatan saat menyinkronkan batasan
Jika Anda menyinkronkan batasan ke sumber terpusat, seperti repositori Git, dengan Config Sync atau alat bergaya GitOps lainnya, perhatikan peringatan berikut saat menyinkronkan batasan data.
Konsistensi tertunda
Anda dapat meng-commit batasan ke sumber kebenaran seperti repositori Git, dan dapat membatasi efeknya menggunakan ClusterSelectors atau NamespaceSelectors. Karena sinkronisasi pada akhirnya konsisten, perhatikan peringatan berikut:
- Jika operasi cluster memicu batasan yang dirujuk NamespaceSelector namespace yang belum disinkronkan, batasan diberlakukan dan operasi dicegah. Dengan kata lain, namespace yang tidak ada akan "gagal ditutup".
- Jika Anda mengubah label namespace, cache mungkin berisi data yang sudah tidak berlaku untuk waktu singkat.
Minimalkan kebutuhan untuk mengganti nama namespace atau mengubah labelnya, dan uji yang memengaruhi namespace yang telah diganti namanya atau dilabeli ulang untuk memastikannya berfungsi sesuai yang diharapkan.
Mengonfigurasi Pengontrol Kebijakan untuk batasan referensial
Sebelum dapat mengaktifkan batasan referensial, Anda harus membuat yang memberi tahu Pengontrol Kebijakan jenis objek apa yang harus dipantau, seperti namespace.
Simpan manifes YAML berikut ke file, dan terapkan dengan kubectl
. Tujuan
manifes mengonfigurasi Pengontrol Kebijakan untuk mengawasi 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 merujuk ke objek lain dalam definisinya. Sebagai
misalnya, Anda dapat membuat batasan yang memerlukan objek Ingress di
cluster untuk memiliki nama host yang unik. Batasan bersifat referensial jika batasannya
template berisi string data.inventory
di Rego-nya.
Batasan referensial diaktifkan secara default jika Anda menginstal Pengontrol Kebijakan menggunakan Konsol Google Cloud. Jika Anda menginstal Pengontrol Kebijakan menggunakan Google Cloud CLI, Anda dapat memilih apakah akan mengaktifkan batasan referensial saat Anda Instal Pengontrol Kebijakan. Batasan referensial hanya dijamin akan konsisten, dan hal ini akan menimbulkan risiko:
Pada server API yang kelebihan beban, konten cache Pengontrol Kebijakan bisa menjadi usang, menyebabkan batasan referensial menjadi "gagal dibuka", artinya bahwa tindakan penegakan kebijakan tampak berfungsi ketika sebenarnya tidak. Misalnya, Anda dapat membuat Ingress dengan nama host duplikat terlalu cepat untuk memungkinkan {i>admission controller <i}untuk mendeteksi duplikat.
Urutan penginstalan batasan dan urutan cache diperbarui, keduanya bersifat acak.
Anda dapat memperbarui cluster yang ada untuk mengizinkan batasan referensial.
Konsol
Untuk menonaktifkan batasan referensial, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman Kebijakan GKE Enterprise di bagian Pengelolaan Postur.
- Pada tab Setelan, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Luaskan menu Edit Policy Controller configuration.
- Pilih Enable Constraint Templates yang merujuk ke objek selain objek yang sedang dievaluasi..
- Pilih Simpan perubahan.
Pengontrol Kebijakan gcloud
Guna 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
keanggotaannya dipisahkan
dengan koma.
gcloud ConfigManagement
Guna mengaktifkan dukungan untuk batasan referensial, setel
policyController.referentialRulesEnabled
ke true
di
File config-management.yaml
:
apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
name: config-management
namespace: config-management-system
spec:
clusterName: my-cluster
channel: dev
policyController:
enabled: true
referentialRulesEnabled: true
Menonaktifkan batasan referensial
Jika Anda menonaktifkan batasan referensial, setiap template yang menggunakan referensial batasan juga dihapus dari cluster, beserta setiap batasan yang menggunakan template tersebut.
Konsol
Batasan referensial diaktifkan secara default saat Anda menginstal Pengontrol Kebijakan dengan Konsol Google Cloud. Untuk menonaktifkan batasan referensial, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman Kebijakan GKE Enterprise di bagian Pengelolaan Postur.
- Pada tab Setelan, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Luaskan menu Edit Policy Controller configuration.
- Hapus centang Enable Constraint Templates yang merujuk ke objek selain objek yang sedang dievaluasi..
- Pilih Simpan perubahan.
Pengontrol Kebijakan gcloud
Guna 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
keanggotaannya dipisahkan
dengan koma.
gcloud ConfigManagement
Untuk menonaktifkan batasan referensial pada cluster, tetapkan
policyController.referentialRulesEnabled
ke false
di
File config-management.yaml
:
apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
name: config-management
namespace: config-management-system
spec:
clusterName: my-cluster
channel: dev
policyController:
enabled: true
referentialRulesEnabled: false
Menampilkan daftar semua batasan
Untuk menampilkan daftar semua batasan yang diinstal pada cluster, gunakan perintah berikut:
kubectl get constraint
Anda juga dapat melihat ringkasan batasan yang diterapkan di Konsol Google Cloud. Untuk 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 seperti elemen
metadata.name
:
kubectl get CONSTRAINT_TEMPLATE_NAME
Untuk menghapus batasan, tentukan kind
dan name
-nya:
kubectl delete CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Jika Anda menghapus batasan, batasan tersebut akan berhenti diterapkan segera setelah server API menandai batasan sebagai dihapus.
Hapus semua template batasan
Konsol
Untuk menonaktifkan library template batasan, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman Kebijakan GKE Enterprise di bagian Pengelolaan Postur.
- Pada tab Setelan, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Di menu Add/Edit policy bundle, aktifkan library template dan semua paket kebijakan dari do_not_disturb_on.
- Pilih Simpan perubahan.
Pengontrol Kebijakan 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 library template batasan. Anda dapat
menentukan beberapa keanggotaan yang
dipisahkan dengan koma.
gcloud ConfigManagement
Tetapkan spec.policyController.templateLibraryInstalled
ke false
. Hal ini mencegah
Pengontrol Kebijakan agar tidak
menginstal ulang pustaka secara otomatis.
Untuk menghapus semua template batasan dan semua batasan, gunakan perintah berikut berikut:
kubectl delete constrainttemplate --all
Memulihkan library template batasan
Konsol
Untuk mengaktifkan library template batasan, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman Kebijakan GKE Enterprise di bagian Pengelolaan Postur.
- Pada tab Setelan, pada tabel cluster, pilih Edit edit di kolom Edit configuration.
- Di menu Add/Edit policy bundle, aktifkan library template check_circle. Anda juga dapat mengaktifkan salah satu atau semua dari paket kebijakan.
- Pilih Simpan perubahan.
Pengontrol Kebijakan 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.
gcloud ConfigManagement
Jika Anda menonaktifkan library template batasan atau meng-uninstal semua batasan
template, Anda dapat memulihkannya dengan menetapkan
spec.policyController.templateLibraryInstalled
ke true
di
Konfigurasi Pengontrol Kebijakan.
Untuk memulai ulang Pod Operator, gunakan perintah berikut:
kubectl delete pod -n config-management-system -l k8s-app=config-management-operator
Langkah selanjutnya
- Pelajari paket Pengontrol Kebijakan.
- Lihat dokumentasi referensi library template batasan.
- Pelajari cara membuat batasan kustom.
- Memecahkan Masalah Pengontrol Kebijakan.