Vienetas 5 / 11

Konfigūracijos valdymas: konfigūracijos generavimas, patvirtinimas ir dreifo fiksavimas

Pelnas:

  • Dviejų sluoksnių patikrinimas generuojant konfigūraciją su dirbtiniu intelektu ir tikrinant sintaksę bei užklausant prasmę
  • Gebėjimas padaryti konfigūracijos dreifą matomą lyginant dirbtinį intelektą ir užkirsti tam kelią aukso šaltinio ir šablono principu
  • Galimybė pašalinti paslaptis iš konfigūracijos korpuso, daryti atsargines kopijas ir įgyti laipsniško įgyvendinimo su kanarėlėmis discipliną

Konfigūracijos valdymas: generavimas, patvirtinimas ir konfigūracijų poslinkio gaudymas naudojant AI

Serveris arba paslauga nustato savo elgseną iš konfigūracijos failų: šiuose failuose yra parašyta, kokio prievado žiniatinklio serveris klausys, kiek jungčių priims duomenų bazė, ar saugos nustatymas įjungtas, ar išjungtas. Konfigūracijos valdymas yra disciplina, užtikrinanti, kad šie nustatymai būtų tikslūs, nuoseklūs ir vienodi visuose serveriuose. Skamba paprastai, bet praktiškai būtent iš čia kyla košmarai: viena neteisinga eilutė sugenda paslauga, vienas nenuoseklus nustatymas sukelia nelaimę „jis veikė mano mašinoje“. Čia AI labai greitai generuoja konfigūraciją, aprašo sudėtingą nustatymų bloką, lygina dvi konfigūracijas ir gaudo sintaksės klaidas. Tačiau nekintama taisyklė: AI sukuria konfigūracijos projektą; Jūs esate atsakingi už jo patvirtinimą, išbandymą bandomojoje aplinkoje ir įdiegimą gamyboje.

Šiame skyriuje aptariamos dreifo (konfigūracijos dreifo – serverių tolimas vienas nuo kito ir standarto laikui bėgant), idempotentinės konfigūracijos, šablonų kūrimo ir tikrinimo sąvokos; Išmoksite saugios konfigūracijos generavimo ir palyginimo su AI.

Konfigūracijos dreifas: tylus žudikas

Pavojingiausia konfigūracijos problema yra ne staigus griūtis, o klastingas slydimas. Drift yra serverių nukrypimas vienas nuo kito ir nuo reikalaujamo standarto laikui bėgant. Kažkas vieną naktį rankiniu būdu pakeičia skubios padėties nustatymą, bet to neįrašo; kažkas kitas įveda kitą reikšmę kitame serveryje; Dešimt serverių, kurie turėjo būti „tas pats“ po mėnesių, dabar veikia dešimt skirtingų veiksmų. Dreifo pavojus yra tai, kad jis yra nematomas, kol iškyla problema – tada vienas serveris elgiasi kitaip nei kiti, o diagnozė trunka valandas. Dirbtinis intelektas gali padaryti matomą dreifą, padėdamas dvi konfigūracijas greta ir išvardydamas skirtumus. Tačiau tikrasis sprendimas yra kultūrinis: konfigūracijos valdymas ne rankiniu būdu, o iš versijų ir kartojamo šaltinio.

Patarimas: laikykitės „auksinio šaltinio“ principo: turėkite vieną teisingą kiekvienos konfigūracijos versiją (pvz., „Git“ saugyklą). Reguliariai palyginkite realią situaciją serveriuose su šiuo auksiniu šaltiniu; Jei yra skirtumų, ištaisykite nukrypimą arba atnaujinkite šaltinį. AI pagreitina šį palyginimą.

Žingsnis po žingsnio: saugus konfigūracijos keitimas

  1. Atsarginė dabartinės būsenos kopija. Prieš keisdami konfigūraciją, pasidarykite jos kopiją. Tai vienintelė grąžinimo garantija.
  2. Sudarykite pakeitimo juodraštį naudodami AI. Paaiškinkite tikslą, pvz., „įjungti gzip glaudinimą nginx šiems tipams“; Tegul AI sukuria atitinkamą bloką. Nurodykite, kuriai versijai ji skirta, nes sintaksė skiriasi priklausomai nuo versijos.
  3. Patikrinkite sintaksę. Dauguma paslaugų turi patvirtinimo komandą (nginx -t, apachectl configtest, sshd -t). Paklauskite AI apie šią komandą ir būtinai ją paleiskite. Dėl netinkamos konfigūracijos paslauga nebus paleista.
  4. Patikrinkite prasmę. Sintaksė gali būti tinkama, bet ji gali padaryti neteisingą dalyką. Paklauskite AI „ką tiksliai veikia šis blokas, kokį poveikį jis daro saugumui ar veikimui?
  5. Išbandykite tai bandomojoje aplinkoje. Pirmiausia pritaikykite etapų pakeitimą ir iš naujo įkelkite paslaugą, stebėkite elgesį.
  6. Taikyti palaipsniui ir stebėti. Neeikite į gamybą iš karto, o pirmiausia įdiekite ją serveryje (kanarėlėje), stebėkite, tada publikuokite. Jei kyla problemų, atkurkite iš atsarginės kopijos.

