на:
hostNetwork
hostIPC
hostPID
hostPath
hostPorts
priveleged
allowPrivilegeEscalation
capabilities
procMount
seLinuxOptions
runAsUser, runasGroup, fsGroup,supplementalGroups - только с определенного пула uid'ов
runAsNonRoot: true
разрешены только определенные seccomp/apparmor профили
разрешены только определенные tollerations
разрешены только определенные домены для ingress
разрешены только опеределнные типы волумов
разрешены только определенные sysctls
разрешены только определенные priorityClassName
allow list для аннотаций ingress
Что забыл? Мб что-то еще упустил? всякие resource quota/limitrange/network policy не учитываем
а зачем домены в ингрессе ограничивать, например?
The BGP backend process (BIRD) is not running не подскажешь в чем может быть трабла ?
что бы не запускали свои пет проекты?
злой человек допустим получил доступ к другому ns, и у него есть возможность создавать ingress. Он может создать ingress с существующим доменом в кластере, но накрутить свои paths и можно дальше че-то придумать
чому? js вроде гибчей
не понял
kyverno достаточно гибкий, там есть jmespath, и фичи понравились
ну ты описал сценарий атаки, от которого хочешь защититься. по сценарию у тебя есть ингрессы для какого-то домена, и ты не хочешь, чтобы злоумышленник насоздавал своих ингрессов на этот же домен, но с другими путями, так?
json конечно хорошо, но можно ли там полноценную логику сделать, со всякими там if/else?
раз ингресс на этот домен уже есть - значит он в списке разрешённых?
Он может быть только в определенном нс
там такую логику вполне можно строить
если злыдень получил доступ к какому-то левому ns
@gecube посоветуй, ничего критичного не упустил?
Схоронил и в очередь встал, чего еще накидают
А можно делать кроссобъектные валидации? Например не давать создать pdb в комбинации с количеством реплик = 1, чтобы не вставлять палки в колёса с обновлением нод (evict не будет возможен). Или проверять чтобы minAvailable percent != ReplicaAmount.
я такого не делал, но я думаю это можно провернуть через external data source https://kyverno.io/docs/writing-policies/external-data-sources/#variables-from-kubernetes-api-server-calls Что нибудь такое rules: - match: any: - resources: kinds: - PodDistributionBudget context: - name: replicas apiCall: urlPath: "/apis/apps/v1/namespaces/{{request.namespace}}/deployments/{{request.name}}" jmesPath: "spec.replicas" validate: deny: conditions: any: - key: '{{replicas}}' operator: Equals value: 1 Но я не тестил
тут еще мб preconditions надо сделать, ну или как минимум несколько ресурсов проверять, а не только deplouments
Обсуждают сегодня