Kyverno - это мощный инструмент для обеспечения безопасности в Kubernetes, который умеет валидировать, мутировать и управлять различными сущностями кластера согласно заданным правилам (политикам).
Установить можно следующей командой:
kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.13.0/install.yaml
Ниже я приведу пример кластерной политики для запрета использования capabilities NET_ADMIN. Аналогично можно запретить и другие CAP, да и много чего в целом.
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: prevent-net-admin-capability
spec:
background: false
failurePolicy: Fail
validationFailureAction: Enforce
webhookTimeoutSeconds: 30
rules:
- name: prevent-net-admin-capability
match:
any:
- resources:
kinds:
- Pod
exclude:
any:
- resources:
namespaces:
- "kube-system"
preconditions:
all:
- key: "{{ request.operation }}"
operator: In
value:
- CREATE
- UPDATE
validate:
message: "Adding NET_ADMIN capability is not allowed."
deny:
conditions:
any:
- key: "{{ request.object.spec.containers[0].securityContext.capabilities.add[0] }}"
operator: Equals
value: "NET_ADMIN"
- key: "{{ request.object.spec.initContainers[0].securityContext.capabilities.add[0] }}"
operator: Equals
value: "NET_ADMIN"
- key: "{{ request.object.spec.ephemeralContainers[0].securityContext.capabilities.add[0] }}"
operator: Equals
value: "NET_ADMIN"
В этом примере мы запрещаем добавление NET_ADMIN для containers, initContainers, ephemeralContainers, кроме namespace "kube-system" в секции exclude. Проверим работоспособность, попробовав создать тестовый под:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: busybox
command: ["sleep", "3600"]
securityContext:
capabilities:
add:
- NET_ADMIN
В выводе должны увидеть:
error from server: error when creating "pod.yaml": admission webhook "validate.kyverno.svc-fail" denied the request:
resource Pod/default/test-pod was blocked due to the following policies
prevent-net-admin-capability:
prevent-net-admin-capability: Adding NET_ADMIN capability is not allowed.
#devsecops