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
|