Dokumen ini menjelaskan cara memigrasikan kebijakan penerimaan Anda dari Pengontrol Kebijakan untuk mengurangi risiko kesenjangan dalam penegakan kebijakan. Policy Controller tidak digunakan lagi mulai 12 November 2026, dan mencapai akhir dukungan pada 31 Desember 2027. Di versi 1.39 dan yang lebih baru, cluster Google Kubernetes Engine (GKE) tidak mendukung Pengontrol Kebijakan.
Anda dapat memigrasikan kebijakan penerimaan yang Anda terapkan menggunakan Pengontrol Kebijakan ke ValidatingAdmissionPolicies Kubernetes atau ke Gatekeeper Open Policy Agent (OPA) yang dikelola sendiri. Migrasi tidak memengaruhi workload yang sudah berjalan. Pengontrol Kebijakan mengevaluasi permintaan untuk membuat atau mengupdate resource, sehingga menghapusnya tidak akan memulai ulang atau mengubah workload yang sedang berjalan.
Dokumen ini ditujukan untuk operator dan pakar keamanan yang mengelola Pengontrol Kebijakan di seluruh fleet. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam kontenGoogle Cloud , lihat Peran dan tugas pengguna GKE umum.
Upgrade yang diblokir ke GKE versi 1.39
GKE memblokir upgrade ke versi 1.39 dan yang lebih baru untuk cluster yang telah menginstal Pengontrol Kebijakan. Sebelum mengupgrade cluster ke versi 1.39, migrasikan kebijakan Anda dan hapus Pengontrol Kebijakan dari cluster tersebut. Jangan menghapus Pengontrol Kebijakan hanya untuk membatalkan pemblokiran upgrade sebelum Anda memigrasikan kebijakan, karena tindakan tersebut akan membuat cluster tidak memiliki penegakan kebijakan.
Pilih foto lain
Evaluasi setiap kebijakan penerimaan di Pengontrol Kebijakan dan pilih opsi pengganti untuk kebijakan tersebut dari tabel berikut. Anda tidak perlu memilih satu pengganti untuk seluruh cluster. Anda dapat menggabungkan opsi pada cluster yang sama berdasarkan persyaratan setiap kebijakan:
| Opsi | Kapan digunakan | Operasi dan dukungan |
|---|---|---|
| ValidatingAdmissionPolicy (direkomendasikan) | Kebijakan yang memeriksa satu resource saat dibuat atau diperbarui. Sebagian besar template di library template Pengontrol Kebijakan berfungsi seperti ini. | ValidatingAdmissionPolicy diintegrasikan ke dalam Kubernetes dan tersedia di GKE versi 1.30 dan yang lebih baru tanpa biaya tambahan. Cloud Customer Care mendukung ValidatingAdmissionPolicies sebagai bagian dari GKE. |
| Pod Security Admission (direkomendasikan untuk paket keamanan Pod) | Kontrol keamanan Pod yang telah ditetapkan dari paket pss-baseline-v2022, pss-restricted-v2022, atau psp-v2022. Untuk mengetahui informasi selengkapnya, lihat
Menggunakan Pod Security Admission untuk paket keamanan
Pod. |
Pod Security Admission diintegrasikan ke dalam Kubernetes dan diaktifkan secara default di GKE tanpa biaya tambahan. Layanan pelanggan mendukung Penerimaan Keamanan Pod sebagai bagian dari GKE. |
| Pemilah Komunikasi OPA yang dikelola sendiri | Kebijakan yang tidak dapat dinyatakan oleh ValidatingAdmissionPolicies, seperti kebijakan referensial yang membaca resource lain dalam cluster, kebijakan yang ingin Anda pertahankan di Rego, dan audit resource yang ada. Anda juga dapat menambahkan aturan Common Expression Language (CEL) ke ConstraintTemplates Gatekeeper sehingga Gatekeeper membuat ValidatingAdmissionPolicies untuk penegakan server API, dan pengontrol auditnya memeriksa resource yang ada. | Anda menginstal, mengupgrade, dan mengoperasikan Gatekeeper. Layanan Pelanggan tidak mendukung Gatekeeper open source. Komunitas Gatekeeper memberikan dukungan melalui GitHub. |
Menginventarisasi dan mengklasifikasikan kebijakan Anda
Secara default, library template Pengontrol Kebijakan menginstal setiap template, dan
paket kebijakan menginstal batasannya dengan tindakan penegakan kebijakan dryrun.
Akibatnya, template dan batasan pada cluster tidak selalu cocok dengan kebijakan yang Anda terapkan. Untuk mengetahui apa yang Anda terapkan, ikuti langkah-langkah
berikut:
Identifikasi cluster di fleet Anda yang menjalankan Pengontrol Kebijakan:
gcloud container fleet policycontroller describe \ --project=PROJECT_IDGanti
PROJECT_IDdengan ID project host fleet Anda.Di setiap cluster yang Anda identifikasi, cantumkan batasan Anda:
kubectl get constraints \ -o custom-columns='KIND:.kind,NAME:.metadata.name,'\ 'ACTION:.spec.enforcementAction,VIOLATIONS:.status.totalViolations,'\ 'BUNDLE:.metadata.labels.policycontroller\.gke\.io/bundleName'Output-nya menampilkan tindakan penegakan kebijakan setiap batasan, jumlah pelanggarannya dari audit terbaru, dan paket apa pun yang menginstalnya. Batasan yang tidak memiliki nilai di kolom
ACTIONakan menggunakan tindakan penegakan kebijakandenydefault.Cadangkan ConstraintTemplate dan batasan Anda ke file terpisah:
kubectl get constrainttemplates -o yaml \ > policy-controller-templates-backup.yaml kubectl get constraints -o yaml \ > policy-controller-constraints-backup.yamlOpsional: Lakukan operasi pencadangan tambahan berikut:
Jika Anda mengaktifkan aturan referensial di Pengontrol Kebijakan, cadangkan konfigurasi sinkronisasi Anda:
kubectl get config.config.gatekeeper.sh -n gatekeeper-system -o yaml \ > policy-controller-config-backup.yamlJika Anda mengaktifkan mutasi di Pengontrol Kebijakan, cadangkan mutator Anda:
kubectl get assign,assignmetadata,assignimage,modifyset -o yaml \ > policy-controller-mutators-backup.yaml
Simpan file cadangan ini di tempat yang aman. Menghapus Pengontrol Kebijakan akan menghapus setiap ConstraintTemplate, batasan, konfigurasi sinkronisasi, dan mutator di cluster, termasuk yang Anda buat. Anda memerlukan cadangan untuk menerjemahkan atau membuat ulang kebijakan.
Setelah mencadangkan kebijakan, tentukan jalur migrasi untuk setiap batasan dengan memeriksa jenis batasan dalam tabel berikut:
| Jenis batasan | Jalur migrasi |
|---|---|
| Batasan resource tunggal | Jika batasan mengevaluasi kolom hanya pada resource yang masuk tanpa membaca data.inventory atau termasuk dalam paket keamanan Pod, gunakan ValidatingAdmissionPolicy. |
Batasan dryrun yang tidak diterapkan |
Jika batasan menggunakan tindakan penegakan kebijakan dryrun dan
Anda tidak berencana untuk menerapkannya, hapus batasan tersebut. |
| Batasan paket keamanan pod | Jika batasan berasal dari paket pss-baseline-v2022,
pss-restricted-v2022, atau psp-v2022,
gunakan Pod Security Admission. Gunakan ValidatingAdmissionPolicies untuk kontrol apa pun yang tidak tercakup dalam Pod Security Admission. |
| Batasan referensial | Jika batasan menggunakan template referensial yang membaca resource lain dalam cluster, gunakan Gatekeeper yang dikelola sendiri. Untuk menemukan
template referensial, telusuri file cadangan Anda untuk menemukan
referensi data.inventory. |
| Cloud Service Mesh, Istio, atau batasan Google Cloud | Tinjau batasan satu per satu untuk memeriksa apakah fitur GKE bawaan menggantikan kebijakan, atau apakah ConstraintTemplate dalam file cadangan Anda membaca data.inventory. Sebagian besar template ini hanya memeriksa resource yang masuk dan berfungsi di ValidatingAdmissionPolicies, kecuali template AsmAuthzPolicyDefaultDeny dan AsmPeerAuthnMeshStrictMtls referensial, yang memerlukan Gatekeeper yang dikelola sendiri. Untuk pengganti bawaan, aktifkan
Otorisasi Biner, bukan menggunakan ConstraintTemplate
K8sRequireBinAuthZ, dan konfigurasikan image node dari node pool Anda,
bukan menggunakan ConstraintTemplate
K8sRequireCosNodeImage. |
Bermigrasi ke ValidatingAdmissionPolicy
ValidatingAdmissionPolicy berisi logika kebijakan, seperti ConstraintTemplate. ValidatingAdmissionPolicyBinding menerapkan kebijakan, seperti batasan. ValidatingAdmissionPolicy menggunakan ekspresi CEL, bukan Rego, dan server API mengevaluasi ekspresi secara langsung, tanpa webhook.
Contoh: repositori image yang diizinkan
Batasan Pengontrol Kebijakan berikut mengharuskan Pod menggunakan image dari satu repositori Artifact Registry. Namespace kube-system dikecualikan:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAllowedRepos
metadata:
name: allowed-repos
spec:
enforcementAction: deny
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces: ["kube-system"]
parameters:
repos:
- "us-docker.pkg.dev/example-project/example-repo/"
ValidatingAdmissionPolicy dan ValidatingAdmissionPolicyBinding berikut
menerapkan aturan yang sama. ValidatingAdmissionPolicyBinding menggunakan tindakan Warn dan
Audit sehingga Anda dapat membandingkan hasil sebelum menerapkan
ValidatingAdmissionPolicy:
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: allowed-repos
spec:
failurePolicy: Fail
matchConstraints:
resourceRules:
- apiGroups: [""]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["pods", "pods/ephemeralcontainers"]
variables:
- name: repos
expression: "['us-docker.pkg.dev/example-project/example-repo/']"
- name: images
expression: >-
object.spec.containers.map(c, c.image) +
(has(object.spec.initContainers) ?
object.spec.initContainers.map(c, c.image) : []) +
(has(object.spec.ephemeralContainers) ?
object.spec.ephemeralContainers.map(c, c.image) : [])
validations:
- expression: >-
variables.images.all(image,
variables.repos.exists(repo, image.startsWith(repo)))
messageExpression: >-
'container images must come from one of these repositories: ' +
variables.repos.join(', ')
reason: Forbidden
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: allowed-repos
spec:
policyName: allowed-repos
validationActions: ["Warn", "Audit"]
matchResources:
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system", "gatekeeper-system"]
Dalam contoh ini, variabel repos menyimpan nilai dari kolom parameters batasan. Ekspresi validasi menampilkan nilai true untuk Pod yang mematuhi ValidatingAdmissionPolicy, yang merupakan kebalikan dari aturan pelanggaran Rego. Untuk menggunakan kembali satu ValidatingAdmissionPolicy di beberapa ValidatingAdmissionPolicyBinding yang menyediakan nilai berbeda, gunakan resource parameter, bukan variabel. Untuk mengetahui informasi selengkapnya tentang resource parameter, lihat Resource parameter dalam dokumentasi Kubernetes.
Tabel berikut menunjukkan cara kolom batasan dipetakan ke kolom ValidatingAdmissionPolicy dan ValidatingAdmissionPolicyBinding:
| Kolom batasan | Kolom ValidatingAdmissionPolicy atau ValidatingAdmissionPolicyBinding |
|---|---|
spec.enforcementAction |
Kolom validationActions di
ValidatingAdmissionPolicyBinding, yang memetakan tindakan deny,
warn, dan dryrun ke nilai
["Deny"], ["Warn"], dan ["Audit"] |
spec.parameters |
Kolom variables di ValidatingAdmissionPolicy, atau
resource parameter yang direferensikan ValidatingAdmissionPolicyBinding
di kolom paramRef |
spec.match.kinds |
Kolom matchConstraints.resourceRules di
ValidatingAdmissionPolicy, yang menggunakan grup API dan nama resource, seperti
resource pods, bukan jenis |
spec.match.namespaces dan
spec.match.excludedNamespaces |
Kolom matchResources.namespaceSelector di
ValidatingAdmissionPolicyBinding, menggunakan operator In atau
NotIn pada
label kubernetes.io/metadata.name |
spec.match.labelSelector |
Kolom matchResources.objectSelector di
ValidatingAdmissionPolicyBinding |
spec.match.namespaceSelector |
Kolom matchResources.namespaceSelector di
ValidatingAdmissionPolicyBinding |
spec.match.scope |
Kolom scope dari setiap aturan resource |
Untuk mengetahui informasi selengkapnya tentang cara menulis ekspresi, lihat CEL di Kubernetes dalam dokumentasi Kubernetes.
Menguji kebijakan bersama Pengontrol Kebijakan
Untuk mengganti batasan tanpa celah dalam penerapan, jalankan ValidatingAdmissionPolicy di samping batasan sebelum Anda menerapkan ValidatingAdmissionPolicy:
- Terapkan ValidatingAdmissionPolicy dan ValidatingAdmissionPolicyBinding
yang memiliki setelan
validationActions: ["Warn", "Audit"]. Biarkan batasan Pengontrol Kebijakan tetap berlaku. - Bandingkan hasilnya menggunakan kueri log audit di Mengganti pelaporan pelanggaran. Jika ValidatingAdmissionPolicy menandai permintaan yang diizinkan oleh Pengontrol Kebijakan, atau sebaliknya, perbaiki ValidatingAdmissionPolicy. Untuk ValidatingAdmissionPolicies yang cocok dengan Pod, jangan mengandalkan peringatan. Pengontrol membuat Pod untuk Deployment dan workload lainnya, sehingga pengontrol menerima peringatan.
- Setelah hasilnya cocok, ubah ValidatingAdmissionPolicyBinding untuk menggunakan setelan
validationActions: ["Deny"]. - Hapus batasan Pengontrol Kebijakan.
Merencanakan perbedaan perilaku
ValidatingAdmissionPolicies berperilaku berbeda dari Pengontrol Kebijakan dengan cara berikut, yang dapat memblokir permintaan atau meninggalkan celah dalam penegakan:
- Kebijakan kegagalan: webhook Pengontrol Kebijakan gagal terbuka, yang berarti
server API menerima permintaan jika Pengontrol Kebijakan tidak merespons.
ValidatingAdmissionPolicy yang memiliki setelan
failurePolicy: Failakan menolak permintaan jika ekspresi menampilkan error atau melebihi batas biaya CEL. ValidatingAdmissionPolicy juga menolak permintaan jika resource parameter yang direferensikan tidak ada dan nilai kolomparamRef.parameterNotFoundActiondi ValidatingAdmissionPolicyBinding adalahDeny. Jika nilainya adalahAllow, server API akan melewati resource parameter yang tidak ada, terlepas dari setelanfailurePolicy. Uji setiap ValidatingAdmissionPolicy dan pilih nilai untuk kedua kolom. - Kolom tidak ada: Rego memperlakukan kolom yang tidak ada sebagai tidak ada pelanggaran, tetapi CEL
menampilkan error. Sebelum membaca kolom opsional, gunakan makro
has()untuk memeriksa apakah kolom tersebut ada. - Pengecualian: ValidatingAdmissionPolicy tidak mengecualikan namespace secara default atau menggunakan label
admission.gatekeeper.sh/ignore. Di cluster GKE Standard, ValidatingAdmissionPolicyBinding berlaku untuk setiap namespace dalam cluster, termasuk namespace sistem seperti namespacekube-system, kecuali jika Anda mengecualikannya di kolommatchResources.namespaceSelectorpada ValidatingAdmissionPolicyBinding atau di kolommatchConstraints.namespaceSelectorataumatchConditionspada ValidatingAdmissionPolicy. Di cluster Autopilot, GKE mengecualikan namespace terkelola secara otomatis dan menolak ValidatingAdmissionPolicy yang cocok dengan resourcenodes,persistentVolumes,certificatesigningrequests, atautokenreviews. Untuk mengetahui informasi selengkapnya, lihat Langkah-langkah keamanan GKE Autopilot. - Subresource: Pengontrol Kebijakan memeriksa update Pod yang menambahkan container sementara. Untuk mempertahankan cakupan tersebut, sertakan subresource
pods/ephemeralcontainersdalam aturan resource Anda, seperti yang dilakukan dalam contoh. - Tidak ada audit resource yang ada: ValidatingAdmissionPolicy hanya mengevaluasi permintaan server API yang masuk. ValidatingAdmissionPolicy tidak melaporkan resource yang ada yang melanggar ValidatingAdmissionPolicy.
- Satu pesan untuk setiap permintaan: ValidatingAdmissionPolicy melaporkan validasi pertama yang gagal, bukan setiap pelanggaran.
Menggunakan Pod Security Admission untuk paket keamanan Pod
Jika Anda menggunakan paket pss-baseline-v2022 atau pss-restricted-v2022, ganti paket tersebut dengan Pod Security Admission, bukan menerjemahkan setiap batasan. Pod Security Admission menggunakan pengontrol penerimaan PodSecurity
bawaan Kubernetes untuk menerapkan aturan yang telah ditetapkan dari
Standar Keamanan Pod Kubernetes
berdasarkan label namespace. Paket pss-baseline-v2022 sesuai dengan
level baseline, dan paket pss-restricted-v2022 sesuai dengan
level restricted.
Pod Security Admission tidak mencakup setiap kontrol dalam paket psp-v2022, seperti daftar yang diizinkan untuk jalur host, pengguna, kemampuan, dan sysctl. Gunakan ValidatingAdmissionPolicies untuk kontrol tersebut. Pod Security Admission juga
tidak dapat mengecualikan image tertentu, seperti batasan Pengontrol Kebijakan yang menggunakan
parameter exemptImages. GKE tidak mendukung konfigurasi pengecualian Pod Security Admission. Jika Anda memerlukan pengecualian, gunakan
ValidatingAdmissionPolicies untuk kebijakan yang terpengaruh.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi Pod Security Admission, lihat Menerapkan kebijakan keamanan level Pod yang telah ditetapkan sebelumnya menggunakan PodSecurity.
Bermigrasi ke Pemilah Komunikasi OPA yang dikelola sendiri
Pilih Gatekeeper untuk kebijakan yang tidak dapat dinyatakan oleh ValidatingAdmissionPolicies. Pengontrol Kebijakan didasarkan pada Gatekeeper, sehingga ConstraintTemplate dan batasan Anda menggunakan API yang sama di Gatekeeper. Semua template di library template Pengontrol Kebijakan berfungsi di Gatekeeper tanpa perubahan pada logikanya. Namun, Gatekeeper menggunakan mesin Rego yang lebih baru dan validasi yang lebih ketat yang dapat menolak ConstraintTemplate kustom.
Saat menggunakan Gatekeeper yang dikelola sendiri, Anda bertanggung jawab atas tugas yang dilakukanGoogle Cloud untuk Pengontrol Kebijakan, seperti menginstal, mengupgrade, menskalakan, dan memantau Gatekeeper di setiap cluster. Layanan Pelanggan tidak mendukung Gatekeeper open source. Untuk mendapatkan bantuan, gunakan Issue tracker GitHub Gatekeeper.
Gatekeeper tidak menyertakan library template atau paket kebijakan Pengontrol Kebijakan. File cadangan Anda berisi ConstraintTemplates dan batasan dari cluster Anda. Untuk template yang berasal dari library Gatekeeper open source, Anda dapat menggunakan template di library kebijakan Gatekeeper. Nama template tetap sama, tetapi parameter dan pesan dapat berbeda antar-versi.
Untuk memindahkan kebijakan ke Gatekeeper, ikuti langkah-langkah berikut:
- Opsional: Jika Anda tidak dapat menerima kesenjangan dalam penerapan saat mengganti
Policy Controller, migrasikan kebijakan yang paling penting ke
ValidatingAdmissionPolicies terlebih dahulu. Pastikan ValidatingAdmissionPolicyBindings tersebut mengecualikan namespace
gatekeeper-systemagar tidak memblokir Tugas penginstalan Gatekeeper. Setelah Anda menghapus Pengontrol Kebijakan, cluster Anda akan berhenti menerapkan kebijakan Gatekeeper hingga Anda menerapkan batasan Gatekeeper yang sesuai. ValidatingAdmissionPolicies terus diterapkan karena tidak bergantung pada Pengontrol Kebijakan atau Gatekeeper. Jika Anda menggunakan ConstraintTemplate kustom, uji setiap manifes template kustom menggunakan alat command line
gatordari versi Gatekeeper yang ingin Anda instal:gator test --filename=TEMPLATE_FILEGanti
TEMPLATE_FILEdengan jalur ke file manifes ConstraintTemplate Anda. Sebelum menghapus Pengontrol Kebijakan, perbaiki ConstraintTemplate kustom yang ditolak Gatekeeper.Jika Anda men-deploy batasan dari repositori Git menggunakan alat GitOps, siapkan ConstraintTemplate yang digunakan batasan Anda dan tambahkan ke repositori saat Anda menginstal Gatekeeper. Jika tidak, batasan Anda akan gagal diterapkan setelah Anda menghapus Pengontrol Kebijakan karena ConstraintTemplates-nya tidak ada lagi.
Hapus Pengontrol Kebijakan dengan mengikuti langkah-langkah di Menghapus Pengontrol Kebijakan. Jangan instal Gatekeeper di cluster yang masih menjalankan Pengontrol Kebijakan. Keduanya menggunakan namespace
gatekeeper-system, CustomResourceDefinition yang sama, dan nama webhook yang sama.Instal Gatekeeper menggunakan Helm, menggunakan setelan yang Anda pilih dari tabel di bagian berikutnya, Setelan Gatekeeper yang berbeda dari Pengontrol Kebijakan. Untuk mengetahui informasi selengkapnya tentang cara menginstal Gatekeeper, lihat Penginstalan dalam dokumentasi Gatekeeper.
Di cluster Autopilot, penginstalan diagram Helm default gagal karena GKE menolak aturan karakter pengganti dalam webhook mutasi. Tetapkan nilai Helm
disableMutation: true, atau tetapkan nilai HelmmutatingWebhookCustomRulesuntuk mencantumkan hanya resource tertentu yang ditargetkan oleh mutator Anda. Jangan sertakan resourcenodes,persistentvolumes,certificatesigningrequests, atautokenreviews.Dalam file cadangan, hapus kolom, label, dan anotasi berikut dari setiap resource yang ingin Anda terapkan kembali:
- Kolom
status. - Kolom
resourceVersion,uid,creationTimestamp,generation,managedFields, danownerReferencesdi bagianmetadata. - Anotasi
kubectl.kubernetes.io/last-applied-configuration. - Label
app.kubernetes.io/managed-by: anthospolicycontroller.googleapis.com. Jika Pengontrol Kebijakan diaktifkan lagi di cluster, misalnya melalui konfigurasi default tingkat fleet, Pengontrol Kebijakan akan mengelola resource yang memiliki label ini dan dapat mengubah atau menghapusnya. - Label dan anotasi yang kuncinya memiliki awalan
policycontroller..
- Kolom
Terapkan ConstraintTemplate yang digunakan batasan Anda, lalu periksa apakah Gatekeeper membuat CustomResourceDefinition untuk setiap template:
kubectl get constrainttemplates \ -o custom-columns='NAME:.metadata.name,CREATED:.status.created'Jika setiap template menampilkan nilai
truedi kolomCREATED, terapkan batasan Anda.
Setelan Gatekeeper yang berbeda dari Pengontrol Kebijakan
Sebelum menginstal Gatekeeper, tinjau setelan dalam tabel berikut yang menunjukkan perbedaan antara default diagram Helm Gatekeeper dan Pengontrol Kebijakan:
| Setelan | Default Pengontrol Kebijakan | Default diagram Helm Gatekeeper | Rekomendasi |
|---|---|---|---|
| Mutasi | Nonaktif kecuali jika Anda mengaktifkannya | Aktif | Jika Anda tidak menggunakan mutasi, tetapkan nilai Helm disableMutation: true. Pada cluster Autopilot, Anda harus menetapkan nilai Helm disableMutation: true atau mengonfigurasi nilai Helm mutatingWebhookCustomRules tanpa karakter pengganti atau resource yang dibatasi. Jika Anda tidak menentukan salah satu nilai ini, GKE akan menolak penginstalan. |
| Namespace yang dikecualikan | Namespace gatekeeper-system dan namespace dalam daftar exemptableNamespaces Anda |
Namespace tempat Gatekeeper diinstal | Tambahkan namespace yang dikecualikan ke nilai Helm controllerManager.exemptNamespaces. Gatekeeper
menolak perubahan pada namespace yang memiliki
label admission.gatekeeper.sh/ignore kecuali jika namespace tersebut
dikecualikan. |
| Data referensial | Disinkronkan secara otomatis untuk paket referensial | Tidak disinkronkan | Buat Config atau SyncSet Gatekeeper yang mencantumkan jenis yang dibaca oleh template referensial Anda. Hingga jenis tersebut disinkronkan ke dalam objek data.inventory, pemeriksaan konflik akan mengizinkan permintaan yang melanggar, dan pemeriksaan keberadaan, seperti K8sRequireNamespaceNetworkPolicies ConstraintTemplate, akan menolak setiap permintaan yang cocok meskipun resource yang diperlukan ada. |
| Pembuatan ValidatingAdmissionPolicy | Tidak tersedia | Aktif untuk template yang berisi kode CEL | Template Pengontrol Kebijakan hanya berisi Rego, sehingga Gatekeeper
hanya akan membuat ValidatingAdmissionPolicies jika Anda menambahkan CEL ke
ConstraintTemplates. Untuk mempertahankan penerapan di webhook, tetapkan nilai Helm defaultCreateVAPForTemplates: false dan defaultCreateVAPBindingForConstraints: false.
Untuk mengetahui informasi selengkapnya, lihat
Integrasi dengan Kebijakan Penerimaan Validasi Kubernetes dalam
dokumentasi Gatekeeper. |
| Replika dan resource | Satu replika untuk setiap komponen, dengan batas memori 1.024 MiB | Tiga replika webhook, dengan batas resource yang berbeda | Konfigurasikan jumlah replika dan batas resource berdasarkan penggunaan Anda saat ini. |
| Gambar | Diambil dari registry yang dikelola Google | Diambil dari Docker Hub (image openpolicyagent/gatekeeper,
openpolicyagent/gatekeeper-crds, dan
curlimages/curl) |
Untuk cluster pribadi atau cluster yang menerapkan Otorisasi Biner,
duplikasi ketiga image ke Artifact Registry dan ganti nilai image-nya
dalam diagram. Jika Anda tidak mencerminkan
image curlimages/curl, nonaktifkan Tugas
pemeriksaan webhook. |
Secara default, Gatekeeper hanya mengekspos metrik Prometheus, dan nama metriknya berbeda dengan nama yang dikirim Pengontrol Kebijakan ke Cloud Monitoring. Perbarui dasbor dan pemberitahuan yang menggunakan metrik Pengontrol Kebijakan.
Memigrasikan kebijakan mutasi
Jika Anda mengaktifkan mutasi di Pengontrol Kebijakan, cantumkan mutator Anda:
kubectl get assign,assignmetadata,assignimage,modifyset
Untuk setiap mutator, pilih salah satu opsi berikut:
- MutatingAdmissionPolicy: Anda dapat menggunakan MutatingAdmissionPolicy di GKE versi 1.36 dan yang lebih baru. Seperti ValidatingAdmissionPolicy, MutatingAdmissionPolicy menggunakan ekspresi CEL dan berjalan di server API tanpa webhook. Kubernetes menjalankan semua MutatingAdmissionPolicy sebelum ValidatingAdmissionPolicy, jadi uji keduanya bersama-sama untuk memastikan bahwa mutasi tidak menyebabkan ValidatingAdmissionPolicy menolak manifes yang valid. Di cluster Autopilot, GKE mengecualikan namespace terkelola dari MutatingAdmissionPolicies. Untuk mengetahui informasi selengkapnya tentang kebijakan mutasi, lihat Kebijakan Penerimaan Mutasi dalam dokumentasi Kubernetes.
- Gatekeeper yang dikelola sendiri: di cluster Standard, mutator Anda
berfungsi tanpa perubahan karena Gatekeeper mengaktifkan mutasi secara default. Di cluster Autopilot, Anda harus menetapkan nilai Helm
mutatingWebhookCustomRulesdi diagram Gatekeeper untuk mencantumkan resource tertentu yang ditargetkan oleh mutator, bukan aturan karakter pengganti. Untuk mengetahui informasi selengkapnya, lihat Langkah-langkah keamanan GKE Autopilot. Setelah menginstal Gatekeeper, hapus metadata Pengontrol Kebijakan dari file cadangan mutator dan terapkan kembali mutator, seperti yang Anda lakukan untuk batasan.
Memperbarui pemeriksaan kebijakan di pipeline build
Pipeline build Anda mungkin memeriksa manifes terhadap batasan Pengontrol Kebijakan sebelum deployment. Misalnya, pipeline mungkin menggunakan
fungsi gatekeeper di kpt atau alat command line gator. Untuk mengetahui informasi selengkapnya, lihat Memvalidasi aplikasi berdasarkan kebijakan perusahaan di pipeline CI.
Jika pipeline Anda memeriksa manifes, perbarui pipeline tersebut untuk penggantian Anda:
- Jika Anda menggunakan Gatekeeper, Anda dapat mempertahankan pipeline Anda. Perbarui jalur file atau direktori dalam perintah
gatorataukptuntuk mereferensikan repositori atau direktori yang berisi ConstraintTemplate dan manifes batasan Gatekeeper yang telah dibersihkan. Jika Anda menggunakan ValidatingAdmissionPolicies, alat tersebut tidak akan mengevaluasi kebijakan Anda. Sebagai gantinya, jalankan uji coba sisi server terhadap cluster pengujian yang memiliki ValidatingAdmissionPolicy dan ValidatingAdmissionPolicyBinding yang menggunakan tindakan
Deny:kubectl apply --dry-run=server -f MANIFEST_DIRECTORYGanti
MANIFEST_DIRECTORYdengan direktori yang berisi manifes Anda. Perintah akan gagal jika ValidatingAdmissionPolicy menolak manifes.
Mengganti pelaporan pelanggaran
ValidatingAdmissionPolicy tidak menyertakan dasbor, dan tidak mengaudit resource yang sudah ada di cluster Anda. Gunakan metode berikut:
- Peringatan: jika ValidatingAdmissionPolicyBinding menggunakan tindakan
Warn, server API akan menampilkan peringatan kepada klien yang mengirim permintaan, seperti alat command linekubectl. Untuk Pod yang dibuat oleh pengontrol, seperti Pod dalam Deployment, pengontrol akan menerima peringatan. Log audit: jika ValidatingAdmissionPolicyBinding menggunakan tindakan
Audit, server API akan menganotasi entri log audit untuk setiap validasi yang gagal. GKE menulis permintaan pembuatan, pembaruan, dan penghapusan ke log audit Aktivitas Admin di Cloud Logging. Untuk menemukan validasi yang gagal, jalankan kueri berikut di Logs Explorer:resource.type="k8s_cluster" logName:"cloudaudit.googleapis.com%2Factivity" labels."validation.policy.admission.k8s.io/validation_failure":*
Jika Anda menggunakan batasan yang memiliki tindakan penerapan dryrun sebagai
laporan kepatuhan pada resource yang ada, ValidatingAdmissionPolicies tidak dapat
menggantikan laporan tersebut. Pertahankan kebijakan tersebut di Gatekeeper yang dikelola sendiri, yang pengontrol auditnya memeriksa resource yang ada sesuai jadwal.
Menghapus Pengontrol Kebijakan
Sebelum Anda menghapus Pengontrol Kebijakan dari cluster, selesaikan tugas-tugas berikut:
- Pastikan kebijakan apa pun yang Anda migrasikan ke ValidatingAdmissionPolicies atau Pod Security Admission diterapkan dan Anda memiliki cadangan ConstraintTemplate, batasan, dan mutator. Menghapus Pengontrol Kebijakan akan menghapus CustomResourceDefinition-nya, yang akan menghapus setiap ConstraintTemplate, batasan, dan mutator di cluster, termasuk yang Anda buat.
- Jika Anda men-deploy batasan dari repositori Git menggunakan alat GitOps seperti Config Sync atau Argo CD, hapus batasan yang diganti dari repositori. Pastikan batasan telah dihapus dari cluster Anda.
- Opsional: Untuk mengonfirmasi bahwa tidak ada yang bergantung pada webhook Pengontrol Kebijakan, tangguhkan Pengontrol Kebijakan terlebih dahulu. Penangguhan hanya menghapus konfigurasi webhook, dan Anda dapat memulihkannya.
Untuk menghapus Pengontrol Kebijakan, ikuti langkah-langkah berikut:
Uninstal Pengontrol Kebijakan dari cluster Anda:
gcloud container fleet policycontroller disable \ --memberships=MEMBERSHIP_NAME \ --project=PROJECT_IDGanti kode berikut:
MEMBERSHIP_NAME: nama keanggotaan cluster terdaftar yang ingin Anda uninstal Pengontrol Kebijakan-nya. Untuk meng-uninstal Pengontrol Kebijakan dari beberapa cluster, tentukan comma separated list nama keanggotaan, atau ganti flag--memberships=MEMBERSHIP_NAMEdengan flag--all-memberships.PROJECT_ID: ID project host fleet Anda.
Pastikan Policy Controller telah selesai di-uninstal dari cluster Anda:
gcloud container fleet policycontroller describe \ --memberships=MEMBERSHIP_NAME \ --project=PROJECT_ID \ --format="yaml(membershipStates)"Tunggu hingga nilai kolom
policycontroller.statelevel teratas untuk setiap keanggotaan adalahNOT_INSTALLED, bukanDECOMMISSIONING. EntricomponentStatesindividual mencapai statusNOT_INSTALLEDsebelum pembersihan CustomResourceDefinition selesai.Jika Anda berencana menginstal Gatekeeper yang dikelola sendiri, pastikan namespace
gatekeeper-systemsudah tidak ada:kubectl get namespace gatekeeper-systemTunggu hingga output melaporkan bahwa namespace
gatekeeper-systemtidak ditemukan.Opsional: Untuk mencegah cluster yang Anda daftarkan nanti mendapatkan Pengontrol Kebijakan, hapus konfigurasi default tingkat fleet:
gcloud container fleet policycontroller enable \ --no-fleet-default-member-config \ --project=PROJECT_IDPerintah ini hanya menghapus konfigurasi default. Paket ini tidak menginstal Pengontrol Kebijakan di cluster mana pun.
Menghapus Pengontrol Kebijakan dari cluster di luar fleet
Perintah gcloud container fleet policycontroller disable hanya menghapus Pengontrol Kebijakan dari cluster yang dikelola fleet. Cluster dapat menjalankan Pengontrol Kebijakan tanpa pengelolaan fleet dalam kasus berikut:
- Anda telah menginstal Pengontrol Kebijakan menggunakan Operator ConfigManagement.
- Anda membatalkan pendaftaran cluster dari fleet-nya, atau menjalankan perintah
gcloud container fleet policycontroller detach, sebelum Pengontrol Kebijakan selesai di-uninstal.
Untuk menghapus Pengontrol Kebijakan dari cluster ini, tempatkan cluster di bawah pengelolaan fleet, lalu uninstal Pengontrol Kebijakan:
- Cadangkan ConstraintTemplate, batasan, konfigurasi sinkronisasi, dan
mutator Anda, seperti yang dijelaskan dalam
Menginventarisasi dan mengklasifikasikan kebijakan Anda. Saat Anda
membersihkan metadata dari cadangan yang diambil dari penginstalan Operator ConfigManagement, hapus juga label
configmanagement.gke.io/*dank8s-app: kubernetes-config-managementselain kolomownerReferencesdan metadatapolicycontroller.*. Jika Anda menginstal Pengontrol Kebijakan menggunakan ConfigManagement Operator, hapus kolom
policyControllerdari resource kustom ConfigManagement pada cluster. Tunggu hingga rekonsiliasi selesai. Rekonsiliasi dapat memerlukan waktu sekitar dua menit. Kemudian, periksa apakah namespacegatekeeper-systemmasih ada:kubectl get namespace gatekeeper-systemDi ConfigManagement Operator versi 1.17 dan yang lebih lama, menghapus kolom
policyControllerakan otomatis meng-uninstal Pengontrol Kebijakan. Jika namespacegatekeeper-systemtidak ditemukan, lewati langkah-langkah yang tersisa di bagian ini. Di ConfigManagement Operator versi 1.18 dan yang lebih baru, namespacegatekeeper-systemtetap berada di cluster, jadi lanjutkan ke langkah berikutnya.Jika cluster belum terdaftar ke fleet, daftarkan cluster tersebut. Untuk mengetahui informasi selengkapnya, lihat Mendaftarkan cluster di Google Cloud ke fleet Anda.
Periksa apakah mutasi diaktifkan di cluster:
kubectl get mutatingwebhookconfiguration \ gatekeeper-mutating-webhook-configurationAktifkan Pengontrol Kebijakan pada keanggotaan cluster sehingga fleet mengambil alih pengelolaan penginstalan yang ada. Jika perintah sebelumnya menampilkan resource
gatekeeper-mutating-webhook-configuration, sertakan flag--mutationagar fleet mengadopsi dan nantinya menghapus resource mutasi cakupan cluster:gcloud container fleet policycontroller enable \ --memberships=MEMBERSHIP_NAME \ --project=PROJECT_IDGanti kode berikut:
MEMBERSHIP_NAME: nama keanggotaan cluster terdaftar Anda.PROJECT_ID: ID project host fleet Anda.
Tunggu hingga nilai kolom
policycontroller.stateuntuk keanggotaan adalahACTIVE:gcloud container fleet policycontroller describe \ --memberships=MEMBERSHIP_NAME \ --project=PROJECT_ID \ --format="yaml(membershipStates)"Uninstal Pengontrol Kebijakan dengan mengikuti langkah-langkah di bagian Menghapus Pengontrol Kebijakan. Jika Anda tidak menginstal Gatekeeper yang dikelola sendiri, hapus CustomResourceDefinitions batasan yang tersisa setelah namespace
gatekeeper-systemdihapus:kubectl get crd -o name \ | grep '\.constraints\.gatekeeper\.sh$' \ | xargs -r kubectl deleteOpsional: Jika Anda mendaftarkan cluster hanya untuk menyelesaikan prosedur ini, batalkan pendaftarannya setelah perintah
describemenampilkan statusNOT_INSTALLEDuntuk keanggotaan. Untuk cluster yang Anda daftarkan menggunakan flag--enable-fleet, jalankan perintahgcloud container clusters updatedengan flag--clear-fleet-project, bukan perintahgcloud container fleet memberships unregister. Untuk mengetahui informasi selengkapnya, lihat Membatalkan pendaftaran cluster.
Langkah berikutnya
- Baca tentang Validating Admission Policy di dokumentasi Kubernetes.
- Pelajari cara menerapkan kebijakan keamanan level Pod yang telah ditetapkan sebelumnya menggunakan PodSecurity.
- Baca dokumentasi Gatekeeper.