Μονάδα 3 / 11

Διαχείριση Υποδομής ως Κώδικας: Τεχνητή Νοημοσύνη με Terraform και IaC

Κέρδη:

  • Ικανότητα κατανόησης της ιδέας του IaC και του κύκλου εργασίας του Terraform (έναρξη, σχεδιασμός, εφαρμογή, κατάσταση, ενότητα) και η τεχνητή νοημοσύνη να παράγει ασφαλή προσχέδια HCL
  • Δυνατότητα ελέγχου κάθε αλλαγής με ένα σχέδιο πριν από την εφαρμογή και σύλληψη απροσδόκητων γραμμών καταστροφής/αντικατάστασης
  • Δυνατότητα εφαρμογής των αρχών διατήρησης μυστικών εκτός κώδικα, διατήρησης της κατάστασης με ασφάλεια και ελαχιστοποίησης των αδειών IAM

Στο παρελθόν, η ρύθμιση ενός διακομιστή ήταν θέμα κλικ μέσω ενός πίνακα cloud: δημιουργήστε μια εικονική μηχανή, ρυθμίστε το δίκτυο, προσθέστε τον κανόνα ασφαλείας. Αυτή η μέθοδος ήταν αργή, επιρρεπής σε σφάλματα και ανεπανάληπτη — ήταν σχεδόν αδύνατο να ρυθμιστεί το ίδιο περιβάλλον για δεύτερη φορά. Σήμερα, η διαχείριση της υποδομής γίνεται ως κώδικας. Το IaC (Infrastructure as Code) είναι μια προσέγγιση για την περιγραφή πόρων cloud, όπως διακομιστές, δίκτυα και βάσεις δεδομένων σε αρχεία κειμένου και όχι χειροκίνητα. Αυτά τα αρχεία βρίσκονται στον έλεγχο έκδοσης (Git). Μπορείτε να δείτε ποιος άλλαξε τι, πότε και τι. Μπορείτε να ρυθμίσετε την ίδια υποδομή πολλές φορές, με τον ίδιο ακριβώς τρόπο, με μία εντολή.

Το πιο κοινό εργαλείο IaC είναι το Terraform. Το Terraform παίρνει τους ορισμούς που γράφετε σε μια αναγνώσιμη γλώσσα που ονομάζεται HCL (HashiCorp Configuration Language — γλώσσα διαμόρφωσης Terraform), τους μεταφράζει στο API του παρόχου cloud (AWS, Azure, GCP) και δημιουργεί τους πόρους. Το AI γνωρίζει πολύ καλά το HCL και παράγει πολύπλοκα μπλοκ γρήγορα. Αλλά στο IaC, το κόστος ενός λάθους είναι υψηλό: ένας λάθος ορισμός μπορεί να εξαλείψει μια ολόκληρη βάση δεδομένων παραγωγής. Γι' αυτό ο χρυσός κανόνας στο Terraform είναι να βλέπεις κάθε αλλαγή με ένα 'σχέδιο' πριν την εφαρμόσεις.

Χρόνος εκτέλεσης του Terraform

Το Terraform λειτουργεί με τρεις βασικές εντολές — η γνώση αυτών είναι απαραίτητη προϋπόθεση για τον έλεγχο της εξόδου AI:

  • `terraform init`: Ξεκινά το έργο, κατεβάζει τα απαραίτητα πρόσθετα παρόχου.
  • `terraform plan`: Συγκρίνει την τρέχουσα κατάσταση με την επιθυμητή κατάσταση και δείχνει τι να προσθέσετε, τι να αλλάξετε, τι να διαγράψετε. Δεν εφαρμόζει τίποτα. Είναι το πιο κρίσιμο βήμα ασφαλείας.
  • `terraform apply`: Εφαρμόζει στην πραγματικότητα το Σχέδιο, δημιουργώντας/τροποποιώντας πόρους.

Επιπλέον, δύο έννοιες είναι ζωτικής σημασίας. Κατάσταση (αρχείο κατάστασης): Αυτό είναι το αρχείο όπου η Terraform διατηρεί την τρέχουσα κατάσταση των πόρων που διαχειρίζεται. Συνήθως αποθηκεύεται σε μια απομακρυσμένη και κλειδωμένη αποθήκη έτσι ώστε δύο άτομα να μην μπορούν να την αλλάξουν ή να την καταστρέψουν ταυτόχρονα. Ενότητα: Επαναχρησιμοποιήσιμο πακέτο διαμόρφωσης. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη λειτουργική μονάδα "ρυθμίστε ένα δίκτυο" σε πολλά έργα.

