เหตุใด GitOps จึงจำเป็นสำหรับ DevSecOps
เผยแพร่แล้ว: 2022-02-24ประโยชน์ที่ได้รับจาก DevOps สำหรับการทำงานอัตโนมัติ การตรวจสอบย้อนกลับ และโดยเฉพาะอย่างยิ่ง การทำงานร่วมกันระหว่างกลุ่มแยกส่วนล่วงหน้าและผู้มีส่วนได้ส่วนเสียนั้นเป็นที่ยอมรับอย่างมาก แต่เนื่องจากกลุ่ม DevOps มีหน้าที่อย่างมากในการเปลี่ยนการดำเนินการไปสู่สภาพแวดล้อม Kubernetes ที่มีคอนเทนเนอร์ กลยุทธ์ DevOps ที่พยายามและทดสอบเป็นเวลานานจึงอาจสั้นลงได้ ปัญหาด้านความปลอดภัยและหลุมพรางยังปรากฏให้เห็นในวิธีการเฉพาะอีกด้วย
ข้อมูลที่ยอดเยี่ยมคือ GitOps ทำหน้าที่เติมช่องว่างที่เลือกใน DevOps เพื่อความเสถียรของสภาพแวดล้อมแบบกระจาย นี่เป็นเพราะความจริงที่ว่ากระบวนการของ GitOps เอื้อต่อ DevSecOps อย่างมาก ซึ่งระบุไว้ในที่นี้เป็นกลวิธีด้านความปลอดภัยที่มีประสิทธิภาพสูงสุดซึ่งนำไปใช้กับวงจรชีวิตซอฟต์แวร์ทั้งหมด
ในบทความนี้ เรามาดูกันว่า GitOps นำเสนอเฟรมเวิร์กที่สำคัญสำหรับ DevSecOps ได้อย่างไร สำหรับการตรวจสอบความปลอดภัยที่เพิ่มขึ้นผ่าน CI/CD ตลอดจนผ่านขั้นตอนการปรับใช้การเขียนของการดูแลแอปพลิเคชันบนคลัสเตอร์ Kubernetes
ทรัพยากรที่ไม่เปลี่ยนรูปเดียวของความเป็นจริง
GitOps สามารถอธิบายได้ดังนี้:
การออกแบบที่ใช้งานได้สำหรับ Kubernetes และระบบคลาวด์ดั้งเดิมอื่นๆ โดยให้ชุดของขั้นตอนที่ดีที่สุดที่รวมการปรับใช้ Git การจัดการและการตรวจสอบสำหรับคลัสเตอร์ที่มีคอนเทนเนอร์และวัตถุประสงค์
เส้นทางไปในทิศทางของประสบการณ์เชิงปฏิบัติของนักพัฒนาในการดูแลโปรแกรมตรงที่ไปป์ไลน์ CI/CD แบบสรุปผลและขั้นตอนการทำงานของ Git ถูกนำไปใช้ในแต่ละการดำเนินการและการพัฒนา
Git เป็นทรัพยากรที่โดดเดี่ยวของความจริงที่แท้จริง เนื่องจากมีการประกาศการกำหนดค่าที่ต้องการสำหรับที่นี่ มีตัวแทน GitOps ที่ทำงานภายใน Kubernetes โดยจะเปรียบเทียบจุดจริงใน Kubernetes กับจุดที่ต้องการบันทึกไว้ใน Git รูปแบบใหม่ใดๆ ที่รวมเข้ากับแผนกที่ได้รับการตรวจสอบใน Git จะถูกนำไปใช้กับ Kubernetes ทันที ในทางกลับกัน การเปลี่ยนแปลงของคู่มือใดๆ ที่ใช้กับ Kubernetes จะถูกเปลี่ยนกลับเป็นกลไกโดยอัตโนมัติเป็นสถานะในอุดมคติที่ประกาศไว้ใน Git การกำหนดค่าดริฟท์ถูกยกเลิก
โดยปกติแล้ว Git จะได้รับการอธิบายอย่างเหมาะสมว่าเป็นแหล่งข้อมูลความจริงอย่างหนึ่ง เนื่องจากใช้กับ GitOps ด้วยองค์ประกอบที่ไม่เปลี่ยนรูป เหนือสิ่งอื่นใด มันจะช่วยรักษาขอบเขต — ไม่ขัดกับไฟร์วอลล์ — ที่แยกข้อกังวลระหว่าง CI และ CD ด้วยวิธีนี้ ช่วงของวิธีที่เกี่ยวข้องกับความก้าวหน้าของแอปพลิเคชันซึ่งเป็นส่วนหนึ่งของ CI — คำขอดึง การคัดกรอง การดำเนินการ และอื่นๆ — แยกจากกันบน Git ต่อไป
สำหรับนักพัฒนาที่สร้างคำขอดึง การขอดึง ณ เวลาที่ตรวจสอบและอนุญาต จะถูกรวมและใช้งานเป็นประจำกับคลัสเตอร์ในการกระทบยอดที่กำลังจะมีขึ้น ซึ่งปกติจะใช้เวลา 15 นาที
โดยค่าเริ่มต้น กระบวนการเป็นแบบสองทิศทาง ซึ่งหมายความว่าการปรับเปลี่ยนที่ผลิตขึ้นโดยตรงไปยัง Kubernetes จะได้รับการตอบสนองบน Git เมื่อวนรอบการกระทบยอดในอนาคตทำงาน (โดยทั่วไปทุกๆ 15 นาที) ถึงกระนั้น สถานการณ์นี้ก็ยังน้อยกว่าดีที่สุด เมื่อพนักงานของ DevOps หรือที่แย่กว่านั้น แต่ผู้บุกรุกที่กระทำการเชิงลบจะสร้างการเปลี่ยนแปลงให้กับคลัสเตอร์ทันที รูปแบบโดยตรงไปยังคลัสเตอร์เหล่านี้ยังไม่ได้รับการตรวจสอบอย่างเหมาะสมโดยใช้คำขอรวมและการอนุมัติ และด้วยเหตุนี้จึงเป็นการละเมิดทฤษฎี GitOps ของ Git ซึ่งทำหน้าที่เป็นแหล่งความจริงที่ไม่เปลี่ยนรูปของเรื่องเมื่อมีการเลื่อนลอยเกิดขึ้น
อีกทางเลือกหนึ่งในการเปิดใช้การบรรเทาการเบี่ยงเบนจากการเกิดขึ้น ทรัพยากรการตรวจสอบ GitOps สามารถส่งการแจ้งเตือนได้หากมีการผลิตการเปลี่ยนแปลงไปยังคลัสเตอร์ที่ไม่ได้เริ่มต้นด้วยใช้ใน Git เมื่อสิ่งนี้เกิดขึ้น ต้องขอบคุณเส้นทางการตรวจสอบ โค้ดซอฟต์แวร์บน Git สามารถสลับการปรับเปลี่ยนที่ผิดพลาดที่ออกแบบไปยังคลัสเตอร์ ตัวควบคุมแบบหยาบในการปรับใช้ชี้ให้เห็นในสภาพแวดล้อมทางธรรมชาติของรันไทม์
ในทางกลับกัน เมื่อไม่สามารถบรรลุถึงความไม่เปลี่ยนรูปได้ การล่องลอยอาจเกิดขึ้นได้ สิ่งนี้อาจเกิดขึ้นในกลุ่มของการโจมตีเครือข่าย หรือเมื่อเจ้าหน้าที่ DevOps แก้ไขการกำหนดค่าคลัสเตอร์โดยไม่ได้ตั้งใจ ดังนั้นจึงมีความหลากหลายจากสิ่งที่อยู่บน Git ความไม่ลงรอยกันจะถูกตั้งค่าสถานะเมื่อสิ่งนี้เกิดขึ้น — ผ่านการใช้อุปกรณ์ GitOps ที่เหมาะสม — ซึ่งเป็นสัญลักษณ์ของ DevSecOps ที่เป็นแก่นสารที่กระบวนการ GitOps มีอยู่
แอปพลิเคชันที่เหมาะสมจะทำให้ระบบการตรวจสอบอย่างต่อเนื่องเป็นไปโดยอัตโนมัติ เพื่อให้แน่ใจว่าจุดที่ต้องการจากการกำหนดค่าบนที่เก็บ Git ตรงกับสถานะจริงในคลัสเตอร์ Kubernetes นอกจากนี้ยังใช้เพื่อกระทบยอดและการปรับใช้ทั้งหมดทันทีที่มีการทุ่มเทอย่างมีประสิทธิภาพในเงื่อนไขที่ประกาศของที่เก็บ
การจัดการตรวจสอบ
คุณสมบัติการตรวจสอบที่ GitOps นำเสนอนั้นมีความสำคัญอย่างยิ่งต่อความช่วยเหลือ DevSecOps การคงอยู่ในที่เก็บ Git เป็นแหล่งข้อมูลเดียว ทำให้แอปพลิเคชัน โค้ด และการกำหนดค่าทั้งหมดมีการกำหนดเวอร์ชัน และคงไว้ซึ่งเส้นทางการตรวจสอบทั้งหมด ซึ่งเป็นความจำเป็นหลักสำหรับสภาพแวดล้อมทางธรรมชาติที่มีการป้องกัน เส้นทางการตรวจสอบนี้มักจะเสนอให้กับนักพัฒนาและเจ้าหน้าที่ฝ่ายปฏิบัติการอย่างเท่าเทียมกัน โดยซื้อเพื่อให้พวกเขาสังเกตเห็นสิ่งที่กำลังทำงานอยู่ในคลัสเตอร์ (ผู้ใช้ส่วนใหญ่ถูกจำกัดให้เข้าถึงได้เฉพาะการเข้าถึงการกำหนดค่าคลัสเตอร์)
นักพัฒนาซอฟต์แวร์อาจไม่จำเป็นต้องพึ่งพาเส้นทางการตรวจสอบเท่าๆ กับหน้าที่ต่างๆ และพนักงาน DevSecOps เสมอไป แต่พวกเขาสามารถใช้ประโยชน์จากความสามารถในการทำความเข้าใจว่ารูปแบบต่างๆ เกิดขึ้นได้อย่างไร และสิ่งที่ไดรฟ์อยู่เบื้องหลังการปรับพื้นที่เก็บข้อมูลที่เกิดขึ้น . โดยสรุป สำหรับนักพัฒนา - เช่นเดียวกับพนักงาน DevOps ทุกคน - ทุกสิ่งเป็นเพียงการออกจากระบบของ Git
นอกจากนี้ยังมีเส้นทางการตรวจสอบบน Git อีกด้วย และง่ายมากสำหรับผู้สร้างที่จะมองเห็นเมื่อจำเป็น นี่เป็นเพราะความจริงที่ว่ามรดกที่เสร็จสิ้นของกระบวนการถูกจับในโปรแกรม Git ของรายงาน ซึ่งผู้สร้างเข้าใจ
ด้วยความพร้อมใช้งานของเส้นทางการตรวจสอบ จึงเป็นไปได้ที่จะย้อนกลับการปรับแอปที่ก่อให้เกิดปัญหาได้อย่างรวดเร็ว สิ่งนี้มีประโยชน์เป็นพิเศษเมื่อคลัสเตอร์ถูกบุกรุกหรือกำหนดค่าผิด ในกรณีนี้ แทนที่จะเป็นเจ้าของเพื่อสร้างคลัสเตอร์ใหม่ตั้งแต่ต้น เส้นทางการตรวจสอบประกอบด้วยจุดที่ต้องการในการซื้อคืน การกำหนดค่าคลัสเตอร์และโปรแกรมที่มีจุดที่ต้องการจากเส้นทางการตรวจสอบจะถูกปรับใช้และขั้นตอนการสร้างใหม่จะเป็นไปโดยอัตโนมัติ
จำนวน 'กุญแจสู่อาณาจักร'

