Бесплатно Экспресс-аудит сайта:

10.08.2021

Примеры выполнения требований ГОСТ Р 57580.1-2017 в средах контейнерной оркестрации на базе Kubernetes

Антон Гаврилов, руководитель направления DevSecOps Центра информационной безопасности компании «Инфосистемы Джет»

Введение

В качестве примера рассмотрим, как можно добиться выполнения стандарта ГОСТ Р 57580.1-2017 «Безопасность финансовых (банковских) операций. Защита информации финансовых организаций. Базовый набор организационных и технических мер». Мы выбрали этот ГОСТ, так как в нём содержится исчерпывающий список требований по ИБ (в том числе ― по повышению уровня ИБ виртуальных сред), которые в том или ином виде есть и в других стандартах. К тому же ГОСТ Р 57580.1-2017 актуален для финансовых организаций. А именно эти организации одними из первых начали использовать контейнеризацию, поэтому и выполнение требований регулятора в этой области может коснуться их в первую очередь.

Не стоит воспринимать эту статью как детальное руководство к действию. Во-первых, в разных организациях среды контейнерной оркестрации могут быть реализованы по-разному (отличаться могут оркестраторы и CNI, кто-то может использовать Service Mesh, кто-то ― нет, и т.д.). Во-вторых, нельзя создать универсальный для всех сред перечень мер по обеспечению безопасности: для каждой конкретной среды актуальным будет что-то своё. Поэтому в статье приведены примеры реализации определенных групп требований/мер и ссылки на дополнительные материалы, содержащие полезную информацию.

Статья состоит из следующих частей:

  • Часть 1: Общая информация о контейнерах и средах контейнерной оркестрации. В этой части приведено описание того, что такое контейнеры, где они хранятся и на чем запускаются.
  • Часть 2: ГОСТ Р 57580.1-2017, контейнеры и среды контейнерной оркестрации. Это основная часть, в которой описаны подходы к реализации соответствующих требований ГОСТ Р 57580.1-2017.
  • Часть 3: Краткое содержание статьи. Здесь приведены ключевые идеи статьи и таблица «Способы реализации мер Стандарта ГОСТ Р 57580.1-2017».
  • Часть 4: Ссылки на полезные материалы. Здесь приведены некоторые полезные материалы, которые можно использовать для обеспечения соответствия требованиям регуляторов.

Часть 1: Общая информация о контейнерах и средах контейнерной оркестрации

Контейнеры ― один из самых удобных способов упаковки программного обеспечения. Если упростить, то всё, что нужно для упаковки ― поместить в такой контейнер исходный код приложения, используемые зависимости и открыть необходимые порты. После этого использовать контейнер сможет любой, у кого есть Container Engine (например, Docker или CRI-O). При этом не нужно устанавливать интерпретаторы языков программирования, Java Runtime или другое «дополнительное» ПО, все это уже будет внутри контейнера.

С технической точки зрения, контейнер ― это виртуализация уровня операционной системы, которой не требуется гипервизор для работы. Контейнеры «легче» классических виртуальных машин. Хотя бы потому, что для контейнера не нужно устанавливать гостевую операционную систему.

Графически разница между «контейнеризацией» и «виртуализацией» представлена на рис. 11.



Рисунок 1: Общая разница между контейнеризацией и виртуализацией

Когда мы хотим «упаковать» приложение в контейнер, мы создаём образ этого контейнера. Образ (image) ― аналог шаблона виртуальной машины. Образ создается из Dockerfile ― конфигурационного файла, в котором мы описываем все необходимые параметры конфигурации (переменные окружения, порты, пользователей, установку и обновление пакетов, копирование файлов и т.д.). Пример образа приведен на рис. 2.

Рис. 2. Пример Dockerfile

Для того, чтобы выполнить централизованное хранение образов контейнеров, используются реестры. Грубо говоря, реестр представляет собой дерево папок. Кроме самих образов, в реестре хранятся и их более старые версии, к которым можно вернуться, если что-то пошло не по плану.

