Kitengo 3 / 11

Kusimamia Miundombinu kama Kanuni: Akili Bandia na Terraform na IaC

Faida:

  • Uwezo wa kuelewa dhana ya IaC na mzunguko wa kufanya kazi wa Terraform (init, kupanga, kuomba, serikali, moduli) na kuwa na akili ya bandia hutoa rasimu salama za HCL.
  • Uwezo wa kuangalia kila mabadiliko na mpango kabla ya kutuma maombi na kupata njia zisizotarajiwa za kuharibu / kubadilisha
  • Uwezo wa kutumia kanuni za kuweka siri nje ya kanuni, kuweka hali salama, na kupunguza ruhusa za IAM.

Katika siku za nyuma, kuanzisha seva ilikuwa suala la kubofya kupitia jopo la wingu: kuunda mashine ya kawaida, kuanzisha mtandao, kuongeza sheria ya usalama. Njia hii ilikuwa ya polepole, inakabiliwa na makosa, na haiwezi kurudiwa - ilikuwa karibu haiwezekani kuweka mazingira sawa mara ya pili. Leo, miundombinu inasimamiwa kama kanuni. IaC (Miundombinu kama Kanuni) ni mbinu ya kuelezea rasilimali za wingu kama vile seva, mitandao na hifadhidata katika faili za maandishi badala ya kutumia mwenyewe. Faili hizi hukaa katika udhibiti wa toleo (Git); Unaweza kuona ni nani aliyebadilisha nini, lini, na nini; Unaweza kusanidi miundombinu sawa mara nyingi, kwa njia sawa, kwa amri moja.

Chombo cha kawaida cha IaC ni Terraform. Terraform inachukua ufafanuzi unaoandika katika lugha inayoweza kusomeka iitwayo HCL (Lugha ya Usanidi ya HashiCorp — Lugha ya usanidi ya Terraform), inatafsiri kuwa API ya mtoa huduma wa mtandao (AWS, Azure, GCP) na kuunda rasilimali. AI ​​inajua HCL vizuri sana na hutoa vitalu ngumu haraka. Lakini katika IaC, gharama ya kosa ni kubwa: ufafanuzi mmoja usio sahihi unaweza kufuta hifadhidata nzima ya uzalishaji. Ndio maana kanuni ya dhahabu katika Terraform ni kuona kila mabadiliko kwa 'mpango' kabla ya kuitekeleza.

Muda wa utekelezaji wa Terraform

Terraform inafanya kazi na amri tatu za kimsingi - kujua haya ni sharti la kudhibiti pato la AI:

  • `terraform init`: Huanzisha mradi, kupakua programu-jalizi zinazohitajika za watoa huduma.
  • `Mpango wa terraform`: Inalinganisha hali ya sasa na hali inayotakiwa na inaonyesha cha kuongeza, nini cha kubadilisha, nini cha kufuta. Haitekelezi chochote. Ni hatua muhimu zaidi ya usalama.
  • `terraform apply`: Inatumika kwa kweli Mpango, kuunda/kurekebisha rasilimali.

Zaidi ya hayo, dhana mbili ni muhimu. Jimbo (faili la serikali): Hili ni faili ambapo Terraform huweka hali ya sasa ya rasilimali inazosimamia; Kawaida huhifadhiwa kwenye ghala la mbali na lililofungwa ili watu wawili wasiweze kubadilisha au kuharibu kwa wakati mmoja. Moduli: Kifurushi cha usanidi kinachoweza kutumika tena; Kwa mfano, unaweza kutumia moduli ya "kuweka mtandao" katika miradi mingi.

Kidokezo: Ishara hatari zaidi katika pato la Terraform ni kuharibu au -/+ (badilisha) mistari katika matokeo ya mpango. Hii inamaanisha kuwa rasilimali itafutwa. Ikiwa utaona uharibifu usiotarajiwa katika mpango, usiwahi kuomba, kwanza uelewe kwa nini ilionekana.

Hatua kwa hatua: Kuandika IaC na AI

  1. Fafanua miundombinu inayotakiwa. Kuwa thabiti kama "VPC moja, subneti mbili, kikundi kimoja cha usalama na t3.micro EC2 moja kwenye eu-central-1".
  2. Bainisha mtoaji na toleo. Ni wingu gani, toleo gani la Terraform na mtoaji? Usipobainisha toleo, AI inaweza kurudisha sintaksia iliyopitwa na wakati/isiyotangamana.
  3. Toa rasimu ya HCL. Pia omba vigeu na matokeo.
  4. Toa Siri nje. Thamani kama vile manenosiri na funguo zinapaswa kwenda kwenye kibadilishaji na kihifadhi siri, si kwa msimbo.
  5. Endesha `init` + `mpango`. Soma mstari wa pato la mpango kwa mstari; Angalia ufutaji usiotarajiwa.
  6. Anza ndogo, tekeleza hatua kwa hatua. Itumie katika akaunti/mazingira ya majaribio ya pekee.

