Mengaudit menggunakan batasan

Objek batasan Pengontrol Kebijakan memungkinkan Anda menerapkan kebijakan untuk cluster Kubernetes. Untuk membantu menguji kebijakan, Anda dapat menambahkan tindakan penegakan ke batasan. Selanjutnya, Anda dapat melihat pelanggaran dalam objek dan log batasan.

Halaman ini ditujukan untuk administrator IT dan Operator yang ingin memastikan bahwa semua resource yang berjalan dalam platform cloud memenuhi persyaratan kepatuhan organisasi dengan menyediakan dan mempertahankan otomatisasi untuk mengaudit atau menerapkan, dan yang mengelola siklus proses infrastruktur teknologi yang mendasarinya. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam kontenGoogle Cloud , lihat Peran dan tugas pengguna GKE Enterprise umum.

Jenis tindakan penegakan kebijakan

Ada tiga tindakan penegakan: deny, dryrun, dan warn.

deny adalah tindakan penegakan default. Tindakan ini diaktifkan secara otomatis, meskipun Anda tidak menambahkan tindakan penegakan dalam batasan. Gunakan deny untuk mencegah operasi cluster tertentu terjadi saat ada pelanggaran.

dryrun memungkinkan Anda memantau pelanggaran aturan tanpa memblokir transaksi secara aktif. Anda dapat menggunakannya untuk menguji apakah batasan berfungsi seperti yang diinginkan, sebelum mengaktifkan penerapan aktif menggunakan tindakan deny. Menguji batasan dengan cara ini dapat mencegah gangguan yang disebabkan oleh batasan yang salah dikonfigurasi.

warn mirip dengan dryrun, tetapi juga memberikan pesan langsung tentang pelanggaran yang terjadi pada waktu masuk.

Sebaiknya saat menguji batasan baru atau melakukan tindakan migrasi, seperti mengupgrade platform, alihkan tindakan penegakan dari deny ke warn atau dryrun sehingga Anda dapat menguji apakah kebijakan Anda berfungsi seperti yang diharapkan.

Menambahkan tindakan penegakan kebijakan

Anda dapat menambahkan enforcementAction: deny atau enforcementAction: dryrun ke batasan.

Contoh batasan berikut, yang bernama audit.yaml, menambahkan tindakan dryrun.

#audit.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPAllowedUsers metadata:   name: user-must-be-3333 spec:   enforcementAction: dryrun   match:     kinds:       - apiGroups: [""]         kinds: ["Pod"]   parameters:     runAsUser:       rule: MustRunAs       ranges:         - min: 3333           max: 3333 

Buat batasan. Misalnya, terapkan menggunakan kubectl apply -f:

kubectl apply -f audit.yaml 

Melihat hasil audit

Pelanggaran yang diaudit ditambahkan ke objek Constraint dan juga ditulis ke log. Pelanggaran yang ditolak oleh pengontrol akses tidak akan muncul dalam log.

Melihat hasil audit di objek batasan

Untuk melihat pelanggaran batasan tertentu, jalankan perintah berikut dan lihat kolom spec.status.

kubectl get constraint-kind constraint-name -o yaml 

Contoh

Untuk melihat output batasan dari audit.yaml, jalankan perintah berikut:

kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml 

Output yang Anda lihat mirip dengan berikut ini:

apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPAllowedUsers metadata:   creationTimestamp: "2020-05-22T01:34:22Z"   generation: 1   name: user-must-be-3333   resourceVersion: "13351707"   selfLink: /apis/constraints.gatekeeper.sh/v1beta1/k8spspallowedusers/user-must-be-3333   uid: 5d0b39a8-9bcc-11ea-bb38-42010a80000c spec:   enforcementAction: dryrun   match:     kinds:     - apiGroups:       - ""       kinds:       - Pod   parameters:     runAsUser:       ranges:       - max: 3333         min: 3333       rule: MustRunAs  status:   auditTimestamp: "2020-05-22T01:39:05Z"   byPod:   - enforced: true     id: gatekeeper-controller-manager-6b665d4c4d-lwnz5     observedGeneration: 1  totalViolations: 5   violations:   - enforcementAction: dryrun     kind: Pod     message: Container git-sync is attempting to run as disallowed user 65533     name: git-importer-86564db8cb-5r4gs     namespace: config-management-system   - enforcementAction: dryrun     kind: Pod     message: Container manager is attempting to run as disallowed user 1000     name: gatekeeper-controller-manager-6b665d4c4d-lwnz5     namespace: gatekeeper-system   - enforcementAction: dryrun     kind: Pod     message: Container kube-proxy is attempting to run without a required securityContext/runAsUser     name: kube-proxy-gke-fishy131-default-pool-7369b17c-cckf     namespace: kube-system   - enforcementAction: dryrun     kind: Pod     message: Container kube-proxy is attempting to run without a required securityContext/runAsUser     name: kube-proxy-gke-fishy131-default-pool-7369b17c-jnhb     namespace: kube-system   - enforcementAction: dryrun     kind: Pod     message: Container kube-proxy is attempting to run without a required securityContext/runAsUser     name: kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8     namespace: kube-system 

Melihat hasil audit dalam log

Anda dapat menggunakan Logs Explorer untuk mengambil, melihat, dan menganalisis data log untuk Policy Controller.

Untuk mendapatkan semua log Policy Controller, jalankan perintah berikut:

kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes 

Hasil audit memiliki "process":"audit" di baris log, sehingga Anda dapat meneruskan output ke perintah lain dan memfilter menurut baris ini. Misalnya, Anda dapat menggunakan jq, yang mengurai file JSON dan memungkinkan Anda menetapkan filter untuk jenis log tertentu.

Contoh hasil audit dari logging:

{ "level":"info", "ts":1590111401.9769812, "logger":"controller", "msg":"Container kube-proxy is attempting to run without a required securityContext/runAsUser", "process":"audit", "audit_id":"2020-05-22T01:36:24Z", "event_type":"violation_audited", "constraint_kind":"K8sPSPAllowedUsers", "constraint_name":"user-must-be-3333", "constraint_namespace":"", "constraint_action":"dryrun", "resource_kind":"Pod", "resource_namespace":"kube-system", "resource_name":"kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8" } 

Langkah berikutnya