วิธีจัดการกับการอัพเดทความปลอดภัยภายในคอนเทนเนอร์ Docker


117

เมื่อปรับใช้แอปพลิเคชันไปยังเซิร์ฟเวอร์โดยทั่วไปจะมีการแยกระหว่างสิ่งที่แอปพลิเคชันรวมกับตัวเองและสิ่งที่คาดหวังจากแพลตฟอร์ม (ระบบปฏิบัติการและแพ็คเกจที่ติดตั้ง) ประเด็นหนึ่งคือการที่แพลตฟอร์มสามารถอัปเดตได้โดยอิสระจากแอปพลิเคชัน สิ่งนี้มีประโยชน์เช่นเมื่อจำเป็นต้องใช้การอัปเดตความปลอดภัยอย่างเร่งด่วนกับแพ็คเกจที่จัดทำโดยแพลตฟอร์มโดยไม่ต้องสร้างแอปพลิเคชันใหม่ทั้งหมด

การอัปเดตความปลอดภัยแบบดั้งเดิมนั้นถูกนำไปใช้โดยเพียงแค่ดำเนินการคำสั่ง package manager เพื่อติดตั้งแพ็กเกจเวอร์ชันที่อัพเดตบนระบบปฏิบัติการ (เช่น "yum update" บน RHEL) แต่ด้วยการถือกำเนิดของเทคโนโลยี container เช่น Docker ที่รูปของ container รวมทั้งแอพพลิเคชั่นและแพลตฟอร์มเป็นวิธีที่ยอมรับได้ในการรักษาระบบด้วย container เป็นอะไร? ทั้งโฮสต์และคอนเทนเนอร์มีชุดแพ็กเกจของตนเองที่เป็นอิสระที่จำเป็นต้องอัพเดตและอัพเดตบนโฮสต์จะไม่อัพเดตแพ็กเกจใด ๆ ภายในคอนเทนเนอร์ ด้วยการเปิดตัว RHEL 7 ที่มีคุณสมบัติพิเศษของ Docker container มันน่าสนใจที่จะได้ยินว่า Redhat แนะนำวิธีใดในการจัดการกับการอัปเดตความปลอดภัยของคอนเทนเนอร์

ความคิดเกี่ยวกับตัวเลือกบางอย่าง:

  • การปล่อยให้แพ็กเกจอัพเดตตัวจัดการแพ็กเกจบนโฮสต์จะไม่อัพเดตแพ็กเกจภายในคอนเทนเนอร์
  • ต้องสร้างภาพคอนเทนเนอร์ทั้งหมดเพื่อใช้การอัปเดตดูเหมือนว่าจะแยกความแตกต่างระหว่างแอปพลิเคชันและแพลตฟอร์ม (การอัปเดตแพลตฟอร์มต้องเข้าถึงกระบวนการสร้างแอปพลิเคชันซึ่งสร้างอิมเมจ Docker)
  • การรันคำสั่งแบบแมนนวลภายในแต่ละคอนเทนเนอร์ที่รันอยู่นั้นดูเหมือนว่ายุ่งยากและการเปลี่ยนแปลงมีความเสี่ยงที่จะถูกเขียนทับในครั้งต่อไปที่คอนเทนเนอร์ถูกอัพเดตจากแอ็พพลิเคชันการปล่อยสิ่งประดิษฐ์

ดังนั้นวิธีการเหล่านี้จึงไม่น่าพอใจ


1
ความคิดที่ดีที่สุดสำหรับเรื่องนี้ผมเคยเห็นเพื่อให้ห่างไกลเป็นโครงการปรมาณู ฉันไม่คิดว่ามันค่อนข้างพร้อมสำหรับช่วงเวลาสำคัญ
Michael Hampton

1
Valko คุณมีเวิร์กโฟลว์อะไรบ้าง? ฉันใช้คอนเทนเนอร์ระยะยาว (เช่น php-cgi ซึ่งเป็นโฮสต์) และสิ่งที่ฉันพบจนถึงตอนนี้คือ: docker pull debian/jessieเพื่ออัปเดตรูปภาพจากนั้นสร้างรูปภาพที่มีอยู่ของฉันใหม่จากนั้นหยุดคอนเทนเนอร์และเรียกใช้อีกครั้ง ( ด้วยภาพใหม่) ภาพที่ฉันสร้างมีชื่อเหมือนกับภาพก่อนหน้าดังนั้นการเริ่มต้นจึงทำได้ผ่านสคริปต์ จากนั้นฉันจะลบภาพ "ไม่มีชื่อ" แน่นอนฉันจะขอบคุณเวิร์กโฟลว์ที่ดีกว่า
miha

