единица 3 / 11

Управление на инфраструктурата като код: Изкуствен интелект с Terraform и IaC

Печалби:

  • Способност за разбиране на концепцията на IaC и работния цикъл на Terraform (инициализиране, планиране, прилагане, състояние, модул) и изкуственият интелект да произвежда безопасни HCL чернови
  • Възможност за проверка на всяка промяна с план преди прилагане и улавяне на неочаквани линии за унищожаване/замяна
  • Възможност за прилагане на принципите за пазене на тайни от кода, сигурно запазване на състоянието и минимизиране на IAM разрешенията

В миналото настройката на сървър беше въпрос на щракване през облачен панел: създаване на виртуална машина, настройка на мрежата, добавяне на правилото за сигурност. Този метод беше бавен, склонен към грешки и неповторим - беше почти невъзможно да се настрои същата среда втори път. Днес инфраструктурата се управлява като код. IaC (Инфраструктура като код) е подход за описание на облачни ресурси като сървъри, мрежи и бази данни в текстови файлове, а не ръчно. Тези файлове се намират в контрола на версиите (Git); Можете да видите кой какво е променил, кога и какво; Можете да настроите една и съща инфраструктура много пъти, по абсолютно същия начин, с една команда.

Най-разпространеният IaC инструмент е Terraform. Terraform приема дефинициите, които пишете на четим език, наречен HCL (HashiCorp Configuration Language — конфигурационният език на Terraform), превежда ги в API на доставчика на облак (AWS, Azure, GCP) и създава ресурсите. AI ​​познава HCL много добре и произвежда сложни блокове бързо. Но в IaC цената на една грешка е висока: една грешна дефиниция може да унищожи цялата производствена база данни. Ето защо златното правило в Terraform е да виждате всяка промяна с „план“, преди да я приложите.

Времето за изпълнение на Terraform

Terraform работи с три основни команди - знанието, че те са предпоставка за контролиране на AI изхода:

  • `terraform init`: Стартира проекта, изтегля необходимите добавки за доставчик.
  • `terraform plan`: Сравнява текущата ситуация с желаната ситуация и показва какво да добавите, какво да промените, какво да изтриете. Не прилага нищо. Това е най-критичната стъпка за сигурност.
  • `terraform apply`: Действително прилага плана, създавайки/променяйки ресурси.

Освен това две концепции са жизненоважни. Състояние (файл на състоянието): Това е файлът, в който Terraform съхранява текущото състояние на ресурсите, които управлява; Обикновено се съхранява в отдалечен и заключен склад, така че двама души да не могат да го променят или унищожат едновременно. Модул: Конфигурационен пакет за многократна употреба; Например, можете да използвате модула "настройване на мрежа" в много проекти.

Съвет: Най-опасният знак в изхода на Terraform е унищожаване или -/+ (замяна) линии в изхода на плана. Това означава, че ресурсът ще бъде изтрит. Ако видите неочаквано разрушаване в план, никога не прилагайте, първо разберете защо се е появило.

Стъпка по стъпка: Писане на IaC с AI

  1. Изяснете желаната инфраструктура. Бъдете конкретни като „един VPC, две подмрежи, една група за сигурност и един t3.micro EC2 на eu-central-1“.
  2. Посочете доставчик и версия. Кой облак, коя Terraform и версия на доставчика? Ако не посочите версия, AI може да върне остарял/несъвместим синтаксис.
  3. Изготви HCL черновата. Също така поискайте променливи и изходи.
  4. Извадете Secret. Стойности като пароли и ключове трябва да отиват в променливата и тайния трезор, а не в кода.
  5. Изпълнете `init` + `plan`. Прочетете изхода на плана ред по ред; Проверете за неочаквани изтривания.
  6. Започнете с малко, прилагайте постепенно. Първо го приложете в изолиран тестов акаунт/среда.

Сигурност: специфични за IAC рискове

IaC е толкова рискован, колкото и мощен. Три критични точки:

  1. В държавното досие има тайна. Състоянието на Terraform понякога запазва чувствителни стойности, като например пароли за бази данни, в обикновен текст. Никога не поставяйте State в публично хранилище; Използвайте криптиран отдалечен бекенд с ограничен достъп.
  2. Не вграждайте тайни в HCL. Редове като password="prod123" се записват постоянно в хронологията на Git. Вместо това използвайте променлива и дайте стойността по време на изпълнение от променливата на средата (TF_VAR_...) или тайно хранилище.
  3. Много широко IAM разрешение. AI понякога създава блокове като Action: "*" (разреши всичко), за да "работи". Това е уязвимост; стеснете разрешението до необходимия минимум.
Внимание: След като тайна влезе в историята на Git, тя остава в миналото и може да бъде компрометирана, дори ако изтриете файла. Ако се ангажирате по погрешка, незабавно отменете и завъртете тайната; Само изтриването не е достатъчно.

Таблица със знаци за рисков план

Разпечатка на план

Значение

какво да правя

+създай

Ще бъде добавен нов ресурс

Като цяло безопасно, но прегледайте

~ актуализиране на място

Източникът ще се промени на място

Проверете въздействието (ще има ли прекъсване?)

-/+ замени

Ще бъде изтрито и създадено отново

ВНИМАНИЕ: може да възникне загуба на данни

- унищожи

Ресурсът ще бъде унищожен

СТОП: никога не кандидатствайте, ако не го очаквате

три мини калъфа