Usalama: Hatari mahususi za IaC

IaC ni hatari kama ilivyo na nguvu. Pointi tatu muhimu:

  1. Kuna siri katika faili ya serikali. Hali ya Terraform wakati mwingine huweka thamani nyeti, kama vile manenosiri ya hifadhidata, katika maandishi wazi. Kamwe usiweke Jimbo katika hazina ya umma; Tumia mazingira ya nyuma ya mbali yaliyosimbwa kwa njia fiche, yenye vikwazo.
  2. Usipachike siri katika HCL. Mistari kama password="prod123" imeandikwa kwa historia ya Git kabisa. Badala yake, tumia kigezo na upe thamani wakati wa utekelezaji kutoka kwa utofauti wa mazingira (TF_VAR_...) au vault ya siri.
  3. Ruhusa pana sana ya IAM. AI wakati mwingine hutoa vizuizi kama Kitendo: "*" (ruhusu kila kitu) "kuifanya ifanye kazi". Huu ni udhaifu; punguza ruhusa hadi kiwango cha chini kinachohitajika.
Tahadhari: Mara tu siri inapoingia kwenye historia ya Git, inabaki kuwa ya zamani na inaweza kuathiriwa, hata ikiwa utafuta faili. Ikiwa utafanya makosa, mara moja ghairi na uzungushe siri; Kufuta tu haitoshi.

Jedwali la ishara za mpango hatari

Mpango wa uchapishaji

Maana

nini cha kufanya

+unda

Rasilimali mpya itaongezwa

Kwa ujumla salama, kagua ingawa

~ update mahali

Chanzo kitabadilika kwenye tovuti

Thibitisha athari (kutakuwa na hitilafu?)

-/+ badilisha

Itafutwa na kuundwa upya

TAHADHARI: upotezaji wa data unaweza kutokea

- kuharibu

Rasilimali itaharibiwa

SIMAMA: usiwahi kutuma maombi ikiwa hutarajii

kesi tatu ndogo

Kesi 1 - kazi ya siku 2 ndani ya masaa 3. Timu moja ilikuwa inaandika Terraform ili kuweka mazingira mapya ya majaribio (VPC, subnets, hifadhidata ya RDS, nguzo ya ECS) lakini walikuwa wamehamia HCL. Walielezea usanifu na matoleo kwa AI na wakatoa mchoro wa kawaida. Walithibitisha kila moduli na mpango na wakafanya kazi kwa saa 3; Ingewachukua siku mbili za majaribio ya mwongozo na makosa.

Kesi ya 2 - mpango ulipata ufutaji. Mhandisi aliendesha mpango bila kutumia msimbo wa sasisho unaozalishwa na AI. Toleo lililo na -/+ badala ya hifadhidata ya uzalishaji - AI ilijaribu kuchukua nafasi ya sehemu isiyoweza kubadilishwa, ambayo ilimaanisha kufuta na kuunda upya hifadhidata. Mhandisi aliacha kutumia na kubadilisha mabadiliko kuwa njia salama. Tabia ya kupanga ilizuia maafa.

Kesi ya 3 - uvujaji wa siri uliozikwa. Mdogo, YZ alitoa db_password = "S3cret!" Aliweka mstari kama ulivyo na kuusukuma. Kukamatwa katika ukaguzi wa kanuni; Nenosiri lilighairiwa mara moja na kubadilishwa, thamani ilihamishwa kwa kutofautiana na kulishwa kutoka kwa vault ya siri. Somo: Kamwe hakuna siri za maandishi wazi katika HCL.

Violezo vinne vinavyoweza kunakiliwa

1) Kutengeneza rasimu ya miundombinu:

Andika miundombinu ifuatayo kwenye [CLOUD: AWS] ukitumia Terraform (toleo ~> 1.7): [ORODHA YA CHANZO]. Mkoa [X]. Sheria:- Fanya thamani zote nyeti zibadilike, usizipachike katika HCL.- Rekebisha toleo la mtoa huduma (watoa huduma_wanaohitajika).- Punguza ruhusa za IAM, usitumie "*".- Rudisha [X, Y] kama pato. Toa msimbo kwa utaratibu na kwa maelezo.

2) Kutafsiri matokeo ya mpango:

Changanua matokeo ya 'mpango wa terraform' hapa chini. Niorodheshe:(1) ni nyenzo gani ziliongezwa/kubadilishwa/KUFUTWA,(2) safu mlalo zilizo katika hatari ya kupoteza au kukatizwa kwa data,(3) maswali 3 ninayopaswa kuuliza kabla ya kutuma maombi.Mpangilio: [PATO]