1
miha: ฟังดูคล้ายกับสิ่งที่ฉันทำไป โดยทั่วไปการปรับปรุงและสร้างภาพทั้งหมดอย่างต่อเนื่องเป็นส่วนหนึ่งของการสร้างรุ่นใหม่ และรีสตาร์ทภาชนะโดยใช้ภาพใหม่
Markus Hallmann

1
คำตอบที่ดีที่สุดที่นี่จะช่วยให้มากเพราะมีสคริปต์ที่มี commandlines หลักในการทำสิ่งที่โยฮันเน Ziemke กล่าวว่า:
ฮัดสันซานโตส

คำถามที่น่าสนใจ ฉันสงสัยเกี่ยวกับมันด้วยตัวเอง หากคุณมี 20 แอปพลิเคชั่นที่ทำงานบนโฮสต์ตัวเชื่อมต่อโฮสต์เดียวคุณต้องอัปเกรดอิมเมจพื้นฐานสร้างใหม่และรีสตาร์ท! 20 แอปพลิเคชั่นและคุณไม่รู้ด้วยซ้ำว่าการอัปเดตความปลอดภัยส่งผลกระทบต่อพวกเขาทั้งหมดหรือเพียงหนึ่งในนั้น คุณต้องสร้างอิมเมจใหม่เพื่อพูด Apache เมื่ออัปเดตความปลอดภัยส่งผลกระทบต่อ libpng เท่านั้น ดังนั้นคุณต้องจบด้วยการสร้างใหม่และรีสตาร์ทโดยไม่จำเป็น ...
Dalibor Filus

คำตอบ:


47

แอปพลิเคชันชุดภาพอิมเมจและ "แพลตฟอร์ม" ที่ถูกต้อง แต่โดยปกติแล้วภาพนั้นจะประกอบไปด้วยภาพฐานและแอพพลิเคชั่นจริง

ดังนั้นวิธีมาตรฐานเพื่อจัดการกับการปรับปรุงความปลอดภัยคือการอัพเดทอิมเมจพื้นฐานจากนั้นสร้างอิมเมจแอปพลิเคชันของคุณ


3
ขอขอบคุณมันฟังดูสมเหตุสมผล ยังคงต้องการอัปเดตแพลตฟอร์มเพื่อที่จะพูดไม่จำเป็นต้องเรียก repackaging แอปพลิเคชันทั้งหมด (ลองพิจารณาตัวอย่างเช่นต้องสร้างแอปพลิเคชั่น 100 อิมเมจใหม่เนื่องจากการอัปเดตอิมเมจฐานเดียว) แต่นี่อาจเป็นสิ่งที่หลีกเลี่ยงไม่ได้กับปรัชญานักเทียบท่าในการรวมทุกอย่างเข้าด้วยกันในภาพเดียว
Markus Hallmann

3
@ValkoSipuli คุณสามารถเขียนสคริปต์เพื่อทำให้กระบวนการเป็นไปโดยอัตโนมัติ
dsljanus

ทำไมไม่อัพเกรด apt-get, dnf upgrade, pacman -syu, หรือเทียบเท่าภายในคอนเทนเนอร์? คุณสามารถสร้างเชลล์สคริปต์ที่ทำและเรียกใช้แอปพลิเคชันจากนั้นใช้เป็นจุดเข้าใช้งานของคอนเทนเนอร์เพื่อที่ว่าเมื่อคอนเทนเนอร์เริ่มต้น / รีสตาร์ทจะอัพเกรดแพ็คเกจทั้งหมด
Arthur Kay

8
@ArthurKay เหตุผลสองประการ: 1) คุณเพิ่มขนาดของคอนเทนเนอร์เนื่องจากแพ็กเกจทั้งหมดที่ได้รับการอัพเกรดจะถูกเพิ่มลงในเลเยอร์คอนเทนเนอร์ในขณะที่รักษาแพ็กเกจที่ล้าสมัยไว้ในภาพ 2) มันเอาชนะข้อได้เปรียบที่ใหญ่ที่สุดของรูปภาพ (คอนเทนเนอร์): รูปภาพที่คุณเรียกใช้นั้นไม่เหมือนกับที่คุณสร้าง / ทดสอบเนื่องจากคุณเปลี่ยนแพคเกจบนรันไทม์
Ziemke 'ปลา' ของโยฮันเนส

