Почему инфраструктуре нужны собственные политики
У вас есть отличный CI/CD пайплайн. Приложение собирается, тестируется и разворачивается без проблем. Команда уверенно выкатывает изменения несколько раз в день. А затем кто-то открывает pull request, чтобы добавить security group в AWS. Им нужно, чтобы приложение было доступно из интернета. В спешке они открывают порт 22 на 0.0.0.0/0. Теперь любой человек в мире может попытаться подключиться по SSH к вашему серверу. Через минуты боты начинают подбирать пароли.
Это не гипотетический сценарий. Это происходит каждый день в организациях, которые управляют инфраструктурой без защитных барьеров.
Ваш пайплайн приложения может быть идеальным. Но ваше приложение не работает в вакууме. Оно работает на серверах, базах данных, балансировщиках нагрузки, сетях и хранилищах. Эти ресурсы нужно создавать, настраивать и поддерживать. И инфраструктурные ресурсы несут риски, которые принципиально отличаются от рисков кода приложения.
Проблемы, которые решают инфраструктурные политики
Давайте рассмотрим несколько типичных сценариев из реальной практики команд.
Ошибки безопасности случаются под давлением. Разработчику нужно открыть доступ к API-эндпоинту. Он добавляет правило security group. В его голове это просто "чтобы приложение работало". Он не осознает, что только что открыл SSH для всего интернета. К тому времени, когда кто-то заметит, сервер может быть уже скомпрометирован.
Утечки бюджета тихи и накопительны. Инженер запускает EC2-инстанс для тестирования. Он выбирает самый большой тип инстанса, потому что он доступен. Нет никаких ограничений на выбор. Инстанс работает неделю, прежде чем кто-то замечает. Когда приходит ежемесячный счет за облако, финансовый отдел видит неожиданный всплеск. Один забытый инстанс съел бюджет, который должен был пойти на другое.
Хаос в именовании усложняет операции. У каждой компании есть свои правила именования ресурсов: префикс проекта, окружение, регион. Но без принудительного соблюдения каждый называет ресурсы по-своему. Когда другой команде нужно найти ресурс для отладки, они не могут понять, где что. Когда скрипты автоматизации парсят имена ресурсов, они ломаются из-за несоответствия формата.
Нарушения комплаенса дороги. Ваша компания может быть обязана соблюдать PCI DSS, HIPAA или SOC 2. Эти стандарты требуют определенных controls на уровне инфраструктуры. Если кто-то случайно создаст ресурс вне разрешенного региона или сохранит данные в незашифрованном бакете, компания может столкнуться со штрафами или потерей сертификаций.
Обучение и стандартные операционные процедуры не могут предотвратить эти проблемы в одиночку. Люди ошибаются, особенно под давлением дедлайнов. Вам нужен автоматизированный механизм, который выявляет нарушения до того, как они произойдут.
Что на самом деле означает инфраструктурная политика
Инфраструктурная политика — это набор правил, которые определяют, что разрешено, а что запрещено при создании или изменении инфраструктурных ресурсов. Эти правила — не документы, приколотые к стене. Они машиночитаемы, автоматически проверяются в вашем пайплайне и дают прямую обратную связь разработчику, вносящему изменения.
Воспринимайте это как защитный барьер. Барьер не мешает вам ехать. Он удерживает вас на дороге, чтобы вы могли ехать быстрее, не боясь упасть с обрыва. Хорошие инфраструктурные политики работают так же. Они позволяют командам двигаться быстро, потому что они знают безопасные границы. Им не нужно бояться совершить ошибку, потому что политика предупредит их до того, как ошибка попадет в продакшн.
Почему политик для приложения недостаточно
У вас уже могут быть политики для кода приложения. Правила линтинга. Требования к code review. Пороги покрытия тестами. Это важно, но это не покрывает инфраструктуру.
Код приложения и инфраструктура имеют разные профили рисков:
- Баг в приложении обычно влияет на пользователей. Ломаются функции. Появляются ошибки. Повреждаются данные.
- Ошибка в инфраструктуре может иметь более широкое влияние. Облачные расходы могут взлететь. Порты могут открыться для всех. Данные могут утечь. Ресурсы могут нарушить правила комплаенса.
Влияние не только техническое. Оно финансовое и юридическое. Один неправильно настроенный S3-бакет может раскрыть данные клиентов и повлечь регуляторные штрафы. Один избыточно большой инстанс может тратить тысячи долларов в месяц.
Инфраструктурные политики напрямую адресуют эти риски. Они проверяют неправильные конфигурации безопасности, нарушения бюджета, правила именования, требования к тегированию и правила комплаенса. Они запускаются как часть вашего инфраструктурного пайплайна до того, как любое изменение будет применено.
Как политики вписываются в ваш рабочий процесс
Самый эффективный способ внедрения инфраструктурных политик — через ваш CI/CD пайплайн. Когда кто-то открывает pull request, изменяющий инфраструктурный код, пайплайн запускает проверки политик вместе с обычными тестами. Если политика нарушена, пайплайн падает. Разработчик получает четкое сообщение о том, какое правило было нарушено и как это исправить.
Диаграмма ниже показывает, как проверки политик интегрируются в типичный инфраструктурный пайплайн:
У этого подхода есть несколько преимуществ:
- Ранняя обратная связь. Разработчики узнают о проблемах до того, как изменения попадут в продакшн.
- Единообразное применение. Каждое изменение проходит одни и те же проверки. Никаких исключений.
- Аудируемый след. Вы можете видеть, какие изменения прошли или не прошли проверки политик.
- Постепенное внедрение. Вы можете начать с нескольких критических политик и расширять их со временем.
Некоторые команды беспокоятся, что политики замедлят их работу. На практике происходит обратное. Когда команды знают границы, они двигаются быстрее. Им не нужно останавливаться и спрашивать "Это разрешено?" или ждать проверки безопасности. Политика отвечает на эти вопросы автоматически.
Практический чеклист для начала работы
Если вы новичок в инфраструктурных политиках, вот краткий список, который поможет вам начать:
- Начните с безопасности. Заблокируйте публичные SSH, RDP и порты баз данных. Требуйте шифрование данных в покое и при передаче. Ограничьте разрешения IAM до минимально необходимых.
- Добавьте контроль затрат. Ограничьте разрешенные типы инстансов. Установите максимальные размеры ресурсов. Требуйте автоматическую остановку для непродукционных ресурсов.
- Внедрите правила именования и тегирования. Требуйте единообразные имена ресурсов. Обязательно используйте теги для владельца, окружения и центра затрат.
- Проверяйте правила комплаенса. Ограничьте разрешенные регионы. Требуйте определенные настройки шифрования. Блокируйте ресурсы, нарушающие регуляторные стандарты.
- Интегрируйте в пайплайн. Запускайте проверки политик на каждый pull request. Останавливайте сборку при нарушениях. Предоставляйте понятные сообщения об ошибках.
Начните с самых критических политик. Добавляйте новые по мере того, как команда привыкает. Цель — не заблокировать каждую возможную ошибку. Цель — предотвратить те, которые наносят наибольший ущерб.
Конкретный вывод
Ваш пайплайн приложения — это только половина истории. Инфраструктура, на которой работает ваше приложение, нуждается в собственном наборе автоматизированных защитных барьеров. Без них один неправильно настроенный ресурс может стоить денег, раскрыть данные или нарушить комплаенс. Инфраструктурные политики превращают эти риски в автоматические проверки, которые выявляют проблемы до того, как они произойдут. Начните с безопасности и затрат. Добавьте именование и комплаенс. Интегрируйте их в свой пайплайн. Ваша команда будет двигаться быстрее, потому что будет знать, что границы безопасны.