Обычно, если в организации используются контейнеры, рано или поздно встаёт вопрос о том, как ими эффективно управлять. Микросервисные архитектуры, постоянное наращивание функционала, запуск новых продуктов ― всё это ведёт к увеличению числа контейнеров, а значит, и к усложнению управления ими. Для преодоления «трудностей масштабирования» были созданы среды контейнерной оркестрации, которые еще называются оркестраторами (например, Kubernetes, Red Hat OpenShift, Rancher, VMware Tanzu, HashiCorp Nomad и т.д.). Они позволяют контролировать такие аспекты, как:

  • запуск контейнеризованных приложений в кластере;
  • организация сетевого взаимодействия;
  • масштабирование контейнеров (например, при увеличении нагрузки/трафика на приложение);
  • поддержка актуального состояния приложения в соответствии с желаемой конфигурацией;
  • распределение ресурсов и балансировка нагрузки между контейнерами;
  • балансировка нагрузки между контейнерами и т.д.

Далее мы будем рассматривать только один оркестратор ― Kubernetes ― без каких-либо дополнительных решений (например, без Service Mesh). Мы выбрали именно этот оркестратор по двум причинам.

  • Во-первых, Kubernetes ― одно из самых популярных решений для управления большим количеством контейнеров (если не самое популярное).
  • Во-вторых, большинство альтернатив созданы на базе Kubernetes, поэтому многие примеры и тезисы в этой статье будут актуальны для других оркестраторов (хоть и с некоторой адаптацией).

Если упростить, то Kubernetes состоит из двух основных компонентов (каждый из которых также представляет из себя некий набор сервисов): Control Plane и Node Components. Как видно из названия, Control Plane отвечает за принятие решений и управление нагрузками кластера (например, scheduling, запуск новых pod2, миграция pod и т.д.). Node Components, в свою очередь, отвечает за запуск pod и их работоспособность на конкретной node.

Kubernetes устанавливается как кластер среды контейнерной оркестрации, представляющий из себя набор нод:

  • Master Node, на который устанавливается Control Plane
  • Worker Node, на который устанавливается Node Components

Node Components, в свою очередь, отвечают за запуск pod и их работоспособность на конкретной ноде кластера.

Общая схема кластера представлена на рис. 3

Рис. 3. Кластер среды контейнерной оркестрации, обобщенная схема

Общая схема кластера и развернутых на нем приложений будет выглядеть следующим образом (рис. 4):

Рис. 4. Кластер среды контейнерной оркестрации, расширенная схема

Часть 2: Стандарт ГОСТ 57580.1-2017, контейнеры и среды контейнерной оркестрации

ГОСТ 57580.1-2017 устанавливает требования для следующих процессов (направлений) защиты информации:

  • Обеспечение защиты информации при управлении доступом
  • Обеспечение защиты вычислительных сетей
  • Контроль целостности и защищенности информационной инфраструктуры
  • Защита от вредоносного кода
  • Предотвращение утечек информации
  • Управление инцидентами защиты информации
  • Защита среды виртуализации
  • Защита при осуществлении удаленного доступа с использованием мобильных (переносных) устройств

Для того, чтобы выполнить регуляторные требования, необходимо провести подготовительную работу. Важно определить, какие меры нужно предпринять, чтобы обеспечить предусмотренный ГОСТ 57580.1-2017 уровень защиты. Также необходимо решить, какие их этих мер применимы к конкретной среде контейнерной оркестрации. После составления списка актуальных для организации мер важно определить их «точку приложения». Например, часть из них будет актуальна для нод, на которых установлен оркестратор, часть ― непосредственно для оркестратора, а часть ― для контейнеров.

Далее на примерах рассмотрим меры ГОСТ 57580.1-2017 и то, как их можно реализовать в среде контейнерной оркестрации.

2.1. Обеспечение защиты информации при управлении доступом

Учетные записи (УЗ) в среде контейнерной оркестрации бывают нескольких типов: учетные записи субъектов (субъектами могут быть разработчики или эксплуатационный персонал) и сервисные учетные записи. Управление этими двумя типами УЗ осуществляется по-разному. Сервисные управляются средствами самого кластера, учетные записи субъектов (пользовательские) ― с использованием сторонних механизмов, файлов, X.509 сертификатов, посредством интеграции с внешними системами, например, LDAP (тут важно отметить, что интеграция Kubernetes с LDAP не является нативной, для её реализации потребуются дополнительные действия).

