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
- Baca selengkapnya tentang Membuat batasan
- Menggunakan library template batasan
- Pelajari cara menggunakan batasan, bukan PodSecurityPolicies