Vienetas 2 / 11

Automatizavimo scenarijai: saugus Bash, PowerShell ir Python generavimas

Pelnas:

  • Galimybė kurti „Bash“, „PowerShell“ ir „Python“ automatizavimo scenarijus su aiškiais apribojimais ir apsauginius turėklus su dirbtiniu intelektu
  • Galimybė prie kiekvieno scenarijaus pridėti tokius principus kaip idempotencija, sausas paleidimas, klaidų apdorojimas ir atšaukimas bei pritaikyti ciklą „generuoti, sutvirtinti, patikrinti“
  • Gebėjimas suprasti, kad sukurto scenarijaus vykdymas nereiškia, kad jis yra saugus, ir įgyti įprotį prisiimti atsakomybę skaitant ir išbandant destruktyvias eilutes.

Automatizavimo scenarijai: saugus Bash, PowerShell ir Python generavimas naudojant AI

Didžiausias sistemos administratoriaus priešas – pasikartojantis rankų darbas: prisijungimas prie kiekvienos mašinos ir žurnalų valymas, to paties vartotojo atidarymas dvidešimtyje serverių, tas pats sveikatos patikrinimas kiekvieną rytą. Šis pasikartojimas yra atviras ir laiko, ir žmogiškųjų klaidų. Automatizavimo scenarijus yra nedidelė programa, kuri perduoda šias iteracijas kompiuteriui – dažniausiai rašoma Bash (apvalkalo komandų kalba) Linux pasaulyje, PowerShell (Microsoft automatizavimo apvalkalas) Windows pasaulyje ir Python, skirta nuo platformos nepriklausomam darbui. AI neįtikėtinai greitai sukuria, paaiškina ir tobulina pirmąjį šių scenarijų juodraštį. Bet scenarijus nėra tekstas, tai jėga, veikianti jūsų sistemoje; Skirtingai nuo Excel formulės, jei ji neteisinga, ji ištrina failą, sustabdo paslaugą ir nutraukia prieigą. Štai kodėl šio įrenginio pažadas yra toks: AI parašo scenarijų, jūs jį perskaitote, išbandote ir paleidžiate prisiimdami atsakomybę.

Šiame skyriuje sužinosite, kaip kurti saugius, skaitomus ir atkuriamus scenarijus naudojant AI; Gelbėjimo principai, tokie kaip idempotencija (du kartus paleidus tą patį scenarijų nepadaroma žalos) ir sausas paleidimas; ir sužinosite, kokius patikrinimus scenarijus turi atlikti prieš paleisdamas jį į gamybą.

Kodėl scenarijų kūrimas naudojant AI yra toks galingas?

Net patyręs administratorius gali mintinai nežinoti tikslios „Bash“ ciklo sintaksės, „PowerShell“ cmdlet (komandos) ar „Python try / išskyrus bloką“ parametrų. Dirbtinis intelektas akimirksniu užpildo šią spragą: jūs paaiškinate ketinimą paprasta turkų kalba, ir jis sukuria darbo kontūrą. Be to, AI galite duoti esamą scenarijų ir pasakyti „paaiškinkite tai“, „pridėti klaidų tvarkymą“, „padaryti jį lengviau skaitomu“. Tai sutrumpina mokymosi kreivę ir paskatina jaunesnius komandos narius paspartinti.

Tačiau su galia ateina ir atsakomybė. Dažniausiai AI sukurtas scenarijus teisingai įrašo „laimingą kelią“ (jei viskas gerai); bet gali praleisti kraštutinius atvejus (trūksta failo, pilnas diskas, išjungtas tinklas) arba daryti pavojingas prielaidas. Taigi pagalvokite apie scenarijaus generavimą naudojant AI trimis etapais: generuokite, sustiprinkite, patikrinkite.

Žingsnis po žingsnio: saugus scenarijaus generavimas

  1. Aiškiai parašykite ketinimą ir apribojimą. Kokia operacinė sistema, kuri apvalkalo versija, kokie failų keliai, kokios teisės? Kaip „Ubuntu 22.04, Bash 5, sudo ne root, paleisti tik pagal /opt/app/logs“. Dviprasmiška paklausa sukuria pavojingą prielaidą.
  2. Klauskite apsauginių turėklų. Reikalauti, kad scenarijus „stop gedus“ (nustatyti -euo pipefail programoje „Bash“), paraginti patvirtinti destruktyvias operacijas, sukurti atsarginę kopiją prieš naudojant ir sauso veikimo režimą. Šie apsauginiai turėklai užfiksuoja krašto būsenas, kurias AI apeina.
  3. Rašyk idempotentas. Antrą kartą paleistas scenarijus neturėtų sukelti klaidų ar sugadinti. Sukurkite logiką „praleisti, jei vartotojas jau yra“, „sukurkite katalogą, jei jo nėra, nelieskite jo, jei jis yra“. Tai leidžia automatikai vėl ir vėl saugiai veikti.
  4. Skaityti ir suprasti. Perskaitykite kiekvieną sukurtą eilutę. Paprašykite AI atskirai pažymėti destruktyviąsias komandas (rm, Remove-Item, DROP).
  5. Bandymas su sausa eiga. Pirmiausia paleiskite jį režimu „nurodymas, ką daryti“, o ne atlikdami faktines operacijas. Jei išvestis yra tokia, kokios tikitės, perjunkite į tikrąjį režimą ir pirmiausia į bandymo įrenginį.
  6. Paruoškite savo sugrįžimą. Ar scenarijus daro atsargines kopijas? Ar žinote, kaip atkurti atsarginę kopiją? Ar vyksta medienos ruoša, ar vėliau pamatysite, ką ji daro?