Что касается аутентификации пользователей, оптимальным способом управления паролями будет интеграция Kubernetes со службой каталогов (например, MS AD). В этом случае эксплуатационный персонал/разработчики будут использовать доменные учетные записи в соответствии с ролевой моделью на уровне кластера. А реализация требований ГОСТ 57580.1-2017 будет осуществляться на уровне MS AD.

Если говорить об аутентификации сервисных учетных записей, дело обстоит иначе. В Kubernetes можно создать объект Secret для хранения секретов (аутентификационных данных) в «закодированном» виде. Для создания таких объектов применяется base64. Поэтому хорошей практикой считается использование сторонней системы, которая будет управлять секретами, хранить их в зашифрованном виде и выдавать через REST-запросы. Примером таких систем могут быть HashiCorp Vault, CyberArk Conjur. При этом на уровне внешней системы могут задаваться ротация и требования к сервисным УЗ. А кластер и развернутые на нем приложения становятся «пользователями», которые обращаются за секретами во внешнюю систему и не хранят их локально.

Для корректной реализации принципа минимальных привилегий для доступа к кластеру можно воспользоваться механизмом RBAC (Role Based Access Control). Он позволяет настроить возможности пользователей и сервисов на основе ролевой модели как на уровне отдельно взятого пространства имен (namespace), так и на уровне кластера.

Создание ролей и последующее их распределение состоит из нескольких этапов:

  • Определение объектов Kubernetes, с которыми взаимодействует роль (pod, services, secrets и т.д.).
  • Определение возможностей роли (получать информацию, создавать объекты, изменять объекты и т.д.).
  • Определение «носителей» роли (пользователь, сервис).

Правильно выстроенная ролевая модель повысит общий уровень ИБ и может использоваться для реализации требований стандарта ГОСТ 57580.1-2017.

Важно помнить, что помимо создания ролей или контроля аутентификации/авторизации необходимо выстроить процессы регулярного пересмотра и контроля доступов. Например, важно постоянно проводить проверки, чтобы вовремя обнаруживать «мертвые учетные записи» или несвоевременный отзыв повышенных полномочий, которые были предоставлены пользователю/сервису временно для реализации определенной задачи. В качестве технической реализации для этого можно использовать либо встроенные механизмы Kubernetes, либо сторонние утилиты. Например, Open Source утилиту Kubi-Scan.

2.2. Обеспечение защиты вычислительных сетей

Управление сетевой безопасностью на уровне кластера среды контейнерной оркестрации незначительно отличается от управления сетевой безопасностью в целом.

Кластер важно разместить в безопасном сегменте сети, на границе которого нужно установить необходимые средства сетевой защиты, а доступ в интернет контролировать специализированными решениями. При этом нужно создать несколько окружений, например: Dev, Test, Prod. Количество окружений может быть разным в разных организациях. Рекомендуется использовать несколько кластеров: как минимум, отдельный кластер нужен будет для тестирования.

Оптимально ограничить возможность подключения к отдельным нодам напрямую и реализовать управление всем кластером через Master Node. Для взаимодействия компонентов Kubernetes, расположенных на Worker Node (например, kubelet, kube-proxy) с компонентами Master Node (например, kube-apiserver) можно использовать TLS, это повысит общий уровень защищенности кластера.

Ситуация несколько отличается, если посмотреть на сетевую безопасность на уровне оркестрации. По умолчанию в Kubernetes отсутствует какое-либо сегментирование, и любой pod может общаться с любым pod в любом namespace. Однако в Kubernetes можно реализовать Network Policy (сетевые политики), которые позволят реализовать достаточно гранулярное сегментирование сети. Главное ― при выборе Cluster Network Interface (CNI) убедитесь, что решение поддерживает такой функционал. К счастью, он есть у большинства представленных на рынке CNI (например, Calico, Cilium, Romana, Weave).

