Jednostka 3 / 11

Zarządzanie infrastrukturą jako kod: sztuczna inteligencja z Terraform i IaC

Zyski:

  • Umiejętność zrozumienia koncepcji IaC i cyklu pracy Terraform (inicjowanie, planowanie, stosowanie, stan, moduł) oraz umiejętność korzystania ze sztucznej inteligencji w celu tworzenia bezpiecznych wersji roboczych HCL
  • Możliwość sprawdzenia każdej zmiany za pomocą planu przed zastosowaniem i wyłapania nieoczekiwanych linii zniszczenia/wymiany
  • Umiejętność stosowania zasad utrzymywania tajemnic poza kodem, bezpiecznego utrzymywania stanu i minimalizowania uprawnień IAM

W przeszłości konfiguracja serwera polegała na kliknięciu panelu w chmurze: utwórz maszynę wirtualną, skonfiguruj sieć, dodaj regułę bezpieczeństwa. Metoda ta była powolna, podatna na błędy i niepowtarzalna — skonfigurowanie tego samego środowiska po raz drugi było prawie niemożliwe. Obecnie infrastrukturą zarządza się w formie kodu. IaC (Infrastructure as Code) to podejście do opisywania zasobów chmury, takich jak serwery, sieci i bazy danych, w plikach tekstowych, a nie ręcznie. Pliki te znajdują się w systemie kontroli wersji (Git); Możesz zobaczyć, kto, co, kiedy i co zmienił; Tę samą infrastrukturę możesz konfigurować wielokrotnie, dokładnie w ten sam sposób, za pomocą jednego polecenia.

Najpopularniejszym narzędziem IaC jest Terraform. Terraform pobiera definicje, które piszesz w czytelnym języku zwanym HCL (HashiCorp Configuration Language — język konfiguracji Terraform), tłumaczy je na interfejs API dostawcy chmury (AWS, Azure, GCP) i tworzy zasoby. Sztuczna inteligencja bardzo dobrze zna HCL i szybko tworzy złożone bloki. Jednak w IaC koszt błędu jest wysoki: jedna błędna definicja może zniszczyć całą produkcyjną bazę danych. Dlatego złotą zasadą w Terraform jest zobaczenie każdej zmiany w oparciu o „plan” przed jej wdrożeniem.

Czas działania Terraforma

Terraform działa z trzema podstawowymi poleceniami — ich znajomość jest warunkiem wstępnym kontrolowania wyników AI:

  • `terraform init`: Uruchamia projekt, pobiera niezbędne wtyczki dostawcy.
  • „plan terraformowy”: porównuje obecną sytuację z sytuacją pożądaną i pokazuje, co dodać, co zmienić, co usunąć. Nic nie implementuje. Jest to najważniejszy krok w zakresie bezpieczeństwa.
  • `terraform Apply`: Faktycznie stosuje Plan, tworząc/modyfikując zasoby.

Dodatkowo istotne są dwie koncepcje. Stan (plik stanu): Jest to plik, w którym Terraform przechowuje bieżący stan zasobów, którymi zarządza; Zwykle jest przechowywany w odległym i zamkniętym magazynie, tak aby dwie osoby nie mogły go zmienić ani zniszczyć w tym samym czasie. Moduł: Pakiet konfiguracyjny wielokrotnego użytku; Przykładowo w wielu projektach możesz wykorzystać moduł „konfiguruj sieć”.

Wskazówka: najniebezpieczniejszym znakiem na wyjściu Terraforma jest zniszczenie lub -/+ (zastąpienie) linii na wyjściu planu. Oznacza to, że zasób zostanie usunięty. Jeśli widzisz w planie nieoczekiwane zniszczenie, nigdy nie aplikuj, najpierw zrozum, dlaczego się pojawiło.

Krok po kroku: Pisanie IaC za pomocą AI

  1. Wyjaśnij pożądaną infrastrukturę. Bądź konkretny, jak „jedna VPC, dwie podsieci, jedna grupa bezpieczeństwa i jedno t3.micro EC2 na eu-central-1”.
  2. Określ dostawcę i wersję. Która chmura, jaki Terraform i wersja dostawcy? Jeśli nie określisz wersji, sztuczna inteligencja może zwrócić przestarzałą/niekompatybilną składnię.
  3. Przygotuj projekt HCL. Żądaj także zmiennych i wyników.
  4. Wyjmij Sekret. Wartości takie jak hasła i klucze powinny trafiać do skarbca zmiennych i tajnych informacji, a nie do kodu.
  5. Uruchom `init` + `plan`. Przeczytaj wynik planu wiersz po wierszu; Sprawdź, czy nie ma nieoczekiwanych usunięć.
  6. Zacznij od małych rzeczy, wdrażaj stopniowo. Najpierw zastosuj go na izolowanym koncie testowym/środowisku.