Συμβουλή: Το πιο επικίνδυνο σημάδι σε μια έξοδο Terraform είναι η καταστροφή ή -/+ (αντικατάσταση) των γραμμών στην έξοδο του σχεδίου. Αυτά σημαίνουν ότι ο πόρος θα διαγραφεί. Αν δείτε μια απροσδόκητη καταστροφή σε ένα σχέδιο, μην εφαρμόσετε ποτέ, πρώτα καταλάβετε γιατί εμφανίστηκε.

Βήμα προς βήμα: Γράψιμο IaC με AI

  1. Αποσαφηνίστε την επιθυμητή υποδομή. Να είστε συγκεκριμένοι όπως "ένα VPC, δύο υποδίκτυα, μία ομάδα ασφαλείας και ένα t3.micro EC2 στο eu-central-1".
  2. Καθορίστε τον πάροχο και την έκδοση. Ποιο cloud, ποια Terraform και ποια έκδοση παρόχου; Εάν δεν καθορίσετε μια έκδοση, η τεχνητή νοημοσύνη μπορεί να επιστρέψει παλιά/μη συμβατή σύνταξη.
  3. Ζητήστε να παραχθεί το προσχέδιο HCL. Ζητήστε επίσης μεταβλητές και εξόδους.
  4. Βγάλε το Secret. Οι τιμές όπως οι κωδικοί πρόσβασης και τα κλειδιά πρέπει να πηγαίνουν στη μεταβλητή και το μυστικό θησαυροφυλάκιο, όχι στον κώδικα.
  5. Εκτελέστε «init» + «plan». Διαβάστε την έξοδο του σχεδίου γραμμή προς γραμμή. Ελέγξτε για μη αναμενόμενες διαγραφές.
  6. Ξεκινήστε από μικρά, εφαρμόστε σταδιακά. Εφαρμόστε το πρώτα σε έναν απομονωμένο λογαριασμό/περιβάλλον δοκιμής.

Ασφάλεια: Ειδικοί κίνδυνοι για το IaC

Το IaC είναι τόσο επικίνδυνο όσο και ισχυρό. Τρία κρίσιμα σημεία:

  1. Υπάρχει ένα μυστικό στον κρατικό φάκελο. Η κατάσταση Terraform διατηρεί μερικές φορές ευαίσθητες τιμές, όπως κωδικούς πρόσβασης βάσης δεδομένων, σε απλό κείμενο. Μην τοποθετείτε ποτέ το State σε δημόσιο αποθετήριο. Χρησιμοποιήστε ένα κρυπτογραφημένο απομακρυσμένο backend με περιορισμένη πρόσβαση.
  2. Μην ενσωματώνετε μυστικά στο HCL. Γραμμές όπως το password="prod123" εγγράφονται μόνιμα στο ιστορικό Git. Αντίθετα, χρησιμοποιήστε μια μεταβλητή και δώστε την τιμή κατά το χρόνο εκτέλεσης από τη μεταβλητή περιβάλλοντος (TF_VAR_...) ή το μυστικό θησαυροφυλάκιο.
  3. Πολύ ευρεία άδεια IAM. Η τεχνητή νοημοσύνη μερικές φορές παράγει μπλοκ όπως το Action: "*" (επιτρέπω σε όλα) για να "το κάνει να λειτουργεί". Αυτό είναι μια ευπάθεια. περιορίστε την άδεια στο ελάχιστο απαιτούμενο.
Προσοχή: Μόλις ένα μυστικό εισέλθει στο ιστορικό του Git, παραμένει στο παρελθόν και μπορεί να παραβιαστεί, ακόμα κι αν διαγράψετε το αρχείο. Εάν δεσμευτείτε κατά λάθος, ακυρώστε αμέσως και περιστρέψτε το μυστικό. Δεν αρκεί μόνο η διαγραφή.

Επικίνδυνο σχέδιο πινακίδες πίνακα

Εκτύπωση σχεδίου

Σημασία

τι να κάνουμε

+δημιουργώ

Θα προστεθεί νέος πόρος

Γενικά ασφαλές, αναθεωρήστε όμως

~ ενημέρωση επί τόπου

Η πηγή θα αλλάξει επί τόπου

Επαληθεύστε τον αντίκτυπο (θα υπάρξει διακοπή λειτουργίας;)

-/+ αντικατάσταση

Θα διαγραφεί και θα ξαναδημιουργηθεί

ΠΡΟΣΟΧΗ: ενδέχεται να προκληθεί απώλεια δεδομένων

- καταστρέφουν

Ο πόρος θα καταστραφεί

ΣΤΟΠ: μην κάνετε ποτέ αίτηση αν δεν το περιμένετε

τρεις μίνι θήκες

