Печалби:
- Способност за разбиране на концепцията на 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
- Изяснете желаната инфраструктура. Бъдете конкретни като „един VPC, две подмрежи, една група за сигурност и един t3.micro EC2 на eu-central-1“.
- Посочете доставчик и версия. Кой облак, коя Terraform и версия на доставчика? Ако не посочите версия, AI може да върне остарял/несъвместим синтаксис.
- Изготви HCL черновата. Също така поискайте променливи и изходи.
- Извадете Secret. Стойности като пароли и ключове трябва да отиват в променливата и тайния трезор, а не в кода.
- Изпълнете `init` + `plan`. Прочетете изхода на плана ред по ред; Проверете за неочаквани изтривания.
- Започнете с малко, прилагайте постепенно. Първо го приложете в изолиран тестов акаунт/среда.
Сигурност: специфични за IAC рискове
IaC е толкова рискован, колкото и мощен. Три критични точки:
- В държавното досие има тайна. Състоянието на Terraform понякога запазва чувствителни стойности, като например пароли за бази данни, в обикновен текст. Никога не поставяйте State в публично хранилище; Използвайте криптиран отдалечен бекенд с ограничен достъп.
- Не вграждайте тайни в HCL. Редове като password="prod123" се записват постоянно в хронологията на Git. Вместо това използвайте променлива и дайте стойността по време на изпълнение от променливата на средата (TF_VAR_...) или тайно хранилище.
- Много широко 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/разрешенията до минимални разрешения, * не го използвах.
- [ ] Изпълних план преди прилагане и прочетох изхода ред по ред.
- [ ] Проверих, че няма неочаквано унищожаване/замяна в плана.
- [ ] Сигурен съм, че състоянието се съхранява в криптиран, заключен и ограничен бекенд.