Tirer des mises à jour, ne pas pousser
À mesure que vous évoluerez, il deviendra impossible de faire des mises à jour push pour tous vos produits.
- Vous devrez suivre chaque client, qui pourrait avoir une configuration de pare-feu différente.
- Vous devrez créer des connexions entrantes via le pare-feu du client, ce qui nécessiterait une redirection de port ou un autre mécanisme similaire. Il s'agit d'un risque pour la sécurité de vos clients
Au lieu de cela, demandez à vos produits de récupérer régulièrement leurs mises à jour, puis vous pouvez ajouter une capacité supplémentaire côté serveur au fur et à mesure de votre croissance.
Comment?
Ce problème a déjà été résolu, comme vous l'avez suggéré. Voici plusieurs approches auxquelles je peux penser.
- en utilisant apt : utilisez le système apt intégré avec un PPA personnalisé et une liste de sources. Comment configurer un PPA?
- Inconvénients: à moins que vous n'utilisiez un service d'hébergement public comme le tableau de bord, la configuration de votre propre système d'emballage PPA + n'est pas pour les âmes sensibles.
- using ssh : Générez une clé publique SSH pour chaque produit, puis ajoutez la clé de cet appareil à vos serveurs de mise à jour. Ensuite, il vous suffit d'avoir votre logiciel
rsync
/ scp
les fichiers requis.
- Con: devez suivre (et sauvegarder!) Toutes les clés publiques de chaque produit que vous envoyez.
- Pro : Plus sûr qu'un téléchargement brut, car les seuls appareils qui peuvent accéder aux mises à jour seraient ceux avec la clé publique installée.
téléchargement brut + vérification de signature :
- Publiez un fichier de mise à jour signé quelque part (Amazon S3, serveur FTP, etc.)
- Votre produit vérifie périodiquement le fichier de mise à jour à modifier, puis télécharge / vérifie la signature.
- Con : Selon la façon dont vous déployez cela, les fichiers peuvent être accessibles au public (ce qui peut faciliter la rétro-ingénierie et le piratage de votre produit)
ansible : Ansible est un excellent outil pour gérer les configurations du système. C'est dans le domaine des marionnettes / chefs, mais il est sans agent (utilise du python) et conçu pour être idempotent. Si le déploiement de votre logiciel nécessitait un script bash compliqué, j'utiliserais un outil comme celui-ci pour simplifier l'exécution de vos mises à jour.
Bien sûr, il existe d'autres façons de le faire .. Mais cela m'amène à un point important.
Signez / validez vos mises à jour!
Quoi que vous fassiez, il est impératif que vous ayez un mécanisme pour vous assurer que votre mise à jour n'a pas été falsifiée. Un utilisateur malveillant pourrait emprunter l'identité de votre serveur de mise à jour dans l'une des configurations ci-dessus. Si vous ne validez pas votre mise à jour, votre boîte est beaucoup plus facile à pirater et à entrer.
Une bonne façon de procéder consiste à signer vos fichiers de mise à jour. Vous devrez conserver un certificat (ou payer quelqu'un pour le faire), mais vous pourrez installer votre empreinte digitale sur chacun de vos appareils avant de les expédier afin qu'ils puissent rejeter les mises à jour qui ont été falsifiées.
Sécurité physique
Bien sûr, si quelqu'un a un accès physique au déploiement du client, il peut facilement prendre le contrôle du serveur. Mais au moins, ils ne peuvent pas attaquer les autres déploiements! La sécurité physique est probablement la responsabilité de votre client.
Si vous voulez un instant, imaginez ce qui se passerait si vous utilisiez un grand réseau OpenVPN pour les mises à jour ... Ils pourraient alors utiliser le serveur compromis pour attaquer chaque instance sur le VPN
Sécurité
Quoi que vous fassiez, la sécurité doit être intégrée dès le début. Ne coupez pas les coins ici - vous le regretterez à la fin si vous le faites.
La sécurisation complète de ce système de mise à jour est hors de portée de cet article, et je recommande fortement d'embaucher un consultant si vous ou un membre de votre équipe ne connaissez pas ce domaine. Ça vaut chaque centime.