กำไร:
- ความสามารถในการสร้างโค้ด IaC (Terraform, Ansible) ด้วยปัญญาประดิษฐ์พร้อมสิทธิ์ที่แคบที่สุดและค่าเริ่มต้นที่ปลอดภัย และเข้าใจแนวทางการประกาศ
- ความสามารถในการป้องกันการสูญหายของข้อมูลโดยการอ่านและบันทึกบรรทัดการลบและบังคับการแทนที่ก่อนที่จะใช้แผน/เอาต์พุตการตรวจสอบ
- ความสามารถในการป้องกันการรั่วไหลของความลับโดยเก็บไฟล์สถานะเข้ารหัส ล็อค ในแบ็กเอนด์ระยะไกล และทำลายการเปลี่ยนแปลงเป็นขั้นตอนเล็กๆ ที่ย้อนกลับได้
การจัดการโครงสร้างพื้นฐานเป็นรหัส (IaC): Terraform, Ansible และการควบคุมแผนด้วย AI
ในอดีต การตั้งค่าเซิร์ฟเวอร์ทำได้ด้วยการคลิกด้วยตนเอง คำสั่ง และบันทึกส่วนตัว ผลลัพธ์ที่ได้คือเซิร์ฟเวอร์ "สโนว์เฟลก" ที่ไม่สามารถทำซ้ำได้ ซึ่งไม่มีใครทราบวิธีการตั้งค่าอย่างชัดเจน Infrastructure as Code (IaC) เป็นแนวทางที่ยุติความวุ่นวายนี้: เซิร์ฟเวอร์ เครือข่าย กฎความปลอดภัยไม่ได้ถูกกำหนดด้วยมือ แต่กำหนดโดยไฟล์ข้อความ (โค้ด) ที่สามารถกำหนดเวอร์ชันได้ เมื่อคุณเรียกใช้โค้ดนี้ โครงสร้างพื้นฐานจะได้รับการตั้งค่าเหมือนกับที่คุณเขียนไว้ทุกประการ เหมือนกัน ได้รับการจัดทำเป็นเอกสาร และสามารถทำซ้ำได้ทุกครั้ง เครื่องมือที่พบบ่อยที่สุดคือ Terraform และ CloudFormation สำหรับโครงสร้างพื้นฐานคลาวด์ และ Ansible สำหรับการกำหนดค่าเซิร์ฟเวอร์ ที่นี่ AI มีทักษะมากในการเขียน อธิบาย และทบทวนโค้ด IaC นี้ แต่พลังของ IaC ก็เป็นอันตรายเช่นกัน: เส้นผิดเส้นเดียวสามารถล้างโครงสร้างพื้นฐานทั้งหมดได้ ดังนั้น AI จะเขียนโค้ด คุณอ่าน "แผน" อนุมัติและดำเนินการ
ในบทนี้ เราจะอภิปรายแนวทางการประกาศ การแบ่งแยกแผน/การใช้ ความมั่นคงของรัฐ และความเป็นเอกภาพ คุณจะได้เรียนรู้การสร้าง IaC ด้วย AI และทักษะที่สำคัญที่สุด "การควบคุมแผน"
การคิดอย่างเปิดเผย: "จะเป็นอย่างไรถ้า" ไม่ใช่ "จะทำอย่างไร"
เครื่องมือ IaC ส่วนใหญ่เป็นแบบประกาศ: คุณอธิบายสถานะสุดท้ายของระบบ ("สมมติว่ามีเว็บเซิร์ฟเวอร์ 3 ตัว, โหลดบาลานเซอร์ 1 ตัว") เครื่องมือจะคำนวณวิธีไปยังสถานะนั้นเอง สิ่งนี้แตกต่างจากการเขียนสคริปต์ ("ทำสิ่งนี้ แล้วทำสิ่งนั้น" ทีละขั้นตอน) ข้อได้เปรียบที่สำคัญของแนวทางการประกาศคือค่าเดิม แม้ว่าคุณจะรันโค้ดสิบครั้ง ผลลัพธ์ก็ยังเหมือนเดิม เนื่องจากเครื่องมือจะตรวจสอบเพื่อดูว่ามีสถานะที่ต้องการอยู่แล้วหรือไม่ และหากเป็นเช่นนั้น ก็จะไม่แตะต้องสถานะนั้น จำความแตกต่างนี้เมื่อคุณเขียน IaC ไปยัง AI: คุณกำหนดให้มันพูดว่า "ปล่อยให้สถานะโครงสร้างพื้นฐานนี้" ไม่ใช่ "เรียกใช้คำสั่งเหล่านี้"
วางแผน/นำไปใช้: ราวบันไดนิรภัยที่สำคัญที่สุด
คุณลักษณะการช่วยชีวิตของ IaC คือขั้นตอนของแผน ใน Terraform แผน terraform ใน Ansible --check โหมดจะสร้างการแสดงตัวอย่าง "สิ่งที่จะเปลี่ยนแปลงถ้าฉันใช้" ก่อนที่จะรันโค้ด: "ทรัพยากร 2 รายการจะถูกเพิ่ม, 1 รายการจะเปลี่ยนแปลง, 0 จะถูกลบ" นี่เป็นวิธีเดียวที่จะเปรียบเทียบความตั้งใจของคุณกับความเป็นจริงก่อนนำไปปฏิบัติ กฎสำคัญ: ห้ามนำไปใช้โดยไม่ได้อ่านแผน มองหาเส้น "ทำลาย" โดยเฉพาะ หากคุณเห็น "12 จะถูกลบ" แทนที่จะเป็น "1 จะถูกเปลี่ยน" เนื่องจากการพิมพ์ผิด แสดงว่าแผนดังกล่าวช่วยคุณจากภัยพิบัติ หลังจากพิมพ์โค้ดไปยัง AI แล้ว ให้พูดว่า "ตรวจสอบบรรทัดเอาต์พุตของแผนทีละบรรทัดกับฉัน ทำเครื่องหมายทุกบรรทัดที่มีการลบ/การสร้างใหม่"
ข้อควรระวัง: การเปลี่ยนแปลงบางอย่างใน Terraform "ทำลายและสร้างใหม่" ทรัพยากรแทนที่จะ "อัปเดตในสถานที่" ซึ่งหมายความว่าข้อมูลสูญหายสำหรับฐานข้อมูล การเพิกเฉยต่อ -/+ หรือ "การแทนที่กำลัง" ในผลลัพธ์ของแผนถือเป็นข้อผิดพลาดที่แพงที่สุดอย่างหนึ่ง
ไฟล์สถานะ: บันทึกความลับและความจริง
เครื่องมืออย่าง Terraform จะรักษาสถานะปัจจุบันของโครงสร้างพื้นฐานที่จัดการในไฟล์สถานะ ไฟล์นี้มีความสำคัญด้วยเหตุผลสองประการ ประการแรก อาจมีความลับ (รหัสผ่านฐานข้อมูล คีย์อาจอยู่ในสถานะเป็นข้อความธรรมดา) ดังนั้น อย่าวางสถานะลงในที่เก็บข้อมูลสาธารณะหรือ AI และเก็บไว้ในแบ็กเอนด์ระยะไกลที่เข้ารหัสและจำกัดการเข้าถึง ประการที่สอง หากรัฐเสียหายหรือสูญหาย ยานพาหนะจะสูญเสียการเชื่อมโยงระหว่างโครงสร้างพื้นฐานที่แท้จริงกับโครงสร้างพื้นฐานที่จินตนาการไว้ ดังนั้นการสำรองข้อมูลสถานะและกลไกการล็อค (ล็อคที่ป้องกันไม่ให้คนสองคนทำลายมันในเวลาเดียวกัน) จึงเป็นสิ่งสำคัญ
ทีละขั้นตอน: รักษาความปลอดภัย IaC ด้วย AI
- เจตนารมณ์ของรัฐและผู้ให้บริการ “เซิร์ฟเวอร์ 2 เครื่องบน AWS พร้อม Terraform ในภูมิภาคนี้ ขนาดนี้ และกลุ่มความปลอดภัย” หากคลาวด์ เครื่องมือ และเวอร์ชันชัดเจน AI จะสร้างไวยากรณ์ที่ถูกต้อง
- ขอค่าเริ่มต้นการรักษาความปลอดภัย "เปิดกลุ่มความปลอดภัย เปิดใช้งานการเข้ารหัส แยกความลับไปยังตัวแปร ให้สิทธิ์การเข้าถึงแบบสาธารณะ" AI สามารถสร้างตัวอย่างแบบหลวมๆ ได้ตามค่าเริ่มต้น
- อ่านและทำความเข้าใจโค้ด เข้าใจทุกทรัพยากร ทุกสิทธิ์ ทีละบรรทัด อย่าใช้การอนุญาตที่คุณไม่เข้าใจ
- วางแผนและตรวจสอบมัน รันแผน/--ตรวจสอบ ตรวจสอบเอาต์พุตด้วย AI ทำเครื่องหมายลบและสร้างบรรทัดใหม่
- ใช้ขนาดเล็กและพลิกกลับได้ ดำเนินการเปลี่ยนแปลงครั้งใหญ่เป็นชิ้นเล็กๆ ไม่ใช่ทั้งหมดในคราวเดียว รู้ทางกลับทุกย่างก้าว
- ปกป้องรัฐ ใช้แบ็กเอนด์และล็อคระยะไกลที่เข้ารหัส ไม่เคยรั่วไหลของรัฐ
มินิเคสสามอัน
กรณีที่ 1 — แผนกู้คืนฐานข้อมูล วิศวกรคนหนึ่งต้องการเพิ่มขนาดของฐานข้อมูลด้วยโค้ด Terraform ที่เขาสร้างขึ้นด้วย AI ขณะที่เขาคาดหวังว่า "1 จะเปลี่ยนแปลง" ในเอาท์พุตแผนพื้นผิว เขาเห็นว่า "1 ที่จะทำลาย 1 ที่จะเพิ่ม" — พารามิเตอร์ที่เขาเลือกกำลังกระตุ้นให้สร้างใหม่ ไม่ใช่การอัปเดตแบบแทนที่ ซึ่งหมายความว่าข้อมูลทั้งหมดจะถูกลบ การควบคุมแผนหยุดการสูญเสียข้อมูลที่ไม่สามารถย้อนกลับได้ก่อนที่จะนำไปใช้
กรณีที่ 2 — คืนจากค่าเริ่มต้นที่หลวม ทีมงานขอรหัสไฟร์วอลล์จาก AI ในการรันตัวอย่าง AI ได้สร้างกฎง่ายๆ 0.0.0.0/0 ซึ่งหมายถึง "สาธารณะบนอินเทอร์เน็ต" วิศวกรสังเกตเห็นสิ่งนี้ขณะอ่านโค้ดและจำกัดการเข้าถึงให้แคบลงเฉพาะช่วง IP ขององค์กรเท่านั้น หากนำไปใช้โดยไม่ได้รับการตรวจสอบ ฐานข้อมูลก็จะเปิดให้อินเทอร์เน็ตทั้งหมด
กรณีที่ 3 — ป้องกันการรั่วไหลของสถานะ สมาชิกรุ่นน้องกำลังจะวางไฟล์ terraform.tfstate เดิมลงในเครื่องมือสาธารณะเพื่อแก้ไขปัญหา Terraform วิศวกรอาวุโสหยุดทำงาน: รัฐมีรหัสผ่านฐานข้อมูลข้อความธรรมดา แต่จะมีการแชร์ข้อมูลสรุปที่ถอดรหัสซึ่งอธิบายปัญหาและสถานะถูกย้ายไปยังแบ็กเอนด์ที่เข้ารหัสระยะไกลแทน
เทมเพลตที่สามารถคัดลอกได้สี่แบบ
1) การสร้างทรัพยากร IaC (ค่าเริ่มต้นที่ปลอดภัย):
บทบาทของคุณ: วิศวกรโครงสร้างพื้นฐานคลาวด์อาวุโส [คลาวด์ เช่น AWS] สำหรับ [เครื่องมือ เช่น Terraform] สร้างโค้ด วัตถุประสงค์: [วัตถุประสงค์] กฎความปลอดภัย: การเข้าถึงสาธารณะ (0.0.0.0/0) เปิด เริ่มต้นด้วยการอนุญาตที่แคบที่สุด เปิดการเข้ารหัส แยกความลับออกเป็นตัวแปร อย่าฝังไว้ในโค้ด ตรวจสอบการตั้งค่าที่อาจนำไปสู่การลบ/การสร้างใหม่ อธิบายแหล่งที่มาแต่ละแห่งพร้อมความคิดเห็นสั้นๆ
2) การตรวจสอบผลลัพธ์ตามแผน:
ด้านล่างนี้คือเอาต์พุต [แผน Terraform / การตรวจสอบ Ansible] บอกฉัน: (1) จำนวนทรัพยากรที่จะถูกเพิ่ม/เปลี่ยนแปลง/ลบ (2) ทำเครื่องหมายบรรทัด "ทำลาย" หรือ "การแทนที่กองกำลัง" ที่มีความเสี่ยงต่อการสูญเสียข้อมูล (3) แสดงรายการการเปลี่ยนแปลงใดๆ ที่ดูเหมือนไม่คาดคิดหรือเป็นอันตราย ผลลัพธ์: [แผน]
3) การตรวจสอบความปลอดภัยของรหัส IaC:
ตรวจสอบรหัส IaC ต่อไปนี้เพื่อความปลอดภัย: (1) มีการเข้าถึง/สิทธิ์ที่กว้างเกินไปหรือไม่ (2) การเข้ารหัสปิดอยู่ (3) มีความลับฝังอยู่ในโค้ดหรือไม่ (4) มีทรัพยากรที่เปิดเผยต่อสาธารณะหรือไม่ เสนอแนะการแก้ไขสำหรับการค้นพบแต่ละครั้ง รหัส: [รหัสสวมหน้ากาก]
4) แบ่งการเปลี่ยนแปลงออกเป็นส่วนที่ปลอดภัย:
ฉันไม่ต้องการใช้การเปลี่ยนแปลงโครงสร้างพื้นฐานครั้งใหญ่นี้ [คำอธิบาย] ทั้งหมดในคราวเดียว แบ่งย่อยออกเป็นขั้นตอนเล็กๆ อิสระที่ง่ายต่อการกลับไปแก้ไข ในแต่ละขั้นตอน: มีการเปลี่ยนแปลงอะไรบ้าง ควรใส่ใจกับสิ่งใดในแผน หากมีปัญหาจะยกเลิกได้อย่างไร
พรอมต์อ่อน / พรอมต์แข็งแกร่ง
พรอมต์ที่อ่อนแอ:
เขียนโค้ด Terraform ที่สร้างเซิร์ฟเวอร์บน AWS
ภูมิภาค ขนาด ความปลอดภัย เครือข่าย การเข้ารหัสไม่ชัดเจน AI สร้างค่าเริ่มต้นในการทำงานที่หลวมที่สุดและชัดเจนที่สุด หากนำไปใช้จริง มันจะเป็นช่องโหว่
พรอมต์อันทรงพลัง:
บทบาทของคุณ: วิศวกรโครงสร้างพื้นฐานคลาวด์อาวุโส กำหนดเว็บเซิร์ฟเวอร์ด้วย Terraform บน AWS eu-central-1: t3.small จากช่วง IP ขององค์กรเท่านั้น (ฉันจะให้ตัวแปรกับมัน) พอร์ต 443 เปิดอยู่ ดิสก์ถูกเข้ารหัส ไม่มีการเข้าถึงแบบสาธารณะ จำเป็นต้องมีป้ายกำกับ ความลับถูกเปิดเผยต่อตัวแปร หลังจากโค้ด: ก่อนที่จะนำไปใช้งาน ให้บอกประเภทบรรทัด 3 ประเภทที่ฉันควรใส่ใจในแผนและอธิบายเส้นทางการคืนสินค้า
เวที
ความเสี่ยง
ราวบันไดความปลอดภัย
การเขียนโค้ด
ค่าเริ่มต้นหลวม (สาธารณะ)
การอนุญาตที่แคบที่สุด + อ่าน
วางแผน/ตรวจสอบ
ลบไปโดยไม่รู้ตัว
วางแผนการตรวจสอบ ทำลายเครื่องหมาย
สมัคร
การเปลี่ยนแปลงครั้งใหญ่เพียงครั้งเดียว
ก้าวเล็กๆ ที่พลิกกลับได้
การบริหารของรัฐ
เคลือบรั่วบิดเบี้ยว
แบ็กเอนด์ + ล็อคที่เข้ารหัสระยะไกล
ข้อผิดพลาดทั่วไป
- สมัครโดยไม่ได้อ่านแผน แผนดังกล่าวแสดงถึงการลบและการสร้างใหม่ หากถูกข้าม การสูญเสียข้อมูลเป็นสิ่งที่หลีกเลี่ยงไม่ได้
- ไม่สังเกตเห็นค่าเริ่มต้นที่หลวม อินสแตนซ์ AI มักสร้าง 0.0.0.0/0; หากถูกย้ายไปสู่การใช้งานจริง นั่นหมายถึงโอเพ่นซอร์สสำหรับอินเทอร์เน็ตทั้งหมด
- รัฐรั่ว. การส่งออกไฟล์สถานะไปยัง AI หรือพื้นที่เก็บข้อมูลแบบเปิดจะเปิดเผยความลับของข้อความธรรมดา
- การฝังความลับในโค้ด การเขียนรหัสผ่านลงในโค้ด IaC จะทำให้ประวัติเวอร์ชันของโค้ดรั่วไหลอย่างต่อเนื่อง
- เข้าใจผิดว่าต้องสร้างใหม่เพื่ออัปเดต การเพิกเฉยต่อบรรทัดการแทนที่กองกำลังจะส่งผลให้ข้อมูลสูญหายในฐานข้อมูล
เคล็ดลับ: แม้ว่าจะให้ผลลัพธ์ของแผนแก่ AI เพื่อตรวจสอบ ให้ยึดการตัดสินใจขั้นสุดท้ายตามความรู้ของคุณเอง ไม่ใช่ข้อความของแผน AI สรุปแผนและทำเครื่องหมายเส้นที่มีความเสี่ยง แต่คำตอบสำหรับคำถาม "การลบนี้ยอมรับได้หรือไม่" ขึ้นอยู่กับบริบททางธุรกิจของคุณ
โดยสรุป
IaC นำเสนอความสามารถในการทำซ้ำและการจัดทำเอกสารโดยการจัดการโครงสร้างพื้นฐานด้วยโค้ดที่กำหนดเวอร์ชันได้ แทนที่จะคลิกด้วยตนเอง AI เป็นพันธมิตรที่ทรงพลังในการเขียนโค้ดนี้ อธิบาย และตรวจสอบเพื่อความปลอดภัย แต่พลังของ IaC ถือเป็นอันตราย: เส้นเดียวสามารถล้างโครงสร้างพื้นฐานทั้งหมดได้ คิดว่าเป็นแบบเปิดเผย เริ่มต้นด้วยการอนุญาตที่แคบที่สุด แก้ไขค่าเริ่มต้นที่หลวม เก็บความลับไม่ให้อยู่ในโค้ดและสถานะ ราวกั้นที่สำคัญที่สุดคือขั้นตอนการวางแผน/ตรวจสอบ: ห้ามดำเนินการโดยไม่อ่านบรรทัดการลบและสร้างใหม่ รักษาสถานะให้เข้ารหัส ล็อค และรีโมท รหัสเป็นของ AI การตัดสินใจเป็นของคุณ
งานสมัคร
เลือกเป้าหมายโครงสร้างพื้นฐานขนาดเล็ก (เช่น เครื่องเสมือนเครื่องเดียวและกฎความปลอดภัย) ด้วยเทมเพลต "การสร้างทรัพยากร IaC" ด้านบน ให้ขอรหัสที่มีค่าเริ่มต้นที่ปลอดภัยจาก AI ตรวจสอบโค้ดอีกครั้งด้วยเทมเพลต "การตรวจสอบความปลอดภัยของโค้ด IaC" และลองค้นหาการตั้งค่าที่หลวมอย่างน้อยหนึ่งรายการ หากเป็นไปได้ ให้รัน plan/--check ในบัญชีทดสอบ และตรวจสอบผลลัพธ์ด้วยเทมเพลต "Plan output check" ดูว่ามีบรรทัดลบหรือสร้างใหม่ เขียนสิ่งที่คุณค้นพบและวิธีที่คุณจะรักษาสถานะไว้ใน 6 คะแนน
รายการตรวจสอบ
- [ ] ฉันระบุคลาวด์ เครื่องมือ และเวอร์ชันให้กับ AI และขอโค้ดที่มีสิทธิ์อนุญาตที่แคบที่สุดหรือไม่
- [ ] ฉันได้ตรวจสอบรหัสเพื่อหาค่าเริ่มต้นที่หลวมแล้ว (0.0.0.0/0, การเข้ารหัสแบบปิด) หรือไม่
- [ ] ฉันได้แยกความลับไปยังตัวแปรแทนที่จะฝังไว้ในโค้ดหรือไม่?
- [ ] ฉันได้อ่านแผน/ตรวจสอบผลลัพธ์และทำเครื่องหมายบรรทัดลบก่อนสมัครหรือไม่?
- [ ] ฉันได้ประเมินผลกระทบที่สูญเสียข้อมูลของ "การแทนที่กองกำลัง" / สร้างบรรทัดใหม่หรือไม่
- ฉันไม่ได้เก็บไฟล์สถานะ [ ] เข้ารหัส ล็อค ไว้ในแบ็กเอนด์ระยะไกลและรั่วไหลออกมาใช่ไหม