Случай 1 — 2 дни работа за 3 часа. Един екип щеше да напише Terraform, за да настрои нова тестова среда (VPC, подмрежи, RDS база данни, ECS клъстер), но те току-що бяха преминали към HCL. Те описаха архитектурата и версиите на AI и създадоха модулен план. Те провериха всеки модул с плана и го пуснаха в експлоатация за 3 часа; Ще им отнеме два дни ръчни проби и грешки.

Случай 2 — планът е уловил изтриване. Инженер изпълни план, без да приложи код за актуализиране, генериран от AI. Резултатът съдържаше -/+ замяна за производствената база данни — AI се опита да замени незаменимо поле, което означаваше изтриване и повторно създаване на базата данни. Инженерът спря прилагането и промени промяната на безопасен метод. Навикът за планиране предотврати бедствието.

Случай 3 — скрит секретен теч. Младши, YZ издаде db_password = "S3cret!" Той ангажира линията такава, каквато е, и я прокара. Хванати в преглед на кода; Паролата беше незабавно анулирана и променена, стойността беше преместена в променлива и подадена от тайното хранилище. Урок: В HCL никога няма тайни в обикновен текст.

Четири копируеми шаблона

1) Генериране на проект на инфраструктура:

Напишете следната инфраструктура на [CLOUD: AWS] с Terraform (версия ~> 1.7): [СПИСЪК НА ИЗТОЧНИЦИ]. Регион [X]. Правила:- Направете всички чувствителни стойности променливи, не ги вграждайте в HCL.- Коригирайте версията на доставчика (required_providers).- Минимизирайте IAM разрешенията, не използвайте "*".- Върнете [X, Y] като изход. Дайте код модулно и с обяснения.

2) Тълкуване на резултата от плана:

Анализирайте изхода на „терраформен план“ по-долу. Избройте ме: (1) какви ресурси са добавени/променени/ИЗТРИТИ, (2) редове с риск от загуба или прекъсване на данни, (3) 3 въпроса, които трябва да задам, преди да кандидатствам. План: [ИЗХОД]

3) Проучете съществуващия HCL за сигурност:

Проверете следния код на Terraform за сигурност: вградена тайна, прекалено широко IAM разрешение, правило за отворена мрежа (0.0.0.0/0), некриптирано хранилище? Напишете всяка констатация по важност и корекция. Код: [HCL]

4) Преобразувайте повтарящия се код в модула:

Преобразувайте следния повтарящ се код на Terraform в модул за многократна употреба: какви стойности трябва да бъдат променливи, какъв трябва да бъде интерфейсът на модула? Също така покажете примерна употреба. Код: [HCL]

Слаба подкана / Силна подкана

Слаб: „Създайте база данни с Terraform.“

Резултат: неясно кой облак, кой двигател, коя версия, криптирана или не; С наследения синтаксис AI може да предостави публично достъпен пример, който вгражда паролата в кода.

Силно: "Създайте екземпляр на RDS PostgreSQL 15 на AWS с Terraform ~> 1.7. Направете паролата променлива, не я вграждайте в кода. Съхранението е криптирано, достъпно само от частна подмрежа, не е публична. Коригирайте версията на доставчика. Върнете крайната точка като изход."

Разлика: втората подкана дава двигателя, версията, криптирането, мрежовото ограничение и тайното правило — изходът е защитен и близък до прод.

Често срещани грешки

  • Да `кандидатстваш` без да правиш `план`. Най-скъпата грешка в IaC; винаги първо планирайте.
  • Вграждане на Secret в HCL. Създава постоянно изтичане в историята на Git.
  • Несигурно състояние на съхранение. Некриптирано, отключено, публично състояние е катастрофа.
  • Версията не се коригира. Използването на доставчик без посочване на версия ще доведе до внезапни повреди в бъдеще.
  • *`Действие: Широко разрешение като ""`.** Нарушава принципа на най-малките привилегии.
  • Игнориране на неочаквано „унищожаване“. Прилагане на изтритите линии в плана без въпроси.

В обобщение

IaC превръща инфраструктурата в повторяем, версионен и одитиран код; Най-често срещаният инструмент е Terraform. AI бързо създава HCL мъничета, но трябва да предоставите версията, специфични за облака подробности и правила за сигурност. Безпогрешното правило в Terraform: да виждате всяка промяна с план, да правите заявки за неочаквани изтривания, да пазите тайните далеч от кода и да пазите състоянието сигурно. Редовете за унищожаване и замяна в изходния план са местата, които трябва да се четат най-внимателно.

Задача за приложение

Накарайте AI да генерира малка инфраструктура (напр. кофа за съхранение и политика за достъп), като използва шаблона „Генериране на скица на инфраструктура“ по-горе. След това: (1) накарайте шаблона за проверка за тайни или * разрешения, вградени в кода; (2) ако е възможно, стартирайте init + plan в тестов акаунт и прочетете изхода на плана с шаблона "тълкуване на план"; (3) отбелязвайте всички неочаквани изтривания/промени.

контролен списък

  • [ ] Добавих облак, версия на Terraform/доставчик и криптиране/мрежови ограничения към подканата си.
  • [ ] В кода няма секретен текст; променлива за прецизни стойности.
  • [ ] Стесних IAM/разрешенията до минимални разрешения, * не го използвах.
  • [ ] Изпълних план преди прилагане и прочетох изхода ред по ред.
  • [ ] Проверих, че няма неочаквано унищожаване/замяна в плана.
  • [ ] Сигурен съм, че състоянието се съхранява в криптиран, заключен и ограничен бекенд.