Кроме того, с помощью Network Policy можно контролировать Ingress (входящий трафик) и Egress (исходящий трафик) и реализовать подход «белого списка»: все, что не указано в Network Policies, по умолчанию будет считаться запрещенным.

Для того, чтобы подготовить Network Policy, которая не навредила бы работоспособности приложения, необходимо понять, как именно и с чем это приложение взаимодействует как внутри кластера, так и за его пределами. Такая информация, как правило, есть у разработчиков. Они могут помочь в составлении корректной модели сетевого взаимодействия приложения, на основе которой ИБ-специалисты подготовят Network Policy. Важно учитывать, что в работе приложений постоянно происходят изменения. Поэтому нужно чётко выстроить процесс актуализации Network Policy внутри организации и назначить ответственных за реализацию этого процесса.

Еще один способ обеспечить сетевую безопасность ― реализовать межсетевое экранирование между контейнерами. Для этого можно использовать внешние решения. Некоторые из таких решений позволяют использовать L3/L4 фильтрацию трафика при взаимодействии микросервисов приложений.

Дополнительно можно использовать Service Mesh (Istio, LinkerD), которые позволяют реализовать mTLS при взаимодействии между pods.

Рассмотрим ещё один, косвенный, способ сетевой защиты. По умолчанию Kubernetes выбирает, на какую node разместить pod/container в соответствии с внутренней логикой работы, явных ограничений/приоритетов нет (за исключением ограничения запуска контейнеров на Master Node, кроме системных). Однако есть возможности контроля запуска определенных pods/container на определенных node за счет NodeSelector, Taints/Tolerations и Affinity. Указанные способы явно не относятся к средствам контроля сетевого взаимодействия, но частично и их можно использовать, например, для выделения определенной node, на которой будут запускаться только критичные приложения.

2.3. Контроль целостности и защищенности информационной инфраструктуры

Устранять уязвимости на нодах кластера можно в соответствии с выстроенным в компании процессом управления уязвимостями. По сути, ноды ― это обычные вычислительные мощности под управлением ОС семейства Linux. Это значит, что можно придерживаться стандартного подхода, то есть проводить сканирование, приоритизацию, постановку задач на устранение, тестирование обновлений, обновление.

То же самое может быть применимо и к оркестратору. Но стоит помнить, что Kubernetes обновляется на регулярной основе, в него постоянно добавляется новый функционал, исправляются недоработки. Поэтому будет особенно важно выстроить внутренний процесс по поддержке его актуальной версии.

Также важно отметить, что Kubernetes реализует концепт «неизменяемой инфраструктуры» (immutable infrastructure). Это означает, что любые изменения, которые совершались с pod/container напрямую, не будут сохранены в случае перезапуска контейнера. В случае перезапуска pod Kubernetes будет создавать новый pod/container на основе используемого в спецификации образа (image). Таким образом, единственный способ повлиять на конфигурацию pod/container ― модифицировать сам образ.

Контроль целостности образов по умолчанию в Kubernetes не реализован. Для решения этой задачи есть несколько подходов.

  • Процессный подход подразумевает выстраивание процесса сборки, хранения и использования образов, который исключает воздействие человека. При этом важно делать фокус на максимальную автоматизацию и корректно настроенную ролевую модель доступа. Процесс может выглядеть следующим образом:
    • Разработчик делает commit в SCM (систему управления исходным кодом), расположенную в среде TEST.
    • Запускается сборка в CI-системе в среде TEST, собирается образ и помещается в реестр. Допустим, что возможность делать push в реестр есть только у технологической УЗ агента CI-системы (Runner’a). Кроме нее, доступ есть только у администраторов (по определению). Это исключает возможность произвольного помещения образа в реестр.
    • Дальше происходит репликация реестров PROD-TEST (т.е. образы из реестра в TEST автоматически загружаются в реестр PROD), при корректной настройке ролевых моделей можно исключить влияние человека.
    • В PROD стартует процесс CD (развертывания), который использует образы из соответствующего реестра.

    Таким образом создается «виртуальный» контроль целостности: образы сможет изменить только авторизированный пользователь, обладающий соответствующими правами. В примере, рассмотренном выше, таким пользователем является технологическая УЗ, которая используется в CI/CD-конвейере.

  • Технический подход подразумевает использование сторонних Open Source решений, например, Notary и OPA Gatekeeper. Задача Notary ― сформировать и сохранить подпись образов, которые прошли все проверки. Задача OPA Gatekeeper ― проверять наличие подписи у образов перед запуском контейнеров. В случае, если подпись не будет обнаружена, контейнер не сможет запуститься. Альтернативный вариант ― использование наложенных средств защиты, обладающих функционалом контроля доверенных реестров и образов.

