Урок 2.2 — Политики безопасности и соответствия стандартам
Файлы
| Файл | PSS профиль | Описание |
|---|---|---|
disallow-privileged-containers.yaml |
Baseline | Запрет privileged: true |
disallow-dangerous-capabilities.yaml |
Baseline | Запрет опасных capabilities |
require-drop-all-capabilities.yaml |
Restricted | Обязательный drop: [ALL] |
require-run-as-non-root.yaml |
Restricted | Запрет запуска от root |
disallow-host-namespaces.yaml |
Baseline | Запрет hostNetwork/PID/IPC/Path |
require-seccomp-profile.yaml |
Restricted | Обязательный seccomp |
restrict-automount-sa-token.yaml |
CIS | Отключение автомонтирования токена |
Стратегия внедрения (поэтапно)
Этап 1 — Аудит (неделя 1–2)
# Применить все политики в режиме Audit
for f in *.yaml; do
kubectl apply -f "$f"
done
# Подождать 5 минут для background scan, затем:
kubectl get policyreports -A -o json | \
jq -r '[.items[].results[] | select(.result == "fail") | .policy] |
group_by(.) | map({policy: .[0], count: length}) |
sort_by(-.count)[] | "\(.count)\t\(.policy)"'
Этап 2 — Оценка нарушений
# Детали нарушений по конкретной политике
POLICY="disallow-privileged-containers"
kubectl get policyreports -A -o json | \
jq --arg p "$POLICY" \
-r '.items[] | .metadata.namespace as $ns |
.results[] | select(.policy == $p and .result == "fail") |
"\($ns)/\(.resources[0].name): \(.message)"'
Этап 3 — Тестирование через Kyverno CLI
# Проверить под с нарушениями
kyverno apply . \
--resource test-resources/pod-insecure.yaml \
--table
# Проверить корректный под
kyverno apply . \
--resource test-resources/pod-secure.yaml \
--table
Этап 4 — Перевод в Enforce
# По одной политике
kubectl patch clusterpolicy disallow-privileged-containers \
--type merge \
-p '{"spec":{"validationFailureAction":"Enforce"}}'
Тестовые ресурсы
# Под с нарушениями (должен быть отклонён)
kubectl apply -f test-resources/pod-insecure.yaml
# Безопасный под (должен пройти)
kubectl apply -f test-resources/pod-secure.yaml