Περίπτωση 1 — 2 ημέρες εργασίας σε 3 ώρες. Μια ομάδα επρόκειτο να γράψει το Terraform για να δημιουργήσει ένα νέο περιβάλλον δοκιμής (VPC, υποδίκτυα, βάση δεδομένων RDS, σύμπλεγμα ECS) αλλά μόλις είχαν μετακομίσει στο HCL. Περιέγραψαν την αρχιτεκτονική και τις εκδόσεις του AI και δημιούργησαν ένα αρθρωτό σχέδιο. Επαλήθευσαν κάθε ενότητα με το σχέδιο και το έθεσαν σε λειτουργία σε 3 ώρες. Θα τους έπαιρνε δύο ημέρες χειροκίνητης δοκιμής και λάθους.

Περίπτωση 2 — το σχέδιο διαγράφηκε. Ένας μηχανικός έτρεξε ένα σχέδιο χωρίς να εφαρμόσει έναν κώδικα ενημέρωσης που δημιουργήθηκε από AI. Η έξοδος περιείχε -/+ αντικατάσταση για τη βάση δεδομένων παραγωγής — το AI προσπάθησε να αντικαταστήσει ένα μη αντικαταστάσιμο πεδίο, το οποίο σήμαινε τη διαγραφή και την εκ νέου δημιουργία της βάσης δεδομένων. Ο μηχανικός σταμάτησε την εφαρμογή και άλλαξε την αλλαγή στην ασφαλή μέθοδο. Η συνήθεια του προγραμματισμού απέτρεψε μια καταστροφή.

Υπόθεση 3 — θαμμένη μυστική διαρροή. Ένας νεαρός, ο YZ εξέδωσε db_password = "S3cret!" Πέρασε τη γραμμή ως έχει και την έσπρωξε. Πιάστηκαν σε έλεγχο κώδικα. Ο κωδικός πρόσβασης ακυρώθηκε αμέσως και άλλαξε, η τιμή μετακινήθηκε σε μια μεταβλητή και τροφοδοτήθηκε από το μυστικό θησαυροφυλάκιο. Μάθημα: Δεν υπάρχουν ποτέ μυστικά απλού κειμένου στο HCL.

Τέσσερα πρότυπα με δυνατότητα αντιγραφής

1) Δημιουργία σχεδίου υποδομής:

Γράψτε την ακόλουθη υποδομή στο [CLOUD: AWS] με Terraform (έκδοση ~> 1.7): [ΛΙΣΤΑ ΠΗΓΩΝ]. Περιοχή [X]. Κανόνες:- Κάντε όλες τις ευαίσθητες τιμές μεταβλητές, μην τις ενσωματώσετε στο HCL.- Διορθώστε την έκδοση παρόχου (required_providers).- Ελαχιστοποιήστε τα δικαιώματα IAM, μην χρησιμοποιείτε το "*".- Επιστρέψτε το [X, Y] ως έξοδο. Δώστε κώδικα σπονδυλωτά και με επεξηγήσεις.

2) Ερμηνεία της παραγωγής του σχεδίου:

Αναλύστε το αποτέλεσμα του «terraform plan» παρακάτω. Καταχωρίστε με:(1) ποιοι πόροι προστέθηκαν/άλλαξαν/ΔΙΑΓΡΑΦΗΚΑΝ, (2) σειρές με κίνδυνο απώλειας ή διακοπής δεδομένων, (3) 3 ερωτήσεις που πρέπει να κάνω πριν υποβάλω αίτηση. Σχέδιο: [ΕΞΟΔΟΣ]

3) Εξετάστε το υπάρχον HCL για ασφάλεια:

Ελέγξτε τον ακόλουθο κώδικα Terraform για ασφάλεια: ενσωματωμένο μυστικό, υπερβολικά ευρεία άδεια IAM, κανόνας ανοιχτού δικτύου (0.0.0.0/0), μη κρυπτογραφημένος χώρος αποθήκευσης; Γράψτε κάθε εύρημα με σειρά σπουδαιότητας και διόρθωσης. Κωδικός: [HCL]

4) Μετατρέψτε τον επαναλαμβανόμενο κώδικα στη μονάδα:

Μετατρέψτε τον ακόλουθο επαναλαμβανόμενο κώδικα Terraform σε μια επαναχρησιμοποιήσιμη ενότητα: ποιες τιμές πρέπει να είναι οι μεταβλητές, ποια πρέπει να είναι η διεπαφή της μονάδας; Δείξτε επίσης παράδειγμα χρήσης. Κωδικός: [HCL]

Αδύναμη προτροπή / Ισχυρή προτροπή

Αδύναμο: "Δημιουργία βάσης δεδομένων με Terraform."

Αποτέλεσμα: ασαφές ποιο cloud, ποια μηχανή, ποια έκδοση, κρυπτογραφημένη ή όχι. Με τη σύνταξη παλαιού τύπου, το AI μπορεί να παρέχει ένα δημοσίως διαθέσιμο παράδειγμα που ενσωματώνει τον κωδικό πρόσβασης στον κώδικα.