Можно комбинировать процессный и технический подходы к контролю целостности образов. Это позволит гарантировать, что «случайные» образы не будут использованы для запуска контейнеров.

2.4. Защита от вредоносного кода

Установка антивирусов ― не лучшая практика как с точки зрения нод, так и с точки зрения pod/container. Для нод ― антивирусы могут привести к нарушению в логике работы оркестратора, а в pod/container большинство «классических» решений попросту невозможно встроить.

Поэтому для защиты от вредоносного кода стоит использовать компенсирующие меры, применение которых допускается стандартом ГОСТ Р 57580.1-2017, например, SELinux и AppArmor (применительно к ОС семейства Linux). Однако стоит помнить, что SELinux/AppArmor не являются 100% заменой антивирусным решениям, так как не обладают функционалом идентификации вирусов и иного вредоносного ПО.

Обеспечить еще большую защиту на уровне pod/container можно с использованием Security Context3 . Security Context помогает проанализировать контейнеры и то, что они делают, для того, чтобы гранулярно дать им только те возможности и привилегии, которые им необходимы, и запретить все остальные. Благодаря такому подходу вирусы просто не могут осуществлять свои вредоносные действия.

С помощью Security Context можно реализовать:

  • Контроль запуска в привилегированном режиме.
  • Контроль запуска от требуемой учетной записи (UID/GUID). Например, если требуется, чтобы контейнер запускался от УЗ, UID которой больше 1000, это можно явно указать в Dockerfile или при формировании конфигурации pod/container через runAsUser, где явно указать желаемый параметр.
  • Контроль разрешенных Linux Capabilities. Контейнерам, из-за их «условной ограниченности», далеко не всегда требуется полный перечень Linux Capabilities. Например, NET_RAW иногда бывает избыточна, а ее могут использовать, например, для ARP-spoofing.
  • Управление Privilege Escalation процессов внутри контейнера.
  • Контроль возможности записи в файловую систему ноды, на которой создан pod/container.

Есть несколько вариантов формирования Security Context:

  • Самостоятельно или с помощью разработчика собрать нужную информацию для формирования Security Context. При этом важно разобраться, что делает то или иное приложение, как оно работает, какие процессы запускаются внутри контейнера, какие сетевые взаимодействия используются.
  • Второй вариант более грубый, но более «быстрый». Запускаем контейнер с минимальными возможностями и анализируем: из-за чего происходят ошибки, чего контейнеру не хватает для корректного функционирования. С учетом собранной информации начинаем «ослаблять» настройки и повторяем действие, пока контейнер не начнет работать.

В дополнение к аналитике с использованием Security Context можно использовать внешние средства защиты информации. Во-первых, те, которые позволят автоматизировать процесс проверки настроек нод и pod/container на соответствие лучшим практикам (как правило, используются CIS Benchmarks). Во-вторых, те, которые помогают идентифицировать наличие вредоносных файлов, чтобы удалить их.

Такие средства защиты также позволяют обеспечить безопасность контейнеров в runtime, что не может быть сделано силами оркестратора. Большинство решений позволяет реализовать поведенческую аналитику и формировать правила контроля ИБ контейнеров на основании заранее разработанных моделей, которые описывают «нормальное поведение контейнера». Все, что будет отличаться от такой модели, будет расцениваться, как событие ИБ. А если выставить режим «enforce», любая «аномальная» активность будет заблокирована.

2.5. Предотвращение утечек информации

Kubernetes не предполагает каких-либо специальных возможностей/инструментов для контроля потенциальных каналов утечек.

