Mengaudit menggunakan batasan

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

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 menegakkan, dan siapa yang mengelola siklus hidup infrastruktur teknologi yang mendasarinya. Kepada 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.

Jenis tindakan penegakan kebijakan

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

deny adalah tindakan penerapan default. Ini diaktifkan secara otomatis, meskipun Anda tidak perlu menambahkan tindakan penegakan kebijakan di batasan Anda. Gunakan deny untuk mencegah operasi cluster tertentu agar tidak terjadi saat terjadi pelanggaran.

dryrun memungkinkan Anda memantau pelanggaran aturan tanpa memblokir secara aktif transaksi. Anda dapat menggunakannya untuk menguji apakah batasan Anda berfungsi sebagai yang diinginkan, sebelum mengaktifkan penerapan aktif menggunakan tindakan deny. Pengujian cara ini dapat mencegah gangguan yang disebabkan oleh kesalahan konfigurasi batasan data.

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

Metode ini disarankan saat menguji batasan baru atau melakukan tindakan migrasi, seperti mengupgrade platform, untuk mengalihkan tindakan penegakan dari deny menjadi warn atau dryrun agar Anda dapat menguji apakah kebijakan Anda berfungsi seperti yang diharapkan.

Menambahkan tindakan penegakan kebijakan

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

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 penolakan oleh pengontrol penerimaan tidak muncul di log.

Melihat hasil audit di objek batasan

Untuk melihat pelanggaran terhadap 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 perintah berikut:

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

Output yang Anda lihat mirip dengan yang 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 menggunakan Logs Explorer untuk mengambil, melihat, dan menganalisis data log untuk Pengontrol Kebijakan.

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 {i>output<i} ke perintah lain dan memfilter berdasarkan baris ini. Misalnya, Anda dapat menggunakan jq, yang mengurai file JSON dan memungkinkan Anda menyetel 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