3) Chunguza HCL iliyopo kwa usalama:

Angalia msimbo wa Terraform ufuatao kwa usalama: siri iliyopachikwa, ruhusa pana ya IAM, sheria ya mtandao wazi (0.0.0.0/0), hifadhi ambayo haijasimbwa? Andika kila matokeo kwa mpangilio wa umuhimu na marekebisho. Msimbo: [HCL]

4) Badilisha nambari inayojirudia kuwa moduli:

Geuza msimbo wa Terraform unaojirudiarudia kuwa moduli inayoweza kutumika tena: ni maadili gani yanapaswa kuwa vigeu, kiolesura cha moduli kinapaswa kuwa nini? Pia onyesha matumizi ya mfano. Msimbo: [HCL]

Mwongozo dhaifu / Mwongozo thabiti

Dhaifu: "Unda hifadhidata na Terraform."

Matokeo: haijulikani ni wingu gani, injini gani, toleo gani, limesimbwa au la; Kwa syntax ya urithi, AI inaweza kutoa mfano unaopatikana kwa umma ambao hupachika nenosiri kwenye msimbo.

Imara: "Unda mfano wa RDS PostgreSQL 15 kwenye AWS ukitumia Terraform ~> 1.7. Fanya nenosiri libadilishwe, usilipachike kwenye msimbo. Hifadhi imesimbwa kwa njia fiche, inapatikana tu kutoka kwa mtandao mdogo wa faragha, si wa umma. Rekebisha toleo la mtoa huduma. Rejesha mwisho kama pato."

Tofauti: kidokezo cha pili kinatoa injini, toleo, usimbaji fiche, kizuizi cha mtandao na sheria ya siri - matokeo ni salama na karibu na uzalishaji.

Makosa ya kawaida

  • `Kutuma` bila kutengeneza `mpango`. Makosa ya gharama kubwa zaidi katika IaC; siku zote panga kwanza.
  • Siri ya Kupachika katika HCL. Huunda uvujaji wa kudumu kwenye historia ya Git.
  • Kuhifadhi hali isiyo salama. Hali ambayo haijasimbwa, iliyofunguliwa, na ya umma ni janga.
  • Sio kurekebisha toleo. Kutumia mtoa huduma bila kubainisha toleo kutasababisha kushindwa kwa ghafla katika siku zijazo.
  • *`Kitendo: Ruhusa pana kama vile ""`.** Inakiuka kanuni ya upendeleo mdogo.
  • Kupuuza `haribu` isiyotarajiwa. Kutumia mistari ya kufuta kwenye Mpango bila kuhoji.

Kwa muhtasari

IaC hugeuza miundombinu kuwa msimbo unaoweza kurudiwa, unaoweza kubadilika, na unaoweza kukaguliwa; Chombo cha kawaida ni Terraform. AI hutoa vijiti vya HCL kwa haraka, lakini lazima utoe toleo, maelezo mahususi ya wingu na sheria za usalama. Kanuni isiyokosea katika Terraform: kuona kila mabadiliko kwa kutumia mpango, kuuliza ufutaji usiotarajiwa, kuweka siri mbali na msimbo na kuweka jimbo kwa usalama. Mistari ya kuharibu na kubadilisha katika matokeo ya mpango ndio sehemu ambazo zinapaswa kusomwa kwa uangalifu zaidi.

Jukumu la maombi

Fanya AI itengeneze miundombinu midogo (k.m. ndoo ya kuhifadhi na sera ya ufikiaji) kwa kutumia kiolezo cha "Tengeneza mchoro wa miundombinu" hapo juu. Kisha: (1) uwe na ukaguzi wa kiolezo cha "vetting" kwa ruhusa za siri au * zilizopachikwa kwenye msimbo; (2) ikiwezekana, endesha init + plan katika akaunti ya jaribio na usome matokeo ya mpango na kiolezo cha "ufafanuzi wa mpango"; (3) kumbuka ufutaji/mabadiliko yoyote yasiyotarajiwa.

orodha ya ukaguzi

  • [ ] Niliongeza wingu, toleo la Terraform/mtoa huduma, na vikwazo vya usimbaji/mtandao kwenye kidokezo changu.
  • [ ] Hakuna siri ya maandishi wazi katika msimbo; maadili ya usahihi kutofautiana.
  • [ ] Nilipunguza IAM/ruhusa hadi ruhusa ndogo, * Sikuitumia.
  • [ ] Niliendesha mpango kabla ya kuomba na kusoma mstari wa matokeo kwa mstari.
  • [ ] Nilithibitisha kuwa hakuna uharibifu/ubadilishaji usiotarajiwa katika Mpango.
  • [ ] Nina hakika kuwa hali hiyo imehifadhiwa katika mazingira ya nyuma yaliyosimbwa, yaliyofungwa na yenye vikwazo.