Для многих таких каналов (например, электронная почта, машинные носители информации, внешние файлообменники) подход к защите не отличается от «классических» подходов, применяемых в организации.

2.6. Обнаружение инцидентов защиты информации и реагирование на них

На уровне нод процесс мониторинга ИБ аналогичен мониторингу ИБ классических элементов ИТ-инфраструктур: журналы нод просто перенаправляются в SIEM-систему для идентификации инцидентов.

Что касается уровня кластера, то для того, чтобы анализировать события, рекомендуется настроить Audit Policy (политику аудита). Эта политика позволяет «фильтровать» поток событий, который генерируется в кластере, чтобы идентифицировать подозрительные события, например:

  • Binding роли Cluster Admin к какому-либо пользователю
  • Запуск привилегированных контейнеров
  • Манипуляции с секретами
  • Создание pods в определенных namespaces (например, в kube-system)

Инструмент Audit Policy достаточно гибкий и может быть использован для фильтрации потока событий, который генерируется большим количеством сущностей Kubernetes. Эти события могут быть направлены в SIEM-систему и использоваться как для идентификации инцидентов ИБ, так и для проведения расследований. Для определения на уровне кластера перечня событий, которые необходимо передавать в SIEM, можно воспользоваться несколькими подходами:

  • Моделирование угроз. Определяем актуальные угрозы для конкретного кластера и составляем перечень событий, которые могли бы помочь идентифицировать атаку или ее этапы. Именно эти события и нужно будет собирать и анализировать.
  • Анализ процессов. Этот подход можно применять организациям, у которых есть выстроенные процессы управления средой контейнерной оркестрации. Подход подразумевает, что в SIEM-систему будут передаваться события, которые выбиваются из стандартных процессов. Например, каждая команда работает в своем namespace. Namespace создается командой эксплуатации на основании согласованной заявки в Service Desk. Если разработчики сами создают новый Namespace, это может стать поводом для уточнения ― почему так получилось? Откуда у них полномочия на это? Данные об отклонении от стандартного процесса должны быть переданы в SIEM-систему. Аналогично такой подход может применятся и к другим процессам, например, к созданию Cluster Role/Cluster Bindings.

В случае использования наложенных средств защиты рекомендуется направлять в SIEM-систему журналы о нарушении установленных политик безопасности, чтобы обогащать общую информацию о том, что происходит в кластере среды контейнерной оркестрации.

Кроме того, на рынке есть специализированные решения для идентификации инцидентов ИБ на основании анализа событий ИБ в кластере среды контейнерной оркестрации.

2.7. Защита среды виртуализации

В настоящее время отсутствует позиция регуляторов, в том числе Банка России, относительно того, является ли контейнер виртуальной машиной или нет. Есть аргументы «за», есть аргументы «против».

Если допустить, что контейнер представляет собой виртуальную машину, то большинство требований ГОСТ Р 57580.1-2017 можно будет без труда выполнить. Давайте рассмотрим эти требования подробнее:

  • Для организации идентификации, аутентификации, авторизации подходы и практики описаны в разделе «Обеспечение защиты информации при управлении доступом».
  • Для организации сегментации и межсетевого экранирования вычислительных сетей, предназначенных для размещения виртуальных машин, и серверных компонент виртуализации подходы и практики описаны в разделе «Обеспечение защиты вычислительных сетей».
  • Что касается организации защиты образов виртуальных машин, то в данном случае образом виртуальной машины будет образ контейнера. Подходы и практики обеспечения ИБ для образов контейнера описаны в разделах «Контроль целостности и защищенности информационной инфраструктуры» и «Защита от вредоносного кода».
  • Для регистрации событий защиты информации, связанных с доступом к виртуальным машинам и серверным компонентам виртуализации, подходы и практики описаны в разделе «Обнаружение инцидентов защиты информации и реагирование на них».

Главное отличие требований к защите контейнерной оркестрации в том, что среди них нет требований к защите гипервизора, так как он не используется.

2.8. Защита при осуществлении удаленного доступа с использованием мобильных (переносных) устройств