Bezpieczeństwo: ryzyko specyficzne dla IaC

IaC jest równie ryzykowne, co potężne. Trzy punkty krytyczne:

  1. W pliku stanu znajduje się tajemnica. Stan Terraform czasami przechowuje poufne wartości, takie jak hasła do bazy danych, w postaci zwykłego tekstu. Nigdy nie umieszczaj stanu w publicznym repozytorium; Użyj zaszyfrowanego zdalnego backendu o ograniczonym dostępie.
  2. Nie osadzaj wpisów tajnych w HCL. Linie takie jak hasło="prod123" są trwale zapisywane w historii Gita. Zamiast tego użyj zmiennej i podaj wartość w czasie wykonywania ze zmiennej środowiskowej (TF_VAR_...) lub tajnego skarbca.
  3. Bardzo szerokie uprawnienia. Sztuczna inteligencja czasami tworzy bloki takie jak Akcja: „*” (zezwól na wszystko), aby „sprawić, by to działało”. Jest to luka; zawęzić uprawnienia do wymaganego minimum.
Uwaga: Gdy sekret wejdzie do historii Git, pozostaje w przeszłości i może zostać naruszony, nawet jeśli usuniesz plik. Jeśli popełnisz przez pomyłkę, natychmiast anuluj i obróć sekret; Samo usunięcie nie wystarczy.

Tabela znaków ryzykownego planu

Wydruk planu

Znaczenie

co robić

+stwórz

Nowy zasób zostanie dodany

Ogólnie bezpieczny, przejrzyj jednak

~ aktualizacja na miejscu

Źródło zmieni się na miejscu

Zweryfikuj wpływ (czy nastąpi awaria?)

-/+ zastąpić

Zostaną usunięte i utworzone ponownie

UWAGA: może nastąpić utrata danych

- zniszczyć

Zasób zostanie zniszczony

STOP: nigdy nie aplikuj, jeśli się tego nie spodziewasz

trzy mini etui

Przypadek 1 — 2 dni pracy w 3 godziny. Jeden zespół miał napisać Terraform w celu skonfigurowania nowego środowiska testowego (VPC, podsieci, baza danych RDS, klaster ECS), ale właśnie przeniósł się do HCL. Opisali architekturę i wersje sztucznej inteligencji oraz stworzyli projekt modułowy. Sprawdzili każdy moduł zgodnie z planem i uruchomili go w ciągu 3 godzin; Ręczne próby i błędy zajęłyby im dwa dni.

Przypadek 2 — plan został skreślony. Inżynier uruchomił plan bez stosowania kodu aktualizacji wygenerowanego przez sztuczną inteligencję. Dane wyjściowe zawierały -/+ zamianę dla produkcyjnej bazy danych — sztuczna inteligencja podjęła próbę zastąpienia niewymienialnego pola, co oznaczało usunięcie i ponowne utworzenie bazy danych. Inżynier zaprzestał stosowania i zmienił metodę na bezpieczną. Nawyk planowania zapobiegł katastrofie.

Przypadek 3 – ukryty sekretny wyciek. Junior, YZ wydał db_password = "S3cret!" Zatwierdził linię tak, jak jest, i pchnął ją. Złapany na przeglądzie kodu; Hasło zostało natychmiast anulowane i zmienione, wartość została przeniesiona do zmiennej i pobrana z tajnego skarbca. Lekcja: W HCL nigdy nie ma tajemnic w postaci zwykłego tekstu.

Cztery szablony do kopiowania

1) Generowanie projektu infrastruktury:

Napisz następującą infrastrukturę na [CLOUD: AWS] za pomocą Terraform (wersja ~> 1.7): [SOURCE LIST]. Region [X]. Reguły: - Zmień wszystkie wrażliwe wartości, nie osadzaj ich w HCL. - Napraw wersję dostawcy (required_providers). - Zminimalizuj uprawnienia IAM, nie używaj „*”. - Zwróć [X, Y] jako wynik. Podaj kod modułowo i z objaśnieniami.

2) Interpretacja wyników planu:

Przeanalizuj poniższe dane wyjściowe „planu terraformowania”. Wymień mi:(1) jakie zasoby zostały dodane/zmienione/USUNIĘTE,(2) wiersze zagrożone utratą lub przerwaniem danych,(3) 3 pytania, które powinienem zadać przed złożeniem wniosku.Plan: [WYNIK]

