การซ่อนความลับไว้ในเลเยอร์ของ Docker – ความลับใน Dockerfile
การสร้าง Docker แต่ละครั้งจะสร้างเลเยอร์ที่ไม่สามารถเปลี่ยนแปลงได้ แม้ว่าคุณจะ "ลบ" ข้อมูลลับไปแล้ว Docker ก็ยังคงเก็บเลเยอร์ก่อนหน้าไว้ในประวัติของอิมเมจ นั่นเป็นเหตุผลว่าทำไมข้อมูลลับใน Dockerfile และโดยเฉพาะอย่างยิ่งตัวแปรสภาพแวดล้อมของ Dockerfile จึงอันตราย เพราะข้อมูลประจำตัวหรือคีย์ส่วนตัวของคุณอาจยังคงฝังอยู่ในเลเยอร์เก่า ซึ่งสามารถกู้คืนได้อย่างสมบูรณ์ผ่านประวัติของ Docker หรือไฟล์บีบอัดอิมเมจที่ส่งออก
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
ตัวอย่างนี้ฝังข้อมูลที่ละเอียดอ่อนไว้ใน ENV ตัวแปร. ความลับจะถูกจัดเก็บอย่างถาวรในเมตาเดตาของเลเยอร์และสามารถกู้คืนได้จากประวัติรูปภาพ เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: หลีกเลี่ยงการเก็บข้อมูลลับไว้ในเลเยอร์ของ Docker ให้ใช้ BuildKit แทน -ความลับ เพื่อการจัดการอย่างปลอดภัย ความลับของ Dockerfile ส่งข้อมูลในระหว่างการสร้างโดยไม่ทิ้งร่องรอยใดๆ
ข้อผิดพลาดทั่วไปของนักพัฒนา: ARG, ENV และรหัสลับที่เขียนตายตัว
นักพัฒนาซอฟต์แวร์มักจะ leak secrets ตลอด ตัวแปรสภาพแวดล้อมลับใน Dockerfile (.env) ไฟล์หรือ ข้อมูลประจำตัวที่กำหนดไว้ตายตัวเมื่อค่าเหล่านั้นถูกฝังลงในภาพแล้ว ก็ไม่สามารถลบออกได้อย่างปลอดภัย
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
คำแนะนำเหล่านี้เปิดเผยข้อมูลประจำตัวโดยตรงและคัดลอก .env แทรกเข้าไปในภาพ ทำให้ใครก็ตามที่ดึงหรือตรวจสอบภาพนั้นสามารถมองเห็นได้ เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: โดยค่าเริ่มต้น ให้ถือว่าตัวแปรสภาพแวดล้อมของ Dockerfile secrets นั้นไม่ปลอดภัย ใช้งาน .ด็อกเกอร์เพิกเฉย เพื่อยกเว้นไฟล์ที่มีความละเอียดอ่อนและโหลดข้อมูลรับรองแบบไดนามิกในระหว่างการทำงาน ไม่ใช่ในระหว่างการสร้าง
การติดตามหาความลับใน CI/CD Pipelines
ข้อมูลลับมักรั่วไหลผ่านระบบอัตโนมัติ เช่น แคชของโปรแกรม การตั้งค่ารีจิสทรีที่ไม่ถูกต้อง หรือ... pipeline ไฟล์บันทึกสามารถเก็บรักษาข้อมูลลับของ Dockerfile ไว้ได้ตลอดไป
⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง
สิ่งนี้ใช้ –สร้างอาร์กิวเมนต์โดยฝังความลับไว้ในเมตาเดต้าของรูปภาพ ใครก็ตามที่มีสิทธิ์เข้าถึงรีจิสทรีก็สามารถดึงข้อมูลนั้นออกมาได้ เวอร์ชันที่ปลอดภัย:
หมายเหตุให้ความรู้: หลีกเลี่ยง –สร้างอาร์กิวเมนต์ สำหรับความลับต่างๆ ของ BuildKit ลับ ช่วยให้มั่นใจได้ว่าข้อมูลลับจะถูกใช้ในหน่วยความจำระหว่างการสร้างเท่านั้น และจะไม่ถูกจัดเก็บไว้ในเลเยอร์ใดๆ
การป้องกันเชิงปฏิบัติ: การก่อสร้างที่สะอาดและการจัดการความลับที่ปลอดภัย
การสร้างระบบที่สะอาดหมดจดเป็นรากฐานของการใช้งาน Docker อย่างปลอดภัย กระบวนการทำงานที่ปลอดภัยจะกำจัดข้อมูลลับตั้งแต่เนิ่นๆ และป้องกันการเก็บรักษาข้อมูลโดยไม่ตั้งใจในเลเยอร์ระดับกลาง
ปฏิบัติที่ดีที่สุด
- ควรใช้ BuildKit เสมอ -ความลับ ภูเขา สำหรับข้อมูลที่ละเอียดอ่อน
- ห้ามใช้ ARG หรือ ENV สำหรับข้อมูลรับรอง
- เพิ่ม .env, ความลับ/, กำหนดค่า/ ไปยัง .ด็อกเกอร์เพิกเฉย.
- ลบไฟล์ชั่วคราว ก่อนขั้นตอนการสร้างภาพขั้นสุดท้าย
- แยกแคชการสร้างออก ตามสภาพแวดล้อมเพื่อหลีกเลี่ยงการปนเปื้อนข้าม
รายการตรวจสอบการป้องกันฉบับย่อ
- ตรวจสอบตัวแปรสภาพแวดล้อมลับทั้งหมดใน Dockerfile
- ตรวจสอบให้แน่ใจว่าไม่มีข้อมูลประจำตัวใดปรากฏอยู่ ENV, หาเรื่องหรือ คัดลอก.
- ใช้ BuildKit secret mounts สำหรับข้อมูลส่วนตัว
- สแกนภาพก่อนกดส่ง
- ตรวจสอบ .ด็อกเกอร์เพิกเฉย ไม่รวมไฟล์ส่วนตัว
หมายเหตุให้ความรู้: เลเยอร์ของ Docker นั้นไม่สามารถเปลี่ยนแปลงได้ ควรทำการสร้างอิมเมจแบบสะอาดและชั่วคราวเสมอ และเก็บข้อมูลลับไว้ภายนอกประวัติอิมเมจ
ตรวจจับความลับที่ถูกเปิดเผยด้วยการสแกนอัตโนมัติ
ระบบสแกนอัตโนมัติตรวจจับการรั่วไหล ตรวจสอบความลับใน Dockerfile ก่อนการปรับใช้ เครื่องมืออย่าง Trivy, Xygeni หรือ GitHub Advanced Security สามารถตรวจจับความลับในเลเยอร์ของอิมเมจหรือตัวแปรสภาพแวดล้อมที่ไม่ปลอดภัยใน Dockerfile ได้
ตัวอย่างโค้ดการทำงานและการบังคับใช้ตามบริบท
เพิ่มขั้นตอนนี้ลงใน CI/CD pipelineเป็นส่วนหนึ่งของระบบรักษาความปลอดภัย
หมายเหตุให้ความรู้: ผสานการวิเคราะห์แบบคงที่และการสแกนคอนเทนเนอร์เพื่อตรวจจับข้อมูลประจำตัวที่เขียนไว้ในโค้ดโดยตรงหรือคำสั่งที่ไม่ปลอดภัยใน Dockerfile ก่อนการปรับใช้
Xygeni ช่วยรักษาความปลอดภัยให้กับระบบของคุณได้อย่างไร Pipeline
ไซเกนี ความลับด้านความปลอดภัย เสริมความแข็งแกร่งในการปกป้องการสร้าง Docker โดยการวิเคราะห์ Dockerfile และการกำหนดค่าการสร้างเพื่อค้นหาความลับใน Dockerfile การใช้งาน ENV/ARG ที่ไม่ปลอดภัย และข้อมูลประจำตัวที่เปิดเผยในเมตาเดต้าของอิมเมจ มันรวมเข้าเป็น CI/CD pipelineรวมถึงการบังคับใช้มาตรฐานการสร้างซอฟต์แวร์ที่สะอาดและเป็นไปตามข้อกำหนด และการบล็อกไฟล์ที่ไม่ปลอดภัยก่อนการเผยแพร่
ตัวอย่างโค้ดฟังก์ชันการทำงานและราวกันตก
หมายเหตุให้ความรู้: ไซเกนี บังคับใช้มาตรฐานการสร้างที่ปลอดภัยโดยอัตโนมัติ ช่วยให้ทีมรักษาการปฏิบัติตามข้อกำหนดและป้องกันการรั่วไหลของข้อมูลลับในเลเยอร์ของ Docker
สรุป: ป้องกันการรั่วไหลของข้อมูลลับจากตัวแปรสภาพแวดล้อมใน Dockerfile
โครงสร้างแบบหลายชั้นของ Docker ไม่เคยลืม เมื่อคุณฝังความลับลงไปแล้ว มันจะยังคงอยู่ แม้หลังจาก "ลบ" ออกไปแล้วก็ตาม ความลับใน Dockerfile ที่ตั้งค่าไม่ถูกต้อง ตัวแปรความลับใน Dockerfile และตัวแปรสภาพแวดล้อมความลับใน Dockerfile ที่ไม่ปลอดภัย จะทำให้ข้อมูลที่ละเอียดอ่อนติดอยู่ในบิลด์และรีจิสทรีของคุณ
เพื่อปกป้องคุณ pipelines:
- ห้ามใช้เด็ดขาด หาเรื่อง or ENV เพื่อตรวจสอบคุณสมบัติ
- สร้างด้วยเสมอ -ความลับ.
- ยกเว้นไฟล์ที่มีความละเอียดอ่อนผ่านทาง .ด็อกเกอร์เพิกเฉย.
- ผสานรวมการสแกนอัตโนมัติและ Xygeni Code Security การบังคับใช้
การปรับปรุงครั้งต่อไปของคุณไม่ควรทำให้ความลับของคุณยังคงอยู่ต่อไป จงปกป้องความลับเหล่านั้นก่อนที่มันจะฝังรากลึก