В этой сфере ГОСТ Р 57580.1-2017 предусматривает меры, реализация которых не зависит от специфики сред контейнерной оркестрации. Поэтому эти меры могут быть реализованы в соответствии с общим подходом организации по управлению удаленным доступом и его защите при использовании мобильных (переносимых) устройств.

Часть 3: Краткое содержание статьи

Если обобщить, то получается:

  • Контейнеры запускаются из образов, для каждого из которых есть «конфигурационный файл». Централизованное хранение образов реализуется с использованием реестров. Для управления большим количеством контейнеров целесообразно использовать специальные решения ― оркестраторы.
  • Оркестраторы (на примере Kubernetes) состоят из нескольких сущностей: Control Plane, ответственной за управление нагрузками, и Node Components, ответственными за запуск pods на nodes (для упрощения допустим, что pod представляет собой синоним контейнера, хотя это и не совсем так). Control Plane размещаются на Master Node кластера, Node Components ― на Worker Node кластера. Master и Worker nodes могут быть как физическими, так и виртуальными машинами.
  • Реализация мер, указанных в процессах стандарта ГОСТ Р 57580.1-2017 в средах контейнерной оркестрации, возможна как с использованием штатных механизмов, предоставляемых Kubernetes, так и с использованием наложенных средств защиты. Одной из важных задач, которую требуется решить при планировании приведения среды контейнерной оркестрации в соответствие требованиям регуляторов ― к чему именно применять требование: node, orchestrator, pod/container? Как именно будут меняться способы реализации мер в зависимости от рассматриваемого объекта? Сводная информация о процессах и о том, при помощи чего можно выполнять предписанные в них меры, приведена в табл. 1. Таблица не является избыточной. Основной целью, которой хотелось достичь настоящей статьей, являлось показать, как это можно сделать, на что обратить внимание, какой инструментарий нужен. Написать детальное универсальное руководство по приведению среды контейнерной оркестрации в соответствие требованиям стандарта ГОСТ Р 57580.1-2017 не представляется возможным хотя бы потому, что реализация кластеров сильно варьируется от организации к организации.
  • Важно помнить, что, помимо технологий, важно обращать внимание и на процессный аспект ― просто написать политику/настроить роль недостаточно. В контейнерных инфраструктурах все меняется достаточно часто и быстро, поэтому необходимо выстроить процесс поддержания реализованных мероприятий по ИБ в актуальном состоянии.

Табл. 1. Способы реализации мер Стандарта ГОСТ Р 57580.1-2017

Часть 4: Ссылки на полезные материалы

Ниже приведены ссылки на упоминаемые в статье возможности Kubernetes, используемые для повышения уровня защищенности кластера, а также на материалы, подготовленные компанией Red Hat ― разработчика продукта OpenShift и одного из главных участников проекта Kubernetes:

  • Kubernetes Authentication ― https://kubernetes.io/docs/reference/access-authn-authz/authentication/
  • RBAC ― https://kubernetes.io/docs/reference/access-authn-authz/rbac/
  • Network Policy ― https://kubernetes.io/docs/concepts/services-networking/network-policies/
  • Security Context ― https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  • Audit Policy ― https://kubernetes.io/docs/tasks/debug-application-cluster/audit/
  • Обзор Service Meshes (Istio + Linkerd) ― https://dzone.com/articles/service-mesh-comparison-istio-vs-linkerd
  • Использование нескольких сетей в pods (Red Hat OpenShift) ― https://docs.openshift.com/container-platform/4.7/networking/multiple_networks/understanding-multiple-networks.html
  • Гайд по безопасности от Red Hat (IBM) для Red Hat OpenShift ― https://www.redhat.com/rhdc/managed-files/cl-openshift-security-guide-ebook-us287757-202103.pdf

1 https://www.docker.com/resources/what-container

2Pod – базовый объект Kubernetes – группа из одного или нескольких контейнеров и совместно используемых ресурсов для этих контейнеров

3Security Context прописываются в YAML-конфигурацию pod’a приложения. Политики, позволяющие реализовать централизованное управление Security Context, были исключены из версии Kubernetes 1.21 ( https://kubernetes.io/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/ ), однако в некоторых оркестраторах, например, RedHat OpenShift, они продолжают свое существование.