Šablonai ir konfidencialūs duomenys

Configurations often contain values ​​that vary depending on the environment: database address, password, port. Užuot rašę šias reikšmes kaip konstantas konfigūracijos korpuse, naudokite šablonus ir kintamuosius: korpusas išlieka toks pat, reikšmės gaunamos iš išorės, priklausomai nuo aplinkos. Taigi bandant ir gaminant veikia tas pats šablonas, skiriasi tik kintamieji. Critical point: passwords and keys should not be written explicitly in the configuration file. Get these from a secret manager or environment variable. Prašydami dirbtinio intelekto šablono, nurodykite „išskleisti kintamojo paslaptis, niekada nerašyti aiškių slaptažodžių į kūną“.

trys mini dėklai

1 atvejis. Palyginus dreifą. Vienas iš aštuonių žiniatinklio serverių su pertrūkiais veikė lėtai. Inžinierius AI davė užmaskuotas aštuonių serverių konfigūracijas ir nurodė skirtumus. AI pažymėjo vieną ryšio telkinio limitą probleminiame serveryje kaip pusę kitų – tai nedokumentuotas rankinis pakeitimas, atliktas prieš kelis mėnesius. Dreifas buvo nematomas; palyginimas atskleidė tai per 5 minutes.

2 atvejis – patvirtinimo komanda užkirto kelią avarijai. Administratorius SSH serveryje pridėjo naują griežtinimo nustatymą. AI grąžino bloką, kuris atrodė pagrįstas. Prieš pateikdamas paraišką, inžinierius atliko sshd -t patikrinimą; Pasirodo, toje SSH versijoje direktyva buvo parašyta kitaip. Jei pakeitimas buvo aktyvus ir paslauga buvo paleista iš naujo, visa nuotolinė prieiga gali būti nutraukta. Patvirtinimo komanda neleido patekti į aklavietę.

3 atvejis – šablonas nustojo tekėti. Komanda rankiniu būdu nukopijavo duomenų bazės konfigūraciją į kiekvieną aplinką ir rašė faile atidarytą slaptažodį. Kopija atsitiktinai pateko į bendrinamą saugyklą. Padedama dirbtinio intelekto, komanda pakeitė konfigūraciją į šabloną: dabar slaptažodis buvo gautas iš aplinkos kintamojo, kuriame yra tik ${DB_PASSWORD}. Kitas nutekėjimo pavojus buvo nekenksmingas, nes korpuse nebuvo jokios paslapties.

Keturi kopijuojami šablonai

1) Konfigūracijos bloko generavimas:

Jūsų vaidmuo: vyresnysis sistemų inžinierius. Sugeneruokite [service + version, pvz., nginx 1.24] konfigūracijos bloką. Paskirtis: [paskirtis].Susitarimai: naudoti versijai tinkamą sintaksę; Niekada nerašykite paslapčių kūnui, jis eina į kintamąjį; Paaiškinkite kiekvieną direktyvą trumpu komentaru. Tada suteikite man patvirtinimo komandą, kurią turiu paleisti prieš taikydamas šį pakeitimą.

2) Dviejų konfigūracijų palyginimas (dreifas):

Toliau pateikiama užmaskuota dviejų tą patį vaidmenį atliekančių serverių (A ir B) konfigūracija. Išvardykite visus reikšmingus skirtumus tarp jų lentelės forma; Parašykite galimą kiekvieno skirtumo poveikį elgesiui. Pažymėkite, kurie skirtumai kelia pavojų. Nepridėkite komentarų, tiesiog parodykite tikrus skirtumus. A: [...] B: [...]

3) Konfigūracijos aprašymas ir rizikos auditas:

Eilutę po eilutės apibūdinkite konfigūracijos bloką: ką daro kiekviena direktyva, kuo ji skiriasi nuo numatytosios, kokį poveikį ji daro saugumui ar veikimui? Taip pat pažymėkite nustatymus, kurie gali būti rizikingi arba pavojingi. Blokas: [konfigūracija]

4) Konvertavimas į šabloną:

Paverskite šią fiksuotų reikšmių konfigūraciją į šabloną: ištraukite reikšmes, kurios skiriasi priklausomai nuo aplinkos (adresas, prievadas, slaptažodis) į kintamuosius, visiškai pašalinkite paslaptis iš kūno ir nurodykite, iš kur jos bus gautos (aplinkos kintamasis / paslapčių tvarkyklė). Nepalikite atvirų slaptažodžių korpuse. Konfigūracija: [config]

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

