Дрейф в Terraform: плохой, уродливый и Черный Лебедь

Дрейф в Terraform: плохой, уродливый и Черный Лебедь
Photo by Mitchell Luo / Unsplash

"Дрейф в Terraform" - это хорошо известная проблема. Он возникает, когда изменения происходят с ресурсами вашей облачной среды, которые не были вызваны изменениями в Terraform, и приводит к различиям между тем, что фактически настроено в вашем облаке, и тем, что объявлено в вашем коде Terraform. Другими словами, ваше облако "отклонилось" от вашего Terraform. Эти различия могут возникнуть через следующие каналы:

  • Инженеры вручную вносят изменения в ресурсы через веб-приложение поставщика облачных услуг. Иногда это называется "ClickOps" в шутку.
  • Инженеры вносят изменения с помощью команд CLI, таких как инструмент gcloud от Google или AWS CLI.
  • Логика приложения или системы развертывания создает или изменяет ресурсы вне рабочего процесса Terraform. Смотрите в сторону boto3 или других SDK облачных служб.

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

Теперь, когда мы понимаем, что такое дрейф в Terraform и как он возникает, почему это вообще должно нас волновать?

Дрейф в Terraform: Плохой

Вероятность того, что инфраструктура, определенная с помощью Terraform, просмотренная другими членами команды и затем развернутая, имеет очень конкретные характеристики, очень высока. Размер экземпляра EC2, диапазон CIDR-блока подсети и права доступа к бакету S3 были выбраны по какой-то причине.

Когда возникает дрейф, это означает, что существует недокументированное различие между этой описанной инфраструктурой и тем, что происходит в облаке. Это, в свою очередь, может привести к ухудшению работы приложения, излишним расходам или рискам в области безопасности и соответствия требованиям вашей организации. Как результат, при выявлении дрейфа, часто во время выполнения terraform plan, требуется ручная работа для выяснения и устранения дрейфа с целью смягчения потенциальных долгосрочных рисков. Эта ручная работа отнимает время и ресурсы, несет вред и считается "плохой".

Дрейф в Terraform: Уродливый

Как мы отметили выше, для большинства команд дрейф обнаруживается при выполнении terraform plan. Обычно инженеры не запускают произвольно Terraform (по нашим данным!). Фактически, они часто вызывают его исключительно при попытке развернуть новую функциональность или исправить ошибки. Это означает, что:

  • незамеченый дрейф может оставаться и вызывать проблемы в вашей инфраструктуре на протяжении довольно продолжительного времени до его обнаружения;
  • когда он обнаруживается во время запуска Terraform, посреди развертывания, это крайне дорогостоящий момент, когда ваши инженеры отвлекаются на ручную работу.

Это "уродливо".

Дрейф в Terraform: Черный Лебедь

Недетектированные изменения и выделение ресурсов вне рабочего процесса Terraform могут привести к событиям "Черного Лебедя", именно поэтому многие инженеры вынуждены исправлять "плохие" и "уродливые" затраты, чтобы предотвратить дрейф до того, как он станет проблемой. Например:

  • Изменение ресурса может привести к простою приложения (например, уменьшение размера базы данных, после чего она должна буть пересоздана) или огромному счету (по какой-то причине в нашем кластере GKE было выделено 1500 узлов, а не 150).
  • Конфигурации, оптимизированные с точки зрения безопасности, становятся менее строгими, и происходит утечка данных или взлом.
  • Возможно, взлом не произойдет, но при аудите вашей организации для сертификации соответствия критическим бизнес-требованиям вы проваливаете аудит из-за уязвимой инфраструктуры.

Самое сложное во всей этой ситуации то, что все вышеперечисленное может произойти, когда ресурсы облака создаются вне контроля Terraform. Обнаружить эти ресурсы гораздо сложнее (они не отобразятся в вашем terraform plan), и требуется гораздо больше усилий, чтобы выявить и затем добавить эти ресурсы в управление Terraform.

Ссылка на оригинал статьи

Read more

🔄 Своя Dropbox-альтернатива: Syncthing

🔄 Своя Dropbox-альтернатива: Syncthing

🧠 Зачем? Облачные сервисы — удобно, но: * не хочется платить Google/Dropbox за хранение своих файлов * хочется моментально синхронизировать фото, документы и заметки между устройствами * и делать это на своём сервере, без отправки данных «в облако» 👉 Решение — Syncthing: децентрализованный, зашифрованный, open source-синк между любыми устройствами. 🚀 Что ты получишь? * 📂 Автосинк папок между сервером,

🎧 Свой подкаст-сервер за 5 минут: Podgrab

🎧 Свой подкаст-сервер за 5 минут: Podgrab

✨ Зачем? Подкасты — отличный способ учиться, развлекаться и быть в курсе мира. Но что, если: * Хочется слушать подкасты офлайн * Хочется архивировать любимые шоу * Не устраивают сторонние сервисы, реклама и трекеры Решение: Podgrab — простой подкаст-граббер, который автоматически скачивает новые выпуски с любого RSS. А в связке с Audiobookshelf ты получаешь полноценный медиасервер.

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Введение: Почему это важно В мире DevOps и системного администрирования существует простое правило: всё ломается. Особенно в самый неподходящий момент. Когда вы изменяете конфигурацию критического сервиса (например, Nginx), цена ошибки может быть очень высока — от простого даунтайма до потери данных. Ansible предлагает элегантное решение для безопасного внесения изменений через механизм

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Файл ~/.ssh/authorized_keys позволяет настроить команды, которые будут выполняться при входящих SSH-соединениях. Это полезный инструмент для управления доступом и обеспечения безопасности, особенно при работе с резервным копированием данных. Настройка резервного копирования с использованием authorized_keys В данном примере рассматривается использование authorized_keys для настройки резервного копирования базы данных Bacula