Patarimas: kiekviename destruktoriaus scenarijuje turi būti kintamasis DRY_RUN=true ir vėliavėlė --apply. Numatytasis elgesys yra rašyti, kas atsitiks, nieko neištrinant; Tegul tikrasis ištrynimas veikia tik tuo atveju, jei aiškiai nurodyta --apply. Šis vienas įprotis apsaugo nuo visą karjerą trunkančių nelaimių.

trys mini dėklai

1 atvejis – Idempotencija išsaugota 3 valandas. Administratorius parašė scenarijų, kuris įdiegė tą patį stebėjimo agentą 25 serveriuose. Pirmoji versija nebuvo ideali: ji sulaužė konfigūraciją antrą kartą, jei agentas jau buvo įdiegtas. Inžinierius turėjo AI pridėti logiką „patikrinkite, ar jis įdiegtas, praleiskite, jei yra“. Per kitą priežiūros langą scenarijus netyčia suveikė du kartus, bet tai nepadarė jokios žalos. Dėl „Idempotency“ 25 serverių atkūrimas tapo nereikalingas.

2 atvejis – sausas paleidimas išsaugojo šakninį katalogą. Viena komanda gavo „Bash“ scenarijų, kuris išvalė senas atsargines kopijas. Jei kintamasis buvo tuščias, kelias tapo / vietoj /backups/ - klasikinis pavojus. Inžinierius pirmą kartą paleido jį DRY_RUN režimu, užstojo, kai išvestyje pamatė eilutę, panašią į rm -rf /, ir pridėjo kintamojo patikrinimą (: "${BACKUP_DIR:?negali būti tuščias}"). Sausas bėgimas užfiksavo klaidą, kuri nuvalys visą diską prieš pradedant jį gaminti.

3 atvejis – klaidų valdymas neleido jam pabusti vieną naktį. „PowerShell“ scenarijus archyvavo žurnalus, kai diskas buvo pilnas. Pirmoji versija tyliai sugestų, jei tinklo dalis būtų nepasiekiama ir toliau pildytų diską. Prie AI buvo pridėta „Patikrinkite sėkmę kiekviename žingsnyje, jei nepavyksta, praneškite el. paštu ir sustokite“. Po savaitės stulpas buvo sulaužytas; Scenarijus sustojo ir perspėjo, diskas neužpildytas, niekas nepabudo 3 val.

Keturi kopijuojami šablonai

1) saugaus Bash scenarijaus generavimas:

Jūsų vaidmuo: vyresnysis Linux automatikos inžinierius. Parašykite scenarijų Ubuntu 22.04 / Bash 5. Tikslas: [tikslas]. Taisyklės: - Pradėkite nuo "set -euo pipefail". - Patvirtinkite reikalingus kintamuosius naudodami ": ${VAR:?}". - Atlikite destruktyvias operacijas su numatytuoju DRY_RUN=true; Leiskite tikrajai programai paleisti tik su --apply vėliava. - Užregistruokite kiekvieną žingsnį į stdout, sustokite su reikšmingu pranešimu apie klaidą. - Padarykite jį idempotentu (kad nepadarytų žalos antrajame važiavime). Tada: atskirai pažymėkite galimai griaunančias eilutes ir parašykite 3 atvejus, kuriuos turiu išbandyti prieš gamybą.

2) Esamo scenarijaus sustiprinimas:

Paruoškite šį scenarijų gamybai: (1) pridėkite klaidų tvarkymą ir registravimą, (2) paverskite jį idealiu, (3) padėkite destruktyvias komandas už sauso paleidimo, (4) išskleiskite sunkiai užkoduotus kintamojo kelius ir paslaptis. Trumpai aprašykite kiekvieną pakeistą eilutę ir kodėl. Scenarijus: [scenarijus]

3) saugus „PowerShell“ automatizavimas:

Jūsų vaidmuo: Windows automatizavimo ekspertas. Parašykite su PowerShell 5.1 suderinamą scenarijų. Tikslas: [tikslas]. Taisyklės: - Pradėkite nuo "$ErrorActionPreference = 'Stop'". - Pridėkite -WhatIf palaikymą prie destructor cmdlet (numatytasis WhatIf). - Kiekvieną veiksmą apvyniokite try/catch, žurnalo klaida. - Kredencialų kodavimas; Naudokite parametrą arba saugią įvestį. Pažymėkite destruktyvias linijas ir parašykite anuliavimo veiksmus.

