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
- 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”.
- 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ę.
- Przygotuj projekt HCL. Żądaj także zmiennych i wyników.
- Wyjmij Sekret. Wartości takie jak hasła i klucze powinny trafiać do skarbca zmiennych i tajnych informacji, a nie do kodu.
- Uruchom `init` + `plan`. Przeczytaj wynik planu wiersz po wierszu; Sprawdź, czy nie ma nieoczekiwanych usunięć.
- 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:
- 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.
- 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.
- 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.