Ισχυρό: "Δημιουργήστε μια παρουσία RDS PostgreSQL 15 στο AWS με Terraform ~> 1.7. Κάντε τον κωδικό πρόσβασης μεταβλητή, μην τον ενσωματώσετε στον κώδικα. Ο χώρος αποθήκευσης είναι κρυπτογραφημένος, προσβάσιμος μόνο από ιδιωτικό υποδίκτυο, όχι δημόσιος. Διορθώστε την έκδοση παρόχου. Επιστρέψτε το τελικό σημείο ως έξοδο."

Διαφορά: η δεύτερη προτροπή δίνει τον κινητήρα, την έκδοση, την κρυπτογράφηση, τον περιορισμό δικτύου και τον μυστικό κανόνα — η έξοδος είναι ασφαλής και κοντά στην παραγωγή.

Συνήθη λάθη

  • Να κάνετε "αίτηση" χωρίς να κάνετε "σχέδιο". Το πιο ακριβό λάθος στο IaC. πάντα να σχεδιάζεις πρώτα.
  • Ενσωμάτωση μυστικού στο HCL. Δημιουργεί μόνιμη διαρροή στο ιστορικό Git.
  • Αποθήκευση Κράτος ανασφαλής. Μια μη κρυπτογραφημένη, ξεκλείδωτη, δημόσια κατάσταση είναι καταστροφή.
  • Δεν διορθώνεται η έκδοση. Η χρήση παρόχου χωρίς καθορισμό έκδοσης θα οδηγήσει σε ξαφνικές αποτυχίες στο μέλλον.
  • *`Ενέργεια: Ευρεία άδεια όπως """.** Παραβιάζει την αρχή του ελάχιστου προνομίου.
  • Αγνοώντας την απροσδόκητη «καταστροφή». Εφαρμογή των γραμμών διαγραφής στο Σχέδιο χωρίς αμφισβήτηση.

Συνοπτικά

Το IaC μετατρέπει την υποδομή σε επαναλήψιμο, εκδόσιμο και ελεγχόμενο κώδικα. Το πιο κοινό εργαλείο είναι το Terraform. Η τεχνητή νοημοσύνη παράγει γρήγορα στελέχη HCL, αλλά πρέπει να παρέχετε την έκδοση, λεπτομέρειες σχετικά με το cloud και κανόνες ασφαλείας. Ο αλάνθαστος κανόνας στο Terraform: να βλέπεις κάθε αλλαγή με ένα σχέδιο, να ρωτάς για απροσδόκητες διαγραφές, να κρατάς μυστικά μακριά από τον κώδικα και να διατηρείς το κράτος ασφαλές. Οι γραμμές καταστροφής και αντικατάστασης σε μια έξοδο σχεδίου είναι οι θέσεις που πρέπει να διαβαστούν πιο προσεκτικά.

Εργασία εφαρμογής

Ζητήστε από το AI να δημιουργήσει μια μικρή υποδομή (π.χ. έναν κάδο αποθήκευσης και μια πολιτική πρόσβασης) χρησιμοποιώντας το παραπάνω πρότυπο "Δημιουργία σκίτσου υποδομής". Στη συνέχεια: (1) έχετε τον έλεγχο του προτύπου "ελέγχου" για μυστικά ή * δικαιώματα ενσωματωμένα στον κώδικα. (2) εάν είναι δυνατόν, εκτελέστε το init + plan σε έναν δοκιμαστικό λογαριασμό και διαβάστε την έξοδο του σχεδίου με το πρότυπο "ερμηνεία σχεδίου". (3) σημειώστε τυχόν απροσδόκητες διαγραφές/αλλαγές.

λίστα ελέγχου

  • [ ] Πρόσθεσα σύννεφο, έκδοση Terraform/παροχέα και περιορισμούς κρυπτογράφησης/δικτύου στην προτροπή μου.
  • [ ] Δεν υπάρχει μυστικό απλού κειμένου στον κώδικα. μεταβλητές τιμές ακριβείας.
  • [ ] Περιόρισα το IAM/δικαιώματα σε ελάχιστα δικαιώματα, * Δεν το χρησιμοποίησα.
  • [ ] Έτρεξα το σχέδιο πριν από την εφαρμογή και διάβασα την έξοδο γραμμή προς γραμμή.
  • [ ] Επιβεβαίωσα ότι δεν υπάρχει απροσδόκητη καταστροφή/αντικατάσταση στο Σχέδιο.
  • [ ] Είμαι βέβαιος ότι η κατάσταση διατηρείται σε ένα κρυπτογραφημένο, κλειδωμένο και περιορισμένο backend.