Политика безопасности пода Kubernetes – это ресурс, который контролирует безопасность спецификации этого пода.
Используя определение объекта PodSecurityPolicy, вы можете управлять такими вещами, как:
- Возможность запуска привилегированных контейнеров
- Повышение привилегий
- Доступ к типам томов
- Доступ к файловым системам хоста
- Использование хост-сети
Как создать политику безопасности пода Kubernetes
Давайте создадим политику безопасности пода Kubernetes, которая предотвращает создание привилегированных модулей и контролирует доступ к томам.
Во-первых, мы должны создать файл YAML.
В терминале введите команду:
nano psp.yaml
В этот файл вставьте следующее:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: psp
spec:
privileged: false
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
В этом файле мы запрещаем создание привилегированных модулей с помощью строки:
privileged: false
Мы также разрешаем следующее (через правило RunAsAny):
- SeLinux – позволяет любому пользователю управлять SELinux в модулях.
- Linux groups – дополнительные группы
- runAsUser – позволяет пользователям запускать точки входа в контейнер с другим именем пользователя
- fsGroup – тома, которые поддерживают управление собственностью
Сохраните и закройте файл.
Теперь мы должны применить политику.
Это делается с помощью команды:
kubectl apply -f psp.yaml
Вывод:
podsecurity.policy/psp created
В любой момент вы можете изменить файл YAML и выполнить ту же команду, чтобы переконфигурировать политику.
Убедитесь, что ваша политика доступна, введя команду:
kubectl get psp
В выводе будут перечислены детали:
Как назначить политику безопасности Kubernetes поду
Теперь, когда вы создали свою политику, возникает законный вопрос как ее назначить?
Это делается с помощью управления доступом на основе ролей (RBAC).
Создайте конфигурацию RBAC для политики с помощью команды:
nano rbac-psp.yaml
В этот файл вставьте следующее:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: psp:psp
rules:
- apiGroups:
- extensions
resources:
- podsecuritypolicies
resourceNames:
- psp
verbs:
- use
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: psp:psp
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: psp:psp
apiGroup: rbac.authorization.k8s.io
Приведенный выше файл создаст роль кластера с именем psp, которая может использовать нашу новую политику, которую мы назвали psp.
Это также создаст привязку роли на уровне кластера, которая предоставляет доступ к роли psp: psp каждому аутентифицированному пользователю.
Сохраните и закройте файл.
Создайте эту политику с помощью команды:
kubectl apply -f rbac-psp.yaml
Теперь мы создали политику и контроль RBAC.
Давайте выясним, сможем ли мы теперь использовать эту новую политику.
Введите команду:
kubectl auth can-i use psp/psp
Выход должен сказать «yes».
Конечно, система должна сказать «yes», так как я пользователь с правами администратора.
Но что, если мы проверим это с другим пользователем?
Сделайте это с помощью команды:
kubectl auth can-i use psp/psp
Теперь вы должны увидеть «no» в ответе.
Вы только что создали политику безопасности пода Kubernetes, присвоили ей RBAC и протестировали ее, чтобы убедиться, что политика действительно работает.
Источник: https://sidmid.ru/kubernetes-создать-политику-безопасности-rbac/