Безопасность: пользователи, права и границы
Проверь не только разрешённые действия, но и запреты. Пойми, почему отдельный namespace ещё не означает полную изоляцию клиента.
Ещё не начатГде выполнять задания
Практика выполняется в kaas-security. Опасный Pod проверяется только без сохранения. Серверного зачёта этого упражнения пока нет.
Открыть практикум и терминал ↗Читай урок в этой вкладке, команды выполняй в соседней. Подстановки в угловых скобках сначала замени своими значениями. Ctrl+C останавливает наблюдение или учебный сервер.
Сокращения этого модуля: расшифровки и смысл
- API
- Application Programming Interface — программный интерфейс
- KaaS
- Kubernetes as a Service — Kubernetes как услуга
- OIDC
- OpenID Connect — протокол идентификации поверх OAuth 2.0
- PSA
- Pod Security Admission — проверка безопасности Pod при приёме
- PSS
- Pod Security Standards — стандарты безопасности Pod
- RBAC
- Role-Based Access Control — управление доступом на основе ролей
- UUID
- Universally Unique Identifier — универсальный уникальный идентификатор
В командах сохраняется точное написание параметров и имён. В тексте сокращения раскрываются в скобках.
Результат модуля
- Разделить аутентификацию, права и ограничения запуска.
- Проверить разрешённые действия и отказы для learner.
- Проверить restricted и квоту, описать границы клиента и отзыв доступа.
Перед началом: Устройство Kubernetes и безопасная лаборатория, Сеть: от имени приложения до ответа.
1. Кто ты и что тебе разрешено
Аутентификация устанавливает, кто обращается. Авторизация решает, что ему можно делать. Например, вход через GitLab подтверждает пользователя портала, а отдельная проверка прав разрешает ему открыть терминал. Нельзя заменять вторую проверку успешным входом.
RBAC (Role-Based Access Control — управление доступом на основе ролей) связывает пользователя или ServiceAccount с набором действий над объектами. Role работает в namespace, ClusterRole описывает также общие права; область фактического назначения зависит от RoleBinding или ClusterRoleBinding. ServiceAccount — служебная учётная запись программы, а не человек.
В упражнении learner сможет читать Pod только в kaas-security. Он не получит чтение Secrets и доступ к соседнему namespace. Проверять это нужно от его имени. Ответ от твоей административной учётной записи не доказывает права learner.
- Role
- Перечень разрешённых действий в пространстве имён.
- RoleBinding
- Связь личности с ролью.
- ServiceAccount
- Учётная запись программы внутри кластера.
- restricted
- Уровень требований к безопасному запуску Pod.
По шагам
- Вошли как человек с административными полномочиями.
- Проверили действие от имени learner: чтение Pod разрешено.
- Тем же именем проверили секреты и чужую область: оба действия запрещены.
2. Что разрешено запускать
Даже пользователь с правом создавать Pod может получить слишком много власти, если ему разрешены привилегированные контейнеры, файловая система хоста или опасные возможности ядра. Ограничения Pod дополняют права на создание объекта.
PSS (Pod Security Standards — стандарты безопасности Pod) описывают уровни требований. PSA (Pod Security Admission — проверка безопасности Pod при приёме) может отклонять неподходящие объекты по меткам namespace. Уровень restricted требует, среди прочего, непривилегированного пользователя, запрета повышения привилегий и ограниченных capabilities.
Квоты ограничивают потребление ресурсов, но не заменяют безопасность контейнеров. Сначала проверь принятие безопасного Pod, затем отклонение опасного через server-side dry-run: сервер проверит объект без сохранения. Не запускай привилегированный контейнер ради демонстрации.
3. Где заканчивается namespace
Namespace удобен для имён, ролей и квот. Но ядро ноды, сетевой плагин и часть объектов кластера общие. Ошибка в общем компоненте или доступ к ноде могут пересечь эту границу. Сетевая изоляция требует отдельно работающих и проверенных политик.
Tenant — клиент или команда, чьи ресурсы и права должны отделяться от других. Для доверенных команд может подойти один кластер с namespaces. Для недоверенного клиента могут понадобиться отдельный кластер, виртуальные машины и отдельные облачные полномочия. Решение начинается с модели угроз: кому доверяем и от чего защищаемся.
В KaaS (Kubernetes as a Service — Kubernetes как услуга) клиентский кластер не должен получать полномочия управляющего кластера или всего OpenStack. Выдаваемый kubeconfig — файл настроек подключения, который может содержать секреты. Его нельзя вставлять в заметки портала, коммиты или журнал ошибки.
4. Секрет имеет жизненный цикл
Credential — средство подтверждения полномочий, например ключ или токен. Нужны выдача с минимальными правами, срок действия, ротация и отзыв. Ротация заменяет действующий секрет, отзыв прекращает доступ. Проверяй фактический отказ старого доступа, а не только удаление записи в интерфейсе.
Secret Kubernetes по умолчанию хранит значения в кодировке base64; это не шифрование. Защита зависит также от доступа к программному интерфейсу, шифрования хранилища и резервных копий. Audit — журнал действий — должен помогать понять, кто что сделал, но не раскрывать сам секрет.
OIDC (OpenID Connect — протокол идентификации поверх OAuth 2.0) позволяет доверять проверенному провайдеру входа. Даже при нём приложение обязано проверять владельца каждой операции. Непредсказуемый идентификатор чужого объекта не является разрешением читать его.
Практика через терминал портала
Создай свою область и роль
Открой терминал. Прочитай файл: он создаёт только kaas-security, служебную учётную запись learner, роль и привязку. Административные роли кластера не меняются.
curl -fSLo /tmp/kaas-security.yaml https://test.igorhome.ru/static/learning/security-lab.yaml cat /tmp/kaas-security.yaml kubectl apply -f /tmp/kaas-security.yamlЧто должно получиться. Учебные объекты созданы в отдельном namespace. У него restricted и небольшая квота.
Если результат отличается
При Forbidden не расширяй права общему пользователю. Запиши, какого разрешения не хватает.
Проверь разрешение от нужного имени
--as просит сервер выполнить проверку от другой личности. Твоя исходная учётная запись должна иметь право impersonate. Это учебная проверка, не выдача бессрочного ключа.
kubectl auth can-i list pods -n kaas-security --as=system:serviceaccount:kaas-security:learner kubectl -n kaas-security get pods --as=system:serviceaccount:kaas-security:learnerЧто должно получиться. Ответ yes и разрешённое чтение пустого списка Pod.
Если результат отличается
Ошибка impersonate говорит о правах проверяющего, а не о правах learner. Не выдавай learner cluster-admin.
Проверь запреты
Отрицательный тест обязателен. Команды не выводят содержимое существующих секретов.
kubectl auth can-i get secrets -n kaas-security --as=system:serviceaccount:kaas-security:learner kubectl auth can-i list pods -n default --as=system:serviceaccount:kaas-security:learner kubectl auth can-i create deployments -n kaas-security --as=system:serviceaccount:kaas-security:learnerЧто должно получиться. Три ответа no. Сохрани только результаты проверок.
Если результат отличается
Если получил yes, проверь другие привязки к этой учётной записи. Разрешения RBAC (Role-Based Access Control — управление доступом на основе ролей) складываются.
Проверь безопасный шаблон
Попроси сервер проверить ограниченный Pod без его запуска.
kubectl -n kaas-security apply --dry-run=server -f https://test.igorhome.ru/static/learning/security-safe-pod.yamlЧто должно получиться. Объект принят в режиме server dry run, но работающий Pod не создан.
Если результат отличается
Если проверка безопасности отклонила объект, читай конкретное требование. Не отключай restricted.
Проверь запрет опасного запуска
Второй шаблон намеренно содержит privileged. Только проверка без сохранения; фактический контейнер не запускается.
kubectl -n kaas-security apply --dry-run=server -f https://test.igorhome.ru/static/learning/security-unsafe-pod.yamlЧто должно получиться. Сервер отклоняет объект с сообщением о restricted. Это ожидаемый отрицательный результат.
Если результат отличается
Успех означает, что запрет не доказан. Проверь метки namespace, режим enforce и исключения admission.
Увидь действие квоты
Квота этой области запрещает Service. Сначала прочитай её, затем проверь создание без сохранения.
kubectl -n kaas-security describe resourcequota kubectl -n kaas-security create service clusterip quota-demo --tcp=80:8080 --dry-run=serverЧто должно получиться. Создание отклонено из-за services: 0. Это отдельный механизм, не отказ RBAC (Role-Based Access Control — управление доступом на основе ролей).
Если результат отличается
Если проверяешь от learner, отказ будет раньше на правах. Для опыта квоты используй свою исходную учётную запись.
Опиши границы и отзыв
В заметках составь таблицу: пользователь портала, служебная учётная запись Kubernetes, облачная учётная запись. Для каждой запиши владельца, область прав, срок и процедуру отзыва. Реальные ключи не нужны.
kubectl -n kaas-security get role,rolebinding,serviceaccountЧто должно получиться. Есть конкретная модель угроз и план ротации. Ты отличаешь проверенный запрет от ещё не выполненного теста отзыва.
Если результат отличается
Не создавай токен без необходимости: проверка --as не требует публикации credentials.
Удали учебные объекты
Удали только созданный namespace. Затем проверь, что его роль больше не разрешает чтение.
kubectl delete namespace kaas-security --wait=true --timeout=120s kubectl auth can-i list pods -n kaas-security --as=system:serviceaccount:kaas-security:learnerЧто должно получиться. Учебные объекты удалены, ответ no. Это отзыв конкретной привязки, а не универсальный отзыв уже выданного внешнего доступа.
Если результат отличается
Если yes сохранился, найди дополнительную общую привязку; не считай очистку завершённой.
Открыть терминал ↗ · Скачать файлы лаборатории →
Файлы и подготовка к этой работе
Критерии готовности
Отмечай только то, что проверил на указанном стенде. Эти галочки сохраняются в браузере. Для готовых упражнений зачёт выдаёт отдельная серверная проверка практикума; остальные задания подтверждай журналом и доказательствами. Учебная модель не заменяет реальный облачный опыт.
Что сохранить в портфолио
- Журнал: исходное состояние → команда или действие → ожидаемый результат → фактическое наблюдение.
- Доказательства по критериям ниже: очищенный от секретов вывод, схема или ссылка на проверенный коммит.
- Отдельный список: что пока не запускалось, почему и какой стенд нужен для продолжения.
Проверь понимание
8 вопросов по этому модулю. Проходной результат — 7 из 8. После ответа — объяснения и ссылки на разделы, к которым стоит вернуться.
Пройти тест модуляОфициальные источники
Чек-листы уроков, заметки к ним и результаты тестов хранятся в этом браузере; для переноса используй экспорт. Автоматические проверки и журнал практикума сохраняются отдельно на сервере.