7
มีสิ่งหนึ่งที่ฉันไม่เข้าใจ: หากคุณเป็น บริษัท ที่ซื้อชิ้นส่วนของซอฟต์แวร์ที่จัดส่งเป็นตัวเทียบท่าคุณต้องรอให้ผู้ผลิตซอฟต์แวร์สร้างแอพพลิเคชั่นใหม่ทุกครั้งที่มีปัญหาเรื่องความปลอดภัยออกมา ? บริษัท ใดจะยอมให้มีการควบคุมช่องโหว่ที่เปิดอยู่ในลักษณะนั้น
Sentenza

7

ภาชนะบรรจุควรมีน้ำหนักเบาและใช้แทนกันได้ ถ้าคอนเทนเนอร์ของคุณมีปัญหาด้านความปลอดภัยคุณต้องสร้างเวอร์ชันของคอนเทนเนอร์ที่ได้รับการแก้ไขและปรับใช้คอนเทนเนอร์ใหม่ (คอนเทนเนอร์จำนวนมากใช้อิมเมจฐานมาตรฐานที่ใช้เครื่องมือการจัดการแพ็กเกจมาตรฐานเช่น apt-get เพื่อติดตั้งการพึ่งพาของพวกเขาการสร้างใหม่จะดึงการอัพเดตจากที่เก็บ)

ในขณะที่คุณสามารถปะติดอยู่ภายในตู้คอนเทนเนอร์



0

ก่อนอื่นการอัปเดตจำนวนมากที่คุณเคยใช้ในอดีตจะไม่อยู่ในคอนเทนเนอร์ คอนเทนเนอร์ควรเป็นชุดย่อยที่มีน้ำหนักเบาและเล็กของระบบไฟล์แบบเต็มที่คุณคุ้นเคยในอดีต แพ็กเกจที่คุณควรอัปเดตจะเป็นแพ็กเกจที่เป็นส่วนหนึ่งของ DockerFile ของคุณและเนื่องจากคุณมี DockerFile คุณควรติดตามแพ็กเกจเหล่านั้นและ ID คอนเทนเนอร์ที่ต้องการการอัปเดต UI ของ Cloudstein ที่จะเปิดตัวเร็ว ๆ นี้จะติดตามส่วนผสม DockerFile เหล่านี้สำหรับคุณเพื่อให้สามารถสร้างชุดรูปแบบการอัปเดตที่เหมาะสมที่สุดสำหรับคอนเทนเนอร์ของพวกเขา หวังว่านี่จะช่วยได้


-1

โดยทั่วไปยิ่งแย่กว่าตัวเลือกทั้งสามที่คุณให้ไว้ อิมเมจนักเทียบท่าส่วนใหญ่ไม่ได้สร้างขึ้นด้วยตัวจัดการแพ็กเกจดังนั้นคุณจึงไม่สามารถเปลี่ยนไปใช้อิมเมจนักเทียบท่าและออกการอัปเดตได้ คุณจะต้องสร้างใหม่หรือรับภาพนักเทียบท่าใหม่

ความจริงที่ว่าคุณจำเป็นต้องสร้างใหม่หรือให้ความสนใจกับผู้อื่นเพื่อสร้างใหม่สำหรับแพตช์ความปลอดภัยดูเหมือนไม่มีเหตุผลในกรณีส่วนใหญ่

ฉันกำลังพิจารณาปรับใช้ sonarr และ radarr ในคอนเทนเนอร์ docker แต่รู้ว่าพวกเขาจะไม่ได้รับการปรับปรุงความปลอดภัยปกติคอนเทนเนอร์ของฉันได้รับเป็นตัวแบ่งการจัดการ การจัดการการอัปเดตความปลอดภัยสำหรับคอนเทนเนอร์ของฉันนั้นยุ่งยากพอสมควรโดยไม่ต้องจัดการกับปัญหาด้วยตนเองเลยต้องใช้การอัปเดตความปลอดภัยกับอิมเมจแต่ละตัวของ Docker ด้วยตนเอง


1
โพสต์ของคุณจะไม่ถือว่าเป็นคำตอบเนื่องจากคุณไม่ได้ให้คำตอบสำหรับคำถาม กรุณาเพิ่มมันเป็นความคิดเห็นคำถามและลบ "คำตอบ" ของคุณ StackExchange ไม่ใช่ฟอรัม แต่ควรได้รับการพิจารณาเป็นคำถามและคำตอบที่ผู้เชี่ยวชาญตอบคำถามที่พวกเขาสามารถให้ความช่วยเหลือได้
Phillip -Zyan K Lee- Stockmann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.