Solusi 1:
Tarik update, jangan push
Saat Anda menskalakan, melakukan push menjadi tidak layak pembaruan untuk semua produk Anda.
- Anda harus melacak setiap satu pelanggan, yang masing-masing mungkin memiliki konfigurasi firewall yang berbeda.
- Anda harus membuat masuk koneksi melalui firewall pelanggan, yang akan membutuhkan port-forwarding atau mekanisme serupa lainnya. Ini merupakan risiko keamanan bagi pelanggan Anda
Alih-alih, buat produk Anda 'menarik' pembaruannya secara berkala, lalu Anda dapat menambahkan kapasitas ekstra di sisi server seiring pertumbuhan Anda.
Bagaimana?
Masalah ini telah diselesaikan, seperti yang Anda sarankan. Inilah beberapa pendekatan yang dapat saya pikirkan.
- menggunakan apt :Gunakan sistem apt bawaan dengan PPA khusus dan daftar sumber. Bagaimana cara menyiapkan PPA?
- Kontra: Kecuali jika Anda menggunakan layanan hosting publik seperti launchpad, Menyiapkan sistem pengemasan apt PPA + Anda sendiri bukan untuk menjadi lemah hati.
- menggunakan ssh :Buat kunci publik SSH untuk setiap produk, lalu tambahkan kunci perangkat tersebut ke server pembaruan Anda. Kemudian, miliki perangkat lunak Anda
rsync
/scp
file yang diperlukan.- Kontra: Harus melacak (dan mencadangkan!) semua kunci publik untuk setiap produk yang Anda kirim.
- Pro :Lebih aman daripada unduhan mentah, karena satu-satunya perangkat yang dapat mengakses pembaruan adalah perangkat yang memasang kunci publik.
-
unduh mentah + centang tanda tangan :
- Posting file pembaruan yang ditandatangani di suatu tempat (Amazon S3, server FTP, dll)
- Produk Anda secara berkala memeriksa file pembaruan yang akan diubah, lalu mengunduh/memverifikasi tanda tangannya.
- Kontra :Bergantung pada cara Anda menerapkan ini, file mungkin dapat diakses publik (yang dapat membuat produk Anda lebih mudah direkayasa ulang dan diretas)
-
mungkin :Ansible adalah alat yang hebat untuk mengelola konfigurasi sistem. Itu di ranah boneka / koki, tetapi tanpa agen (menggunakan python) dan dirancang untuk menjadi idempoten. Jika menerapkan perangkat lunak Anda memerlukan skrip bash yang rumit, saya akan menggunakan alat seperti ini untuk membuatnya lebih mudah dalam melakukan pembaruan Anda.
Tentu saja, ada cara lain untuk melakukannya.. Tapi ini membawa saya ke poin penting.
Tanda tangani/validasi pembaruan Anda!
Apa pun yang Anda lakukan, itu penting bahwa Anda memiliki mekanisme untuk memastikan bahwa pembaruan Anda tidak dirusak. Pengguna jahat dapat menyamar sebagai server pembaruan Anda di salah satu konfigurasi di atas. Jika Anda tidak memvalidasi pembaruan Anda, kotak Anda banyak lebih mudah diretas dan dimasuki.
Cara yang baik untuk melakukannya adalah dengan menandatangani file pembaruan Anda. Anda harus mempertahankan sertifikat (atau membayar seseorang untuk melakukannya), tetapi Anda dapat memasang sidik jari di setiap perangkat sebelum mengirimkannya sehingga mereka dapat menolak pembaruan yang telah dirusak.
Keamanan Fisik
Tentu saja, jika seseorang memiliki akses fisik ke penerapan pelanggan, mereka dapat dengan mudah mengambil alih server. Tapi setidaknya mereka tidak dapat menyerang penerapan lain! Keamanan fisik kemungkinan merupakan tanggung jawab pelanggan Anda.
Jika Anda ingin sejenak, bayangkan apa yang akan terjadi jika Anda menggunakan jaringan OpenVPN yang besar untuk pembaruan... Mereka kemudian dapat menggunakan server yang disusupi untuk menyerang setiap kejadian di VPN
Keamanan
Apa pun yang Anda lakukan, keamanan harus dibangun dari awal. Jangan mengambil jalan pintas di sini - Anda akan menyesal pada akhirnya jika melakukannya.
Sepenuhnya mengamankan sistem pembaruan ini berada di luar cakupan posting ini, dan saya sangat menyarankan untuk menyewa konsultan jika Anda atau seseorang di tim Anda tidak memiliki pengetahuan di bidang ini. Ini bernilai setiap sen.
Solusi 2:
Apakah Anda benar-benar perlu mengaksesnya?
Atau hanya memperbarui mereka? Karena Anda dapat meminta mereka memperbarui sendiri, mirip dengan seberapa tepat pembaruan itu sendiri tanpa pengawasan.
Jika Anda perlu masuk
Mengapa bukan daemon OpenSSH yang mendengarkan melalui port forwarding? Setiap pelanggan dapat memiliki kunci terpisah untuk keamanan dan hanya akan terhubung bila diperlukan.
Terserah pelanggan Anda
Anda perlu mempertimbangkan apa yang pelanggan mau terima juga. Mereka mungkin tidak nyaman dengan akses jarak jauh ke jaringan mereka, atau hanya nyaman dengan teknologi/konfigurasi tertentu.
Solusi 3:
Saya menyarankan alat orkestrasi seperti Puppet atau Salt.
Salt adalah antrean pesan dan dapat membuat sambungan keluar terus-menerus dari peralatan Anda ke server utama. Anda dapat menggunakan ini untuk menjalankan perintah arbitrer pada peralatan... seperti apt-get
.
Opsi lainnya adalah Wayang, di mana Anda masih memiliki server master dan klien membuat koneksi keluar dari lokasi mereka.
Saya menggunakan kedua alat ini untuk tujuan serupa di mana saya mungkin tidak memiliki kontrol administratif atas firewall.