ผู้สร้างมักจะพึ่งพา Jenkins ซึ่งเป็นเซิร์ฟเวอร์อัตโนมัติเพื่อพัฒนา ตรวจสอบ และช่วยเหลือ CI/CD สำหรับไปป์ไลน์การผลิตสำหรับสภาพแวดล้อม Kubernetes หากไม่มี GitOps นักพัฒนาอาจมีการเข้าถึงคลัสเตอร์ Kubernetes ได้ทันที ในกรณีอื่น ๆ ที่พวกเขาปรับใช้โค้ดโดยตรง กล่าวอีกนัยหนึ่ง ผู้สร้าง — ไม่ว่าพวกเขาจะเป็นส่วนหนึ่งขององค์กรหรือเป็นผู้รับเหมาที่ดำเนินงานจากระยะไกล — จะสามารถเข้าถึงสภาพแวดล้อมภายนอกได้ทันทีและจะมี “กุญแจสู่อาณาจักร” เพื่อสนทนา นี่เป็นสถานการณ์ด้านความปลอดภัยในอุดมคติที่ไม่ค่อยเกิดขึ้น
ในกรณีที่กล่าวมาก่อนหน้านี้ทั้งหมดจะเลือกสำหรับผู้ใช้ที่ไม่เหมาะสม - หรือแย่กว่านั้นคือผู้บุกรุก - เพื่อให้สามารถเข้าถึงคำสั่ง KubeConfig หรือ Kubectl ไปยังคลัสเตอร์ในการผลิตที่สามารถเรียกใช้จากโน้ตบุ๊กได้ หากผู้โจมตีบุกรุกกระบวนการ CI และข้อมูลประจำตัวที่จัดตั้งขึ้น ในกรณีดังกล่าว พวกเขายังสามารถเข้าถึงคลัสเตอร์ที่ระบบ CI เข้าถึงได้
ข้อเท็จจริงง่ายๆ ที่ GitOps ช่วยป้องกันผู้ใช้หรือผู้โจมตีจากการปรับเปลี่ยนการกำหนดค่าคลัสเตอร์โดยไม่ทิ้งร่องรอยใด ๆ มีความสำคัญอย่างยิ่งต่อทีมปฏิบัติการและความปลอดภัย นอกเหนือจากการสนับสนุนลดภาระงานทางจิตใจของนักพัฒนา ตัวอย่างเช่น ในการขอรับการจัดการ โดยทั่วไปนักพัฒนาซอฟต์แวร์ไม่จำเป็นต้องเข้าถึงโหนด Kubernetes และ/หรือบรรทัดคำสั่ง kubectl โดยตรง GitOps จะกระทบยอดทุกอย่างที่ผู้สร้างร่างใน Git แต่จะไม่อนุญาตให้เข้าถึงคลัสเตอร์ Kubernetes หรือสภาพแวดล้อมการผลิตด้วยตนเอง ยกเว้นผู้สร้างมีสิทธิ์ควบคุมการเข้าถึงที่ไม่ซ้ำกัน
คุณลักษณะ DevSecOps ของ GitOps เป็นวิธีขัดขวางสถานการณ์เวกเตอร์การโจมตีสำหรับซีดี ดังนั้นจึงเป็นเกราะป้องกัน "กุญแจสู่อาณาจักร" เมื่อตัวดำเนินการ GitOps เช่น Flux แบบโอเพ่นซอร์ส - เพิ่มเติมเกี่ยวกับสิ่งนี้ด้านล่าง - ทำงานภายใน Kubernetes และส่งผลให้เข้าถึงคลัสเตอร์ได้ การควบคุมการรับจะอยู่ภายในเฟรมเวิร์กความปลอดภัยของ Kubernetes การเข้าถึงของผู้บริโภคถูกกำหนดโดยการกำหนดสิทธิ์ให้กับเนมสเปซของกลุ่มเฉพาะและสมาชิกกลุ่ม
ในกรณีของวิธีที่ DevSecOps และ GitOps เอื้อต่อบุคคลที่แตกต่างอย่างน่าทึ่ง US Section of Defense (DoD), Nicolas Chaillan เจ้าหน้าที่ซอฟต์แวร์คอมพิวเตอร์หลักของ US Air Power เมื่อสักครู่ที่ผ่านมาได้อธิบายว่า DevSecOps และ GitOps เป็นอย่างไร — กับ Flux — มีส่วนสำคัญในความก้าวหน้าของโปรแกรมซอฟต์แวร์ที่สนับสนุนกองกำลังรักษาความปลอดภัยของสหรัฐฯ ทุกกลุ่ม
“ความปลอดภัยเป็นสิ่งที่ไม่สามารถต่อรองได้ แต่เรายังต้องการให้บริษัทพัฒนาตนเองปรับปรุงประสิทธิภาพและความเร็ว” Chaillan กล่าว
ตัวอย่างเช่น GitOps คือ "กุญแจสู่ความสำเร็จของเราในการตั้งค่าและเปิดตัว Platform Just one ตลอดทั้ง DoD โดยรวม" DoD กล่าว ตาม DoD System Just one คือ "การแบ่งประเภทของ Kubernetes distributions ที่เข้ากันได้กับ Cloud Indigenous Computing Foundation (CNCF) ที่ได้รับอนุญาต โครงสร้างพื้นฐานเป็น code playbooks และคอนเทนเนอร์ที่ชุบแข็ง" พร้อมไปป์ไลน์การรักษาความปลอดภัยแบบอบ
ตรวจสอบและยอดคงเหลือ
ขั้นตอน DevSecOps รวมกับการตรวจสอบและยอดคงเหลือของ GitOps ด้วยวิธีนี้ คำสั่งการช่วยสำหรับการเข้าถึงที่มีให้ช่วยป้องกันไม่ให้นักพัฒนาหรือผู้บุกรุกเข้าถึงที่เก็บรหัสอุปทานเพื่อแนะนำ สำหรับภาพประกอบ แบ็คดอร์ Zero-day หรือช่องโหว่รูปแบบอื่นในช่วงระยะเวลาของ CI ขั้นตอน. นี่เป็นเพียงเพราะคำขอดึงทั้งหมดได้รับการตรวจสอบโดยเพื่อน
ด้วย DevSecOps ที่รองรับระบบ CI การตรวจสอบและยอดคงเหลือที่ใช้ก่อนโค้ดจะทุ่มเทให้กับ Git และปรับใช้ในคลัสเตอร์ นักพัฒนามักจะโพสต์การแก้ไขเป็นคำขอดึงซึ่งได้รับการตรวจสอบโดยเพื่อน หลังจากตรวจสอบและให้สิทธิ์แล้ว โค้ดจะถูกรวมเข้ากับ Git และไฟล์ YAML ของสถานะที่ต้องการจะเปลี่ยนไปตามนั้น
เงื่อนไขที่ต้องการจะนำไปใช้กับคลัสเตอร์ Kubernetes ทันที ดังที่กล่าวไว้ก่อนหน้านี้ อุปกรณ์ GitOps ที่ถูกต้องพร้อมคุณสมบัติ DevSecOps จะคอยติดตามเงื่อนไขที่แม่นยำในกระบวนการเป้าหมายอย่างต่อเนื่อง เพื่อให้แน่ใจว่าอุปกรณ์จะตอบสนองสิ่งที่ประกาศบน Git จะมีการแจ้งเตือนหากมีความแปรปรวน จึงสามารถดำเนินการแก้ไขได้
DevSecOps แสดงความคิดเห็น
เครื่องมือ GitOps จำนวนหนึ่งช่วย DevSecOps ในกรณีของ Open supply Flux จะช่วยรักษา Git repository ให้เป็นแหล่งความจริงแท้แหล่งเดียวที่ไม่เปลี่ยนรูป ความสามารถของ Flux ยังขยายเวลาในการควบคุมการเข้าถึงได้สำหรับการตรวจสอบและความสมดุลระหว่าง CI/CD สำหรับโค้ดที่ทุ่มเทและปรับใช้
สำหรับการเผชิญหน้า Flux ที่มีความคิดเห็นมากขึ้น Weave GitOps Main แบบโอเพ่นซอร์สจะทำให้วิธีแรกในการเปิดใช้งาน CI/CD อัตโนมัติทั่วทั้งคลัสเตอร์ต่างๆ ง่ายขึ้น ระบบการวางวิธี GitOps และ DevSecOps ด้วย Weave GitOps Main เกี่ยวข้องกับคำสั่งที่ไม่ซับซ้อนสองสามคำสั่งบนคอนโซล
บริษัท Weave GitOps ได้กลายเป็นแพลตฟอร์ม GitOps เริ่มต้นที่ทำให้การจัดส่งแอปพลิเคชันที่มั่นคงและการจัดการการปฏิบัติงานอัตโนมัติสำหรับ Kubernetes เป็นไปโดยอัตโนมัติ ในทุกขนาด ทั่วทั้ง สถาปัตยกรรมไฮบริดคลาวด์ มัลติคลาวด์ และเอดจ์
เครื่องมือบางส่วนทั้งหมดช่วยในการตรวจสอบโดยอัตโนมัติเพื่อรับประกันว่าการกำหนดค่าคลัสเตอร์มักจะตรงกับสิ่งที่อยู่บน Git เพื่อช่วยหลีกเลี่ยงการเบี่ยงเบน เส้นทางการตรวจสอบที่สมบูรณ์และพร้อมใช้งานช่วยให้สามารถสร้างการย้อนกลับของแอปพลิเคชันและการกำหนดค่าคลัสเตอร์บนพื้นฐานที่จำเป็น โดยไม่ต้องสร้างคลัสเตอร์ใหม่ตั้งแต่ต้น
โดยสรุป GitOps แสดงถึงวิวัฒนาการของ DevOps สำหรับสภาพแวดล้อม Kubernetes ที่กระจัดกระจาย แม้ว่า DevSecOps จะกลายเป็นวิธีสำคัญในการรักษาเสถียรภาพ CI/CD สำหรับ GitOps ผ่านวงจรชีวิตของแอปพลิเคชัน
Steve Waterworth เป็นหัวหน้าฝ่ายการตลาดด้านเทคนิค ที่ Weaveworks