46 lines
1.9 KiB
YAML
46 lines
1.9 KiB
YAML
apiVersion: kyverno.io/v1
|
|
kind: ClusterPolicy
|
|
metadata:
|
|
name: restrict-privileged-for-non-admins
|
|
annotations:
|
|
policies.kyverno.io/title: "Привилегированные контейнеры — только для администраторов"
|
|
policies.kyverno.io/category: Security
|
|
policies.kyverno.io/severity: high
|
|
policies.kyverno.io/subject: Pod
|
|
policies.kyverno.io/description: >-
|
|
Запрещает создание привилегированных контейнеров для обычных пользователей.
|
|
Администраторы (system:masters, cluster-admins) могут создавать
|
|
привилегированные поды для системных нужд.
|
|
Использует request.userInfo для проверки прав запрашивающего.
|
|
spec:
|
|
rules:
|
|
- name: restrict-privileged-non-admin
|
|
match:
|
|
resources:
|
|
kinds:
|
|
- Pod
|
|
# Precondition: применять только если пользователь НЕ администратор
|
|
preconditions:
|
|
all:
|
|
- key: "system:masters"
|
|
operator: NotIn
|
|
value: "{{ request.userInfo.groups }}"
|
|
- key: "cluster-admins"
|
|
operator: NotIn
|
|
value: "{{ request.userInfo.groups }}"
|
|
validate:
|
|
message: >-
|
|
Пользователь '{{ request.userInfo.username }}' не имеет права
|
|
создавать привилегированные контейнеры.
|
|
Обратитесь к cluster-admin для выполнения системных задач.
|
|
foreach:
|
|
- list: >-
|
|
request.object.spec.containers[] |
|
|
merge(request.object.spec.initContainers[] || `[]`, @)
|
|
deny:
|
|
conditions:
|
|
any:
|
|
- key: "{{ element.securityContext.privileged }}"
|
|
operator: Equals
|
|
value: true
|