Pertanyaan Bagaimana cara menangani pembaruan keamanan dalam kontainer Docker?


Ketika menyebarkan aplikasi ke server, biasanya ada pemisahan antara apa yang bundel aplikasi dengan dirinya sendiri dan apa yang diharapkan dari platform (sistem operasi dan paket yang diinstal) untuk menyediakan. Satu hal dari ini adalah bahwa platform dapat diperbarui secara independen dari aplikasi. Ini berguna misalnya ketika pembaruan keamanan perlu diterapkan segera ke paket yang disediakan oleh platform tanpa membangun kembali seluruh aplikasi.

Secara tradisional pembaruan keamanan telah diterapkan hanya dengan menjalankan perintah pengelola paket untuk menginstal versi terbaru dari paket pada sistem operasi (misalnya "pembaruan yum" pada RHEL). Tetapi dengan munculnya teknologi kontainer seperti Docker di mana gambar kontainer pada dasarnya memaketkan kedua aplikasi dan platform, apa cara kanonik menjaga sistem dengan kontainer up to date? Baik host maupun peti kemas memiliki paket paket sendiri yang independen, yang perlu diperbarui dan diperbarui pada host tidak akan memperbarui paket apa pun di dalam kontainer. Dengan dirilisnya RHEL 7 di mana kontainer Docker terutama ditampilkan, akan menarik untuk mendengar apa yang direkomendasikan cara Redhat untuk menangani pembaruan keamanan kontainer.

Pemikiran tentang beberapa opsi:

  • Membiarkan paket pembaruan pengelola paket pada host tidak akan memperbarui paket di dalam kontainer.
  • Setelah meregenerasi semua gambar kontainer untuk menerapkan pembaruan tampaknya memecah pemisahan antara aplikasi dan platform (memperbarui platform membutuhkan akses ke proses pembuatan aplikasi yang menghasilkan gambar Docker).
  • Menjalankan perintah manual di dalam masing-masing wadah berjalan tampaknya rumit dan perubahan beresiko ditimpa kontainer waktu berikutnya diperbarui dari artefak rilis aplikasi.

Jadi tidak ada satu pun dari pendekatan ini yang tampaknya memuaskan.


103
2017-07-08 21:54




Ide terbaik untuk yang saya lihat sejauh ini adalah Proyek Atom. Aku tidak berpikir itu cukup siap untuk prime time sekalipun. - Michael Hampton♦
Valko, alur kerja apa yang Anda dapatkan? Saya menjalankan kontainer jangka panjang (hosting php-cgi, misalnya) dan apa yang saya temukan sejauh ini adalah: docker pull debian/jessie untuk memperbarui gambar, kemudian membangun kembali gambar saya yang sudah ada, kemudian hentikan wadah dan jalankan lagi (dengan gambar baru). Gambar yang saya buat memiliki nama yang sama dengan yang sebelumnya, jadi permulaannya dilakukan melalui skrip. Saya kemudian menghapus gambar "tanpa nama". Saya pasti akan menghargai alur kerja yang lebih baik. - miha
miha: Kedengarannya mirip dengan apa yang akhirnya saya lakukan. Pada dasarnya terus memperbarui dan membangun kembali semua gambar sebagai bagian dari pembuatan rilis baru. Dan memulai kembali wadah menggunakan gambar baru. - Markus Hallmann
Jawaban terbaik sini banyak membantu karena ada skrip yang berisi perintah utama untuk melakukan persis seperti yang dikatakan Johannes Ziemke: - Hudson Santos


Jawaban:


Gambar Docker membundel aplikasi dan "platform", itu benar. Namun biasanya gambar tersebut terdiri dari gambar dasar dan aplikasi yang sebenarnya.

Jadi cara kanonik untuk menangani pembaruan keamanan adalah memperbarui gambar dasar, kemudian membangun kembali gambar aplikasi Anda.


43
2017-08-12 11:41



Terima kasih, ini kedengarannya masuk akal. Hanya masih ingin memperbarui platform sehingga untuk berbicara tidak perlu memicu pengemasan ulang seluruh aplikasi (pertimbangkan misalnya harus membangun kembali 100 gambar aplikasi yang berbeda karena gambar dasar tunggal mendapatkan pembaruan). Tapi mungkin ini tidak bisa dihindari dengan filosofi Docker untuk menggabungkan semuanya dalam satu gambar. - Markus Hallmann
@ValkoSipuli Anda selalu dapat menulis skrip untuk mengotomatisasi proses. - dsljanus
Mengapa tidak apt-get upgrade, upgrade dnf, pacman -syu, dll yang setara di dalam kontainer? Anda bahkan bisa membuat skrip shell yang melakukan itu lalu menjalankan aplikasi, kemudian menggunakannya sebagai entrypoint kontainer sehingga ketika wadah dimulai / restart itu meng-upgrade semua paketnya. - Arthur Kay
@ArthurKay Dua alasan: 1) Anda meledakkan ukuran penampung, karena semua paket yang ditingkatkan versinya akan ditambahkan ke lapisan penampung sambil menyimpan paket yang kedaluwarsa pada gambar. 2) Ini mengalahkan keuntungan terbesar dari gambar (penampung): Gambar yang Anda jalankan tidak sama dengan yang Anda buat / uji karena Anda mengubah paket pada waktu proses. - Johannes 'fish' Ziemke
Ada satu hal yang saya tidak mengerti: Jika Anda adalah perusahaan yang membeli perangkat lunak yang dikirim sebagai kontainer buruh pelabuhan, apakah Anda harus menunggu produsen perangkat lunak untuk membangun kembali paket aplikasi setiap kali masalah keamanan keluar ? Perusahaan mana yang akan menyerahkan kendali atas kerentanan terbuka mereka dengan cara itu? - Sentenza


Wadah seharusnya ringan dan dapat dipertukarkan. Jika penampung memiliki masalah keamanan, Anda membangun kembali versi penampung yang ditambal dan menerapkan penampung baru. (Banyak kontainer menggunakan gambar dasar standar yang menggunakan alat manajemen paket standar seperti apt-get untuk menginstal dependensi mereka, membangun kembali akan menarik pembaruan dari repositori)

Meskipun Anda dapat menambal di dalam kontainer, itu tidak akan menskala dengan baik.


6
2017-10-03 19:44





Ini ditangani secara otomatis di SUSE Enterprise Linux menggunakan zypper-docker (1)

SUSE / zypper-buruh pelabuhan

Docker Quick Start


1
2018-05-08 17:05





Pertama-tama, banyak pembaruan Anda yang Anda jalankan secara tradisional di masa lalu tidak akan berada di dalam wadah itu sendiri. Wadah harus berupa subset yang sangat ringan dan kecil dari sistem file lengkap yang biasa Anda lihat di masa lalu. Paket yang harus Anda perbarui adalah paket yang merupakan bagian dari DockerFile Anda, dan karena Anda memiliki DockerFile, Anda harus dapat melacak paket-paket dan ID kontainer yang perlu diperbarui. Cloudstein UI yang akan dirilis segera melacak bahan-bahan DockerFile ini untuk Anda sehingga seseorang dapat membangun skema pembaruan yang paling sesuai untuk wadah mereka. Semoga ini membantu


0
2017-07-08 23:23