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. Anda kemudian dapat melihat pelanggaran di log dan objek batasan.

Jenis tindakan penegakan kebijakan

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

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

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

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, untuk mengalihkan tindakan penerapan 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, 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 penerimaan tidak muncul di 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 di log

Anda dapat melihat laporan audit di log. Untuk mempelajari log lebih lanjut, lihat Menggunakan Log Audit.

Untuk mendapatkan semua log Pengontrol Kebijakan, jalankan perintah berikut:

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

Hasil audit memiliki "process":"audit" di baris log, sehingga Anda dapat menyalurkan output ke perintah lain dan memfilter berdasarkan 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 selanjutnya