3) Sprawdź istniejącą listę HCL pod kątem bezpieczeństwa:

Sprawdź następujący kod Terraform pod kątem bezpieczeństwa: osadzony klucz tajny, zbyt szerokie uprawnienia IAM, reguła otwartej sieci (0.0.0.0/0), niezaszyfrowana pamięć masowa? Zapisz każde ustalenie w kolejności ważności i korekty. Kod: [HCL]

4) Konwertuj powtarzalny kod na moduł:

Przekonwertuj następujący powtarzalny kod Terraform na moduł wielokrotnego użytku: jakie wartości powinny być zmiennymi, jaki powinien być interfejs modułu? Pokaż także przykładowe użycie. Kod: [HCL]

Słaba zachęta/silna zachęta

Słabe: „Utwórz bazę danych za pomocą Terraform”.

Wynik: nie jest jasne, która chmura, jaki silnik, która wersja, zaszyfrowana czy nie; Dzięki starszej składni sztuczna inteligencja może zapewnić publicznie dostępny przykład, który osadza hasło w kodzie.

Mocne: „Utwórz instancję RDS PostgreSQL 15 na AWS za pomocą Terraform ~> 1.7. Utwórz zmienną hasła, nie osadzaj jej w kodzie. Pamięć jest szyfrowana, dostępna tylko z prywatnej podsieci, a nie publiczna. Napraw wersję dostawcy. Zwróć punkt końcowy jako wynik.”

Różnica: drugi monit podaje silnik, wersję, szyfrowanie, ograniczenia sieciowe i tajną regułę — dane wyjściowe są bezpieczne i zbliżone do prod.

Typowe błędy

  • „Aplikować” bez tworzenia „planu”. Najdroższy błąd w IaC; zawsze najpierw planuj.
  • Osadzanie sekretu w HCL. Tworzy trwały wyciek do historii Git.
  • Stan przechowywania jest niepewny. Nieszyfrowany, odblokowany stan publiczny to katastrofa.
  • Nie poprawiam wersji. Korzystanie z dostawcy bez określenia wersji doprowadzi do nagłych awarii w przyszłości.
  • *`Działanie: Szerokie uprawnienia, takie jak „”`.** Narusza zasadę najmniejszych uprawnień.
  • Ignorowanie nieoczekiwanego „zniszczenia”. Stosowanie linii usuwania w planie bez zadawania pytań.

Podsumowując

IaC przekształca infrastrukturę w powtarzalny, możliwy do wersjonowania i kontrolowany kod; Najpopularniejszym narzędziem jest Terraform. Sztuczna inteligencja szybko tworzy kody pośredniczące HCL, ale musisz podać wersję, szczegółowe informacje dotyczące chmury i reguły bezpieczeństwa. Nieomylna zasada w Terraform: widzieć każdą zmianę zgodnie z planem, sprawdzać nieoczekiwane usunięcia, trzymać tajemnice z dala od kodu i chronić stan. Linie zniszczenia i zamiany w wynikach planu to miejsca, które należy przeczytać najdokładniej.

Zadanie aplikacji

Niech sztuczna inteligencja wygeneruje małą infrastrukturę (np. zasobnik pamięci i zasady dostępu), korzystając z powyższego szablonu „Generuj szkic infrastruktury”. Następnie: (1) sprawdź, czy szablon „weryfikacji” nie zawiera tajnych * uprawnień osadzonych w kodzie; (2) jeśli to możliwe, uruchom init + plan na koncie testowym i odczytaj wynik planu za pomocą szablonu „interpretacja planu”; (3) zanotuj wszelkie nieoczekiwane usunięcia/zmiany.

lista kontrolna

  • [ ] Do mojego monitu dodałem chmurę, wersję Terraform/dostawcy oraz ograniczenia dotyczące szyfrowania/sieci.
  • [ ] W kodzie nie ma tajnego tekstu jawnego; zmienna wartości precyzji.
  • [ ] Zawęziłem uprawnienia/uprawnienia do minimalnych uprawnień, * Nie korzystałem z nich.
  • [ ] Uruchomiłem plan przed zastosowaniem i przeczytałem wynik linia po linii.
  • [ ] Sprawdziłem, czy w Planie nie ma nieoczekiwanego zniszczenia/wymiany.
  • [ ] Jestem pewien, że stan jest przechowywany w zaszyfrowanym, zamkniętym i ograniczonym backendie.