IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM   Привет Хабр! Поговорим о безопасности в k8s, и начнем с безопасности подов, как базового строительного блока нашего кластера. Старые версии Kubernetes поставлялись с функцией Pod Security Policies (PSP). Политики безопасности Pod — это концепция, которая помогает обеспечить соблюдение стандартов безопасности для объектов Pod. Kubernetes 1.21 устарел от политик безопасности Pod и представил заменяющую функциональность Pod Security Admission (PSA). PSA определяет, каким стандартам безопасности Pod (PSS) следует следовать. PSS определяет ряд политик безопасности, от строго ограничивающих до строго разрешающих. Однако в релизе Kubernetes 1.25 политики безопасности подов полностью удалены. Сейчас мы сосредоточимся только на допуске к безопасности пода. PSA включен по умолчанию в Kubernetes 1.23, однако нам нужно будет указать, какие поды должны соответствовать стандартам безопасности. Все, что вам нужно сделать, чтобы включить функцию PSA, — это добавить метку определенного формата в пространство имен. Все поды в этом пространстве имен должны будут следовать заявленным стандартам. Метка состоит из трех частей: префикса, мода и уровня. Префикс всегда использует заданное значение pod-security.kubernetes.io, за которым следует / (слэш). Мод определяет обработку нарушения. Наконец, уровень диктует степень стандарта безопасности, которого следует придерживаться. Пример такого лейбла может выглядеть так: Мод может в свою очередь принимать три значения: enforce: Нарушения приведут к отклонению запуска пода, audit: Создание пода будет разрешено. Нарушения будут добавлены в лог аудита, warn: Создание пода будет разрешено. Нарушения будут отображаться на консоли. Также у нас есть политики безопасности, определяемые уровнем, установленным для PSA: privileged: Полностью неограниченная политика, baseline: Минимально ограничительная политика, которая охватывает важные стандарты, restricted: Жестко ограниченная политика в соответствии с рекомендациями по усилению защиты подов с точки зрения безопасности. Давайте применим PSA к поду в пространстве имен psa. Здесь показано определение пространства имен и объявление соответствующей метки. Метка обеспечит соответствие PSS самым высоким стандартам безопасности. И создадим под, который нарушает наши установленные ограничения Нарушения будут отображены в консоли после запуска команды создания пода в пространстве имен. Как вы можете видеть из следующего, Pod не может быть создан: Нам нужно настроить параметры контекста безопасности Pod, чтобы они соответствовали очень строгим стандартам. Здесь показано примерное определение пода, которое не нарушает стандарт безопасности пода. Создание объекта Pod теперь работает должным образом. Далее мы создадим правило Pod Security Admission (PSA). В пространстве имен, которое называется Audited, мы создадим Pod Security Standard (PSS) с базовым уровнем, который должен отображаться на консоли.Указываем пространство имен с именем audited в файле psa-namespace.yaml. Мы устанавливаем метку PSA с baseline и режимом warn: Мы можем создать ошибку, используя следующую конфигурацию Pod в файле psa-pod.yaml. Манифест YAML устанавливает атрибут hostNetwork: true, что не разрешено для базового уровня: При создании пода появляется предупреждающее сообщение: Тем не менее, Pod будет создан. Мы можем предотвратить создание Pod, настроив PSA с уровнем restricted:PSA — это встроенная функция, включенная по умолчанию в Kubernetes версии 1.23 или выше. Его легко внедрить, он позволяет выбирать подходящий стандарт политики и может быть настроен для принудительного применения или просто регистрации нарушений. К сожалению, PSA применяется только к подам с заранее определенным набором политик. Вы не можете писать свои собственные правила, изменять обмен сообщениями, а также изменять объект Pod, если он не соответствует PSS. Напоследок хочу порекомендовать бесплатный вебинар, на котором вы узнаете из каких компонентов состоит Kubernetes, как они взаимодействуют и для чего нужны, а также подробно познакомитесь с базовыми объектами, которые существуют внутри любого кластера Kubernetes. Зарегистрироваться на бесплатный вебинар