4) Cron / tvarkaraščio išraiškos dekodavimas ir patikrinimas:

Paaiškinkite šį cron teiginį paprasta turkų kalba ir parašykite kitus 3 vykdymo laikus: [išraiška] Be to, jei mano tikslas yra „[tikslas]“, ar šis teiginys teisingas, ar yra jūsų siūlomas pataisymas? Taip pat atkreipkite dėmesį į laikotarpio poveikį.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Parašykite man scenarijų, kuris išvalo žurnalą.

Šis raginimas pavojingas: neaišku, kuri OS, koks katalogas, koks amžiaus limitas, koks apsauginis turėklas. Dirbtinis intelektas gali pateikti vieno pamušalo, destruktyvų ir nepatikrinamą RM.

Galingas raginimas:

Jūsų vaidmuo: vyresnysis Linux automatikos inžinierius. Parašykite žurnalo valymo scenarijų Ubuntu 22.04 / Bash. Ištrinkite tik .log failus iš /opt/app/logs, kurie yra senesni nei 30 dienų. Taisyklės: nustatyti -euo pipefail; Patvirtinkite BACKUP_DIR ir LOG_DIR kintamuosius (sustabdykite, jei tuščias); žurnalo failų sąrašas prieš ištrinant; Tegul DRY_RUN=true yra numatytasis, tikrasis trynimas tik naudojant --apply; Tebūnie idempotentas. Pažymėkite destruktyvias linijas ir parašykite 3 scenarijus, kuriuos turėčiau išbandyti.

funkcija

Silpnas/greitas scenarijus

užgrūdintas scenarijus

Klaidų tvarkymas

Ne, tyli nesėkmė

set -euo pipefail, try/catch

destruktyvus veiksmas

Veikia tiesiogiai

Sausas paleidimas + atidaryta kontrolinė vėliavėlė

Paleisti iš naujo

gali pakenkti

Idempotiškas, saugus

slaptas valdymas

kietai užkoduotas

Kintamasis / paslėptas įvestis

anuliuoti

Nėra

Atsarginės kopijos + atkūrimo veiksmas

Dažnos klaidos

  • Paleidžiamas destruktyvus scenarijus be sauso paleidimo. Jei nematote scenarijaus, kuriame yra rm, Remove-Item, DROP first, sausas režimas kainuoja diską.
  • Praleiskite nulinio kintamojo tikrinimą. Tuščias kelio kintamasis daro / vietoj /backups/; : būtinai patvirtinkite naudodami „${VAR:?}“.
  • Idempotencijos pamiršimas. Scenarijus nutrūksta paleidžiant du kartus, todėl automatika tampa nepatikima.
  • Griežtos kodavimo paslaptys. Slaptažodžio ir rakto įrašymas į scenarijų yra nutekėjimas, kai bendrinate tą scenarijų.
  • Bandymai gamyboje. Atlikti pirmąjį produkcijos pasirodymą reiškia repetuoti scenoje; pirmiausia išbandykite mašiną.
Dėmesio: nepriimkite AI pateikto scenarijaus tik todėl, kad „jis veikė, vadinasi, jis teisingas“. Vien todėl, kad jis veikia, dar nereiškia, kad jis nėra destruktyvus. Scenarijus gali paleisti laimingu keliu ir ištrinti duomenis kraštutinėje būsenoje; Tikras išbandymas yra kraštutinės bylos.

Apibendrinant

Automation scripts eliminate repetition and reduce human error; AI is incredibly fast at generating, explaining, and hardening these scripts. Bet scenarijus yra darbo jėga: jei jis neteisingas, ištrina, sustabdo, pertraukia. So establish the “produce, harden, verify” cycle. Į kiekvieną destruktyvų scenarijų įtraukite klaidų tvarkymą, idempotenciją, sausą paleidimą ir atsarginę dalį. Extract the secrets to the variable, do the first run on the test machine. AI scenarijus rašo; It's your job to read it, test it, and take responsibility for running it.

Taikymo užduotis

Choose a task that you repeat manually in your job (e.g. log cleanup, user opening, health check). Request an outline from AI with the “Secure Bash script” or “PowerShell secure automation” template above. Read the generated script line by line and mark the destructive lines. Run it in dry-run mode first on a test machine, compare the output with your expectation. Then give the script back to AI and refine it with the "harden" template and note the 5 differences between the two versions.

kontrolinis sąrašas

  • [ ] Have I included restrictions such as OS, shell version, paths and rights in the prompt?
  • [ ] Is the script fault-tolerant with set -euo pipefail / $ErrorActionPreference='Stop'?
  • [ ] Are destructive operations behind dry-run/-WhatIf and requiring an explicit check flag?
  • [ ] Is the script idempotent (safe on second run)?
  • [ ] Ar aš ištraukiau paslaptis į kintamąjį / slaptą įvestį, o ne jas sunkiai užkodavau?
  • [ ] Have I done the first run on the test machine and prepared a return plan?