pataisyti mano nginx konfigūraciją. [įklijuoti konfigūraciją]

„Pataisymas“ yra neaiškus, nėra versijos, tikslo ir konfigūracijos kaukės. AI nežinos, ką taisyti, ir netgi gali sugadinti veikiančią nuostatą.

Galingas raginimas:

Jūsų vaidmuo: vyresnysis sistemų inžinierius. Aš naudoju nginx 1.24. Žemiau esančioje užmaskuotoje konfigūracijoje noriu atidaryti naršyklės talpyklą statiniams failams 7 dienoms, tačiau nepažeidžiant esamų saugos antraščių. Pateikite man: (1) eilutes, kurias reikia pridėti / keisti, (2) ką kiekviena eilutė daro, (3) patvirtinimo komandą, kurią reikia vykdyti prieš taikant, (4) atsarginį veiksmą, jei kyla problemų. Konfigūracija: [maskuotas]

Prieiga

Dreifo rizika

grąžinti

slaptas saugumas

Rankiniu būdu keiskite serverį pagal serverį

labai aukštas

neapibrėžtas

Silpnas, akivaizdus slaptažodis

Aukso šaltinis + šablonas + kintamasis

žemas

Versijų istorija

Stiprus, paslaptis išaiškinta

Programa be patvirtinimo

Paslauga gali sugesti

Atsarginė kopija + patvirtinimas + kanarėlė

Garantija

Dažnos klaidos

  • Praleidžiama patvirtinimo komanda. Netinkama konfigūracija pritaikyta nepaleidus nginx -t, sshd -t nepaleis paslaugos.
  • Keičiama be atsarginės kopijos. Vienintelė grąžinimo garantija yra kopija prieš modifikaciją; Be jo kiekvienas pokytis yra azartas.
  • Paslapčių rašymas atvirai ant kūno. Kai konfigūracija su slaptažodžiais bendrinama arba nutekinama, tai yra tiesioginis pažeidimas.
  • Drifto ignoravimas. Dėl nedokumentuotų serverių skirtumų atsiranda klastingų gedimų, dėl kurių diagnostika pailgėja valandomis.
  • Versijos nenurodyta. Konfigūracijos sintaksė skiriasi priklausomai nuo versijos; Jei nepasakysite AI versijos, ji gali sukurti netinkamus blokus.
Atsargiai: vien todėl, kad konfigūracija yra sintaksė galiojanti, dar nereiškia, kad ji teisinga. nginx -t gali pasakyti "sintaksė gerai", tačiau nustatymas taiko neteisingą elgesį be klaidų. Po sintaksės patikrinimo būtinai patikrinkite reikšmę ir elgesį.

Apibendrinant

Konfigūracijos valdymas užtikrina, kad nustatymai būtų tikslūs, nuoseklūs ir vienodi visuose serveriuose. Klastingiausias priešas yra dreifas: nedokumentuoti rankiniai pakeitimai išskiria serverius. AI yra galingas partneris, generuojantis, aiškinantis ir lyginant konfigūracijas, kad būtų matomas dreifas. Prieš pakeitimą sukurkite atsarginę kopiją, patikrinkite sintaksę naudodami patvirtinimo komandą, užklauskite prasmės su AI, taikykite palaipsniui bandymo aplinkoje ir su canary. Pašalinkite paslaptis iš kūno ir naudokite šablonus bei kintamuosius. Pirmiausia užkirskite kelią dreifui, vadovaudamiesi aukso šaltinio principu.

Taikymo užduotis

Paimkite dviejų panašių serverių konfigūracijos failą iš savo aplinkos, užmaskuokite jautrias sritis ir PG atlikite poslinkio analizę naudodami anksčiau pateiktą šabloną „Dviejų konfigūracijų palyginimas“. Įvertinkite rastus skirtumus rizikos požiūriu. Tada konvertuokite vieną iš šių konfigūracijų į šabloną be paslapčių naudodami šabloną „Konvertuoti į šabloną“ ir suplanuokite, kur gauti kintamuosius. Galiausiai sukurkite nedidelį pakeitimą naudodami šabloną „Generuoti konfigūracijos bloką“ ir atkreipkite dėmesį į patvirtinimo komandą. Apibendrinkite procesą į 6 elementus.

kontrolinis sąrašas

  • [ ] Ar prieš pakeitimą padariau atsarginę konfigūracijos kopiją?
  • [ ] Ar AI nurodžiau paslaugos versiją ir paprašiau versijai tinkamos sintaksės?
  • [ ] Ar patikrinau sintaksę su patvirtinimo komanda (-t ir pan.)?
  • [ ] Net jei sintaksė galioja, ar aš dar patvirtinau reikšmę ir elgesį?
  • [ ] Ar ištraukiau paslaptis iš kūno ir naudojau kintamąjį / šabloną?
  • [ ] Ar palyginau kelių serverių dreifą ir suderinau jį su aukso šaltiniu?