Řešení 1:
Stahujte aktualizace, netlačte
Jak budete škálovat, nebude možné provést tlačit aktualizace všech vašich produktů.
- Budete muset sledovat každý jeden zákazník, z nichž každý může mít jinou konfiguraci brány firewall.
- Budete muset vytvořit příchozí připojení přes firewall zákazníka, což by vyžadovalo přesměrování portů nebo jiný podobný mechanismus. Toto je bezpečnostní riziko pro vaše zákazníky
Místo toho nechte své produkty pravidelně „vytahovat“ aktualizace a poté můžete na straně serveru přidat další kapacitu, jak budete růst.
Jak?
Tento problém již byl vyřešen, jak jste navrhl. Zde je několik přístupů, které mě napadají.
- pomocí apt :Použijte vestavěný systém apt s vlastním seznamem PPA a zdrojů. Jak nastavím PPA?
- Ne: Pokud nepoužíváte veřejnou hostingovou službu, jako je launchpad, není nastavení vlastního systému balení apt PPA + pro slabé srdce.
- pomocí ssh :Vygenerujte veřejný klíč SSH pro každý produkt a poté přidejte klíč tohoto zařízení na své aktualizační servery. Pak stačí mít váš software
rsync
/scp
požadované soubory.- Ne: Musíte sledovat (a zálohovat!) všechny veřejné klíče pro každý produkt, který odešlete.
- Pro :Bezpečnější než nezpracované stahování, protože k aktualizacím mají přístup pouze zařízení s nainstalovaným veřejným klíčem.
-
nezpracované stahování + kontrola podpisu :
- Zveřejněte někde podepsaný soubor aktualizace (Amazon S3, FTP server atd.)
- Váš produkt pravidelně kontroluje aktualizační soubor, který má být změněn, a poté stahuje/ověřuje podpis.
- Kon :V závislosti na tom, jak to nasadíte, mohou být soubory veřejně přístupné (což může usnadnit zpětnou analýzu a hackování vašeho produktu)
-
přípustné :Ansible je skvělý nástroj pro správu systémových konfigurací. Je to v říši loutek / kuchařů, ale je bez agentů (používá python) a je navrženo tak, aby bylo idempotentní. Pokud by nasazení vašeho softwaru vyžadovalo komplikovaný bash skript, použil bych nástroj jako tento, aby bylo provádění aktualizací méně komplikované.
Samozřejmě existují i jiné způsoby, jak toho dosáhnout. Ale přivádí mě to k důležitému bodu.
Podepište/ověřte své aktualizace!
Bez ohledu na to, co děláte, je to nezbytné že máte mechanismus, který zajistí, že s vaší aktualizací nebylo manipulováno. Uživatel se zlými úmysly by se mohl vydávat za váš aktualizační server v jakékoli z výše uvedených konfigurací. Pokud aktualizaci neověříte, vaše schránka je hodně snadnější hacknout a dostat se do.
Dobrým způsobem, jak toho dosáhnout, je podepsat aktualizační soubory. Budete si muset udržovat certifikát (nebo za to někomu zaplatit), ale budete si moci nainstalovat otisk prstu na každé ze svých zařízení, než je odešlete, aby mohlo odmítnout aktualizace, se kterými bylo manipulováno.
Fyzické zabezpečení
Samozřejmě, pokud má někdo fyzický přístup k nasazení zákazníka, může server snadno převzít. Ale alespoň nemohou zaútočit na ostatní nasazení! Fyzická bezpečnost je pravděpodobně odpovědností vašeho zákazníka.
Pokud byste na chvíli chtěli, představte si, co by se stalo, kdybyste pro aktualizace použili rozsáhlou síť OpenVPN... Mohli by pak použít kompromitovaný server k útoku na každou instanci na VPN
Zabezpečení
Ať děláte cokoli, zabezpečení musí být zabudováno od začátku. Nezkracujte se zde – pokud tak učiníte, budete toho nakonec litovat.
Plné zabezpečení tohoto aktualizačního systému je mimo rozsah tohoto příspěvku a důrazně doporučuji najmout si konzultanta, pokud vy nebo někdo z vašeho týmu nemáte v této oblasti znalosti. Stojí to za každý cent.
Řešení 2:
Opravdu k nim potřebujete přístup?
Nebo je jen aktualizovat? Protože je můžete nechat aktualizovat samy, podobně jako se apt aktualizuje sám bez dozoru.
Pokud se potřebujete přihlásit
Proč ne OpenSSH démon naslouchající přes přesměrování portů? Každý zákazník může mít pro zabezpečení samostatný klíč a bude připojen pouze v případě potřeby.
Na vašich zákaznících
Musíte také vzít v úvahu, co je zákazník ochoten přijmout. Nemusí jim vyhovovat žádný vzdálený přístup k jejich síti nebo jim mohou vyhovovat pouze specifické technologie/konfigurace.
Řešení 3:
Navrhuji nástroj pro orchestraci, jako je Puppet nebo Salt.
Salt je fronta zpráv a může vytvořit trvalé odchozí připojení z vašeho zařízení k hlavnímu serveru. Můžete to použít ke spouštění libovolných příkazů na zařízeních... jako apt-get
.
Druhou možností je Puppet, kde stále máte hlavní server a klienti vytvářejí odchozí připojení ze svých umístění.
Oba tyto nástroje používám k podobnému účelu, kdy nemusím mít administrativní kontrolu nad firewallem.