Добивки:
- Способност да се разбере концептот IaC и работниот циклус на Terraform (почеток, планирање, примена, состојба, модул) и вештачката интелигенција да произведува безбедни нацрти на HCL
- Способност да се провери секоја промена со план пред да се примени и да се фати неочекувано уништување/замена на линии
- Способност да се применат принципите за чување тајни надвор од кодот, безбедно чување на состојбата и минимизирање на дозволите за IAM
Во минатото, поставувањето на серверот беше прашање на кликнување преку облак панел: креирајте виртуелна машина, поставете ја мрежата, додајте го безбедносното правило. Овој метод беше бавен, склон кон грешки и неповторлив - беше речиси невозможно да се постави истата средина по втор пат. Денес, инфраструктурата се управува како код. IaC (Инфраструктура како код) е пристап за опишување на ресурсите на облак, како што се сервери, мрежи и бази на податоци во текстуални датотеки, наместо рачно. Овие датотеки се наоѓаат во контрола на верзијата (Git); Можете да видите кој што променил, кога и што; Можете да ја поставите истата инфраструктура многу пати, на ист начин, со една команда.
Најчестата алатка за IaC е Terraform. Terraform ги зема дефинициите што ги пишувате на читлив јазик наречен HCL (HashiCorp Configuration Language — јазик за конфигурација на Terraform), ги преведува во API на давателот на облакот (AWS, Azure, GCP) и ги создава ресурсите. AI многу добро го познава HCL и брзо произведува сложени блокови. Но, во IaC, цената на грешката е висока: една погрешна дефиниција може да ја избрише целата производна база на податоци. Затоа златното правило во Terraform е секоја промена да ја гледате со „план“ пред да ја спроведете.
Траење на Terraform
Terraform работи со три основни команди - да се знае дека ова е предуслов за контрола на излезот со вештачка интелигенција:
- `terraform init`: го започнува проектот, ги презема потребните додатоци за провајдерите.
- `terraform plan`: ја споредува моменталната ситуација со посакуваната ситуација и покажува што да додаде, што да промени, што да избрише. Не спроведува ништо. Тоа е најкритичниот безбедносен чекор.
- `terraform apply`: всушност го применува Планот, создавајќи/изменувајќи ресурси.
Дополнително, два концепта се од витално значење. Состојба (state file): Ова е датотека во која Terraform ја задржува моменталната состојба на ресурсите со кои управува; Обично се чува во оддалечен и заклучен магацин, така што двајца луѓе не можат да го менуваат или уништат истовремено. Модул: Пакет за конфигурација за повеќекратна употреба; На пример, можете да го користите модулот „постави мрежа“ во многу проекти.
Совет: Најопасниот знак во излезот Terraform е уништување или -/+ (замени) линии во излезот на планот. Тоа значи дека ресурсот ќе биде избришан. Ако видите неочекувано уништување во планот, никогаш не применувајте, прво разберете зошто се појавило.
Чекор по чекор: Пишување IaC со вештачка интелигенција
- Разјаснете ја саканата инфраструктура. Бидете конкретни како „еден VPC, две подмрежи, една безбедносна група и една t3.micro EC2 на eu-central-1“.
- Наведете провајдер и верзија. Кој облак, која верзија на Terraform и провајдер? Ако не наведете верзија, вештачката интелигенција може да врати застарена/некомпатибилна синтакса.
- Направете го нацртот HCL. Барајте и променливи и излези.
- Извадете ја тајната. Вредностите како лозинки и клучеви треба да одат во променливата и тајниот свод, а не во кодот.
- Стартувај „init“ + „план“. Прочитајте го излезот на планот линија по линија; Проверете дали има неочекувани бришења.
- Започнете мали, имплементирајте постепено. Прво нанесете го во изолирана тест сметка/околина.
Безбедност: ризици специфични за IaC
IaC е исто толку ризичен колку што е моќен. Три критични точки:
- Во државното досие има тајна. Тераформната состојба понекогаш ги задржува чувствителните вредности, како што се лозинките за базата на податоци, во обичен текст. Никогаш не ставајте држава во јавно складиште; Користете шифрирана далечинска подлога со ограничен пристап.
- Не вметнувајте тајни во HCL. Линиите како лозинка = "prod123" се трајно запишани во историјата на Git. Наместо тоа, користете променлива и дајте ја вредноста при извршување од променливата на околината (TF_VAR_...) или таен свод.
- Многу широка IAM дозвола. Вештачката интелигенција понекогаш произведува блокови како Акција: „*“ (дозволи сè) „да работи“. Ова е ранливост; стеснете ја дозволата на потребниот минимум.
Внимание: штом некоја тајна ќе влезе во историјата на Git, таа останува во минатото и може да биде компромитирана, дури и ако ја избришете датотеката. Ако направите по грешка, веднаш откажете ја и ротирајте ја тајната; Само бришењето не е доволно.
Табела со знаци на ризичен план
Планирајте го отпечатокот
Значење
што да правам
+создај
Ќе се додаде нов ресурс
Генерално безбедно, сепак прегледајте
~ ажурирање на место
Изворот ќе се промени на страницата
Потврдете го влијанието (дали ќе има прекин?)
-/+ замени
Ќе биде избришано и повторно создадено
ВНИМАНИЕ: може да дојде до загуба на податоци
- уништи
Ресурсот ќе биде уништен
СТОП: никогаш не аплицирајте ако не го очекувате
три мини футроли
Случај 1 — 2 дена работа за 3 часа. Еден тим требаше да напише Terraform за да постави нова средина за тестирање (VPC, подмрежи, RDS база на податоци, кластер ECS), но тие штотуку се преселија во HCL. Тие ја опишаа архитектурата и верзиите на вештачката интелигенција и изработија модуларен план. Тие го проверуваа секој модул со планот и го активираа за 3 часа; Ќе им требаат два дена рачно тестирање и грешка.
Случај 2 - планот фати бришење. Инженер водел план без да примени код за ажурирање генериран од вештачка интелигенција. Излезот содржеше -/+ замени за производната база на податоци - вештачката интелигенција се обиде да замени незаменливо поле, што значеше бришење и повторно креирање на базата на податоци. Инженерот престана да аплицира и ја смени промената на безбеден метод. Навиката за планирање спречи катастрофа.
Случај 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“.
Резултат: нејасно кој облак, кој мотор, која верзија, шифрирана или не; Со наследната синтакса, вештачката интелигенција може да обезбеди јавно достапен пример кој ја вградува лозинката во кодот.
Силно: "Креирај примерок RDS PostgreSQL 15 на AWS со Terraform ~> 1.7. Направете ја променливата лозинка, не ја вметнувајте во кодот. Складирањето е шифрирано, достапно само од приватна подмрежа, а не од јавна. Поправете ја верзијата на провајдерот. Вратете ја крајната точка како излез."
Разлика: вториот повик ги дава моторот, верзијата, шифрирањето, ограничувањето на мрежата и тајното правило - излезот е безбеден и блиску до прод.
Вообичаени грешки
- Да се „аплицира“ без да се направи „план“. Најскапата грешка во IaC; секогаш планирај прво.
- Вградување тајна во HCL. Создава трајно истекување во историјата на Git.
- Чување на државата несигурна. Нешифрирана, отклучена, јавна состојба е катастрофа.
- Не се поправа верзијата. Користењето на провајдер без да наведете верзија ќе доведе до ненадејни неуспеси во иднина.
- *`Акција: Широка дозвола како што е „“`.** Го нарушува принципот на најмала привилегија.
- Игнорирање на неочекуваното „уништи“. Примена на линиите за бришење во Планот без испрашување.
Сумирано
IaC ја претвора инфраструктурата во код кој може да се повтори, да може да се верзија и да се ревидира; Најчестата алатка е Terraform. AI брзо произведува HCL никулци, но мора да ја наведете верзијата, деталите специфични за облакот и безбедносните правила. Непогрешливото правило во Terraform: да ја видите секоја промена со план, да барате неочекувани бришења, да ги чувате тајните подалеку од кодот и да ја чувате државата безбедно. Уништувањето и замените линии во излезот на планот се местата што треба да се читаат највнимателно.
Задача за апликација
Нека вештачката интелигенција генерира мала инфраструктура (на пр. кофа за складирање и политика за пристап) користејќи го шаблонот „Генерирај инфраструктура скица“ погоре. Потоа: (1) проверете го шаблонот „проверка“ за тајни или * дозволи вградени во кодот; (2) ако е можно, стартувајте го init + plan во тест-сметка и прочитајте го излезот на планот со шаблонот „толкување на планот“; (3) забележете какви било неочекувани бришења/промени.
листа за проверка
- [ ] Додадов облак, верзија на Terraform/провајдер и ограничувања за шифрирање/мрежа на мојот потсетник.
- [ ] Не постои тајна на чист текст во кодот; променливи вредности на прецизност.
- [ ] Ги намалив IAM/дозволите на минимални дозволи, * Не го користев.
- [ ] Истрчав план пред да аплицирам и го прочитав излезот ред по ред.
- [ ] Потврдив дека нема неочекувано уништување/замена во планот.
- [ ] Сигурен сум дека состојбата се чува во шифрирана, заклучена и ограничена заднина.