การสร้างอาร์กิวเมนต์: ความสะดวกสบายที่อาจบั่นทอนความปลอดภัย
คำสั่ง `build args` ใน Docker ช่วยให้ส่งค่าการกำหนดค่าได้ง่ายในระหว่างการสร้าง แต่ก็มีข้อเสียที่มักถูกมองข้าม นั่นคือ ค่าเหล่านั้นจะยังคงอยู่ในเมตาเดต้าและเลเยอร์ของอิมเมจ นักพัฒนามักคิดว่าค่าเหล่านี้จะหายไปหลังจากสร้างเสร็จ แต่ในความเป็นจริง คำสั่ง `build args` ใน Docker จะฝังค่าเหล่านั้นไว้ในประวัติของอิมเมจ Docker
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
ใครก็ตามที่กำลังวิ่ง ประวัติ Docker or นักเทียบท่าตรวจสอบ จะพบ API_KEY ค่าที่ฝังอยู่ในเมตาเดตาของรูปภาพ เกิดขึ้นเนื่องจากคำสั่ง build arg ของ Docker build commitแต่ละขั้นตอนการสร้างเปรียบเสมือนชั้นถาวร
เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: หลีกเลี่ยงการแทรกข้อมูลลับผ่านอาร์กิวเมนต์การสร้าง Docker ให้ใช้... -ความลับ ตัวเชื่อมต่อที่ BuildKit จัดเตรียมไว้สำหรับข้อมูลที่ละเอียดอ่อน จะไม่ถูกเก็บไว้ในเลเยอร์หรือเมตาเดต้า
ความลับคงอยู่ได้อย่างไรในชั้นข้อมูลและเมตาเดตา
คำสั่งทุกคำสั่งใน Dockerfile จะสร้างเลเยอร์รูปภาพใหม่ แม้ว่าคุณจะเขียนทับหรือลบไฟล์ เลเยอร์ก่อนหน้าก็ยังคงอยู่ในแคช นี่คือเหตุผลที่ข้อมูลลับที่ถูกแทรกเข้าไปด้วยคำสั่ง `Docker build args` หรือ `build args Docker` จะคงอยู่ตลอดไป
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
การใช้ หาเรื่อง วิธีนี้จะฝังโทเค็นลงในเลเยอร์รูปภาพ ทำให้มองเห็นได้ผ่านทาง ตรวจสอบอิมเมจ Docker หรือดึงข้อมูลจากแคช เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: ในการใช้งาน ข้อมูลสำคัญจะยังคงอยู่ในประวัติการใช้งาน ควรใช้การเชื่อมต่อลับแบบชั่วคราวแทนเพื่อปกป้องโทเค็นและข้อมูลประจำตัว
การตั้งค่าผิดพลาดที่พบบ่อยใน CI/CD Pipelines
In ทันสมัย pipelinesนักพัฒนามักส่งต่อความลับผ่านทางนี้ CI/CD สภาพแวดล้อมที่ใช้ Docker args หรือแคชที่ใช้ร่วมกัน พฤติกรรมนี้ทำให้ข้อมูลลับรั่วไหลไปยังบันทึกการทำงาน ตัวรันเนอร์ และแคชรีจิสทรี โดยมีนักวิ่งร่วมกันใน การกระทำของ GitHubGitLab CI หรือ เจนกิ้นส์ความลับเหล่านี้สามารถแพร่กระจายไปยังงานอื่นที่ไม่เกี่ยวข้องได้อย่างง่ายดาย
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
ข้อมูลลับจะไปปรากฏอยู่ในบันทึกการสร้างและข้อมูลเมตาของอิมเมจ ซึ่งเป็นการละเมิดหลักการให้สิทธิ์ขั้นต่ำสุด เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: หลีกเลี่ยง –สร้างอาร์กิวเมนต์ เพื่อความลับ ใน CI/CDไม่ควรส่งข้อมูลลับผ่านตัวแปรสภาพแวดล้อมหรือไฟล์บันทึก ควรใช้การจัดเก็บข้อมูลลับแบบชั่วคราวเสมอ
แนวทางปฏิบัติที่ดีที่สุดในการป้องกันการเปิดเผยความลับ
การป้องกันการรั่วไหลของข้อมูลลับเริ่มต้นจากการยอมรับว่าพารามิเตอร์การสร้าง Docker นั้นเป็นสาธารณะตามการออกแบบ มันเหมาะสำหรับการกำหนดค่า (เช่น แท็กเวอร์ชันหรือแฟล็กคุณสมบัติ) แต่ไม่เหมาะสำหรับข้อมูลประจำตัว
ปฏิบัติที่ดีที่สุด
- ใช้ BuildKit - ความลับ สำหรับข้อมูลที่ละเอียดอ่อน
- ห้ามกำหนดความลับผ่าน ARG หรือ ENV เด็ดขาด
- เพิ่ม .env, ความลับ/และ กำหนดค่า/ ไดเร็กทอรีไปยัง .ด็อกเกอร์เพิกเฉย.
- ใช้การสร้างแบบหลายขั้นตอน เพื่อแยกเวทีส่วนตัวออกจากเวทีอื่น
- ล้างแคช หลังจากขั้นตอนการสร้างที่ละเอียดอ่อน
- ตรวจสอบความถูกต้องของข้อมูลเมตาของภาพ ตรวจสอบประวัติการใช้งาน Docker ก่อนเผยแพร่
รายการตรวจสอบการป้องกันฉบับย่อ
- ตรวจสอบไฟล์ Dockerfile ทั้งหมดสำหรับ อาร์กิวเมนต์การสร้าง Docker การใช้
- แทนที่ข้อมูลประจำตัวด้วย BuildKit -ความลับ.
- ทำให้มั่นใจ .ด็อกเกอร์เพิกเฉย ไม่รวมไฟล์ที่มีข้อมูลอ่อนไหว
- sanitize CI/CD ตัวแปรสภาพแวดล้อม
- ทำการสแกนข้อมูลลับโดยอัตโนมัติก่อนที่จะส่งภาพ
หมายเหตุให้ความรู้: หากค่าใด ๆ ถูกส่งผ่านอาร์กิวเมนต์การสร้าง Docker ค่าดังกล่าวจะกลายเป็นค่าถาวร ควรใช้การเมานต์แบบลับและขั้นตอนการสร้างที่แยกต่างหากเพื่อปกป้องข้อมูลที่ละเอียดอ่อน
ตรวจจับการใช้งาน Build Args ที่ไม่ปลอดภัยก่อนการปรับใช้
การสแกนอัตโนมัติมีความสำคัญอย่างยิ่งในการระบุรูปแบบ build args ของ Docker ที่มีความเสี่ยง ก่อนที่จะนำอิมเมจไปใช้งานจริง เครื่องมือต่างๆ เช่น เรื่องไม่สำคัญ, ฮาโดลินท์และ ไซเกนี สามารถตรวจจับข้อมูลประจำตัวที่ฝังอยู่ใน Dockerfile หรือเลเยอร์ของอิมเมจได้
ตัวอย่างโค้ดที่ใช้งานได้จริง พร้อมบริบทและกลไกควบคุม
ขั้นตอนนี้เป็นการควบคุมเชิงป้องกัน โดยจะบล็อกคำสั่ง build args ของ Docker ที่ไม่ปลอดภัยก่อนการปรับใช้
หมายเหตุให้ความรู้: กำหนดให้การสแกน Dockerfile เป็นสิ่งที่จำเป็น CI/CD ขั้นตอนต่างๆ เครื่องมืออัตโนมัติช่วยบังคับใช้มาตรฐานความสม่ำเสมอและความปลอดภัยของกระบวนการสร้างโปรแกรม
Xygeni ป้องกันการรั่วไหลของข้อมูลลับระหว่างการสร้างซอฟต์แวร์ได้อย่างไร
ไซเกนี ความลับด้านความปลอดภัย มีระบบตรวจจับเฉพาะทางสำหรับการใช้ Docker args ในทางที่ผิด เครื่องมือนี้ระบุคำจำกัดความ ARG ที่ไม่ปลอดภัย ติดตามค่าลับในขั้นตอนการสร้าง และทำเครื่องหมายข้อมูลประจำตัวที่หลงเหลืออยู่ในเมตาเดตาของรูปภาพหรือเลเยอร์ที่แคชไว้ โดยการผสานรวมเข้ากับของคุณ CI/CD pipelineโดยจะบังคับใช้นโยบายความปลอดภัยของ Docker build build arg ก่อนที่จะรวมหรือเผยแพร่เวอร์ชันใหม่
ตัวอย่างโค้ดการทำงานและการบังคับใช้ตามบริบท
เพิ่มงานนี้ลงในรายการของคุณ pipelineขั้นตอนการตรวจสอบความถูกต้องสำหรับการป้องกันอย่างต่อเนื่อง
หมายเหตุให้ความรู้: Xygeni บังคับใช้แนวทางปฏิบัติที่ปลอดภัยของ Docker โดยอัตโนมัติ ป้องกันการกำหนดค่าที่ไม่เหมาะสมระหว่างการสร้างระบบที่อาจทำให้ข้อมูลลับรั่วไหลข้ามสภาพแวดล้อมต่างๆ
สรุป: Docker ไม่ควรจัดการกับข้อมูลลับโดยใช้ Build Args
พารามิเตอร์การสร้าง Docker เป็นเหมือนดาบสองคม สะดวกสำหรับการกำหนดค่า แต่ก็เสี่ยงต่อการรักษาความลับ ค่า Docker ทุกค่าที่คุณใส่เข้าไปสามารถคงอยู่ได้ในเมตาเดต้า ประวัติรูปภาพ หรือแคช
ปกป้องสิ่งก่อสร้างของคุณโดย:
- การใช้ BuildKit -ความลับ เพื่อตรวจสอบคุณสมบัติ
- การแยกข้อมูลที่ละเอียดอ่อนในกระบวนการสร้างหลายขั้นตอน
- ตรวจสอบหาค่าที่รั่วไหลก่อนการใช้งานจริง
- การบังคับใช้นโยบายความปลอดภัยผ่าน Xygeni Code Security.
การสร้างของคุณ pipeline ความปลอดภัยนั้นขึ้นอยู่กับความลับที่คุณไม่เปิดเผย จงถือว่าทุกอาร์กิวเมนต์ในการสร้าง Docker เป็นช่องทางที่อาจเปิดเผยข้อมูลได้ และต้องรักษาความปลอดภัยให้ดีก่อนที่ผู้โจมตีจะค้นพบ





