Dans mon entreprise, nous utilisons LDAP pour disposer d'un ensemble cohérent de comptes sur toutes les machines, puis nous utilisons un outil de gestion de la configuration (dans notre cas, cfengine) pour distribuer les données de la base de données. authorized_keys
pour chaque utilisateur sur l'ensemble des serveurs. Les fichiers clés eux-mêmes sont conservés (avec d'autres informations sur la configuration du système) dans un dépôt git afin que nous puissions voir quand les clés entrent et sortent. cfengine distribue également un fichier sudoers
qui contrôle qui a le droit d'exécuter quoi en tant que root sur chaque hôte, en utilisant les utilisateurs et les groupes de l'annuaire LDAP.
L'authentification par mot de passe est complètement désactivée sur nos serveurs de production, l'authentification par clé SSH est donc obligatoire. La politique encourage l'utilisation d'une clé séparée pour chaque ordinateur portable/de bureau/quoi que ce soit et l'utilisation d'une phrase de passe sur toutes les clés afin de réduire l'impact de la perte ou du vol d'un ordinateur portable.
Nous avons également un hôte bastion qui est utilisé pour accéder aux hôtes du réseau de production, ce qui nous permet d'avoir des règles de pare-feu très restrictives autour de ce réseau. La plupart des ingénieurs ont une configuration SSH spéciale pour rendre cela transparent :
Host prod-*.example.com
User jsmith
ForwardAgent yes
ProxyCommand ssh -q bastion.example.com "nc %h %p"
L'ajout d'une nouvelle clé ou le retrait d'une ancienne nécessite un peu de cérémonial dans cette configuration. Je dirais que pour l'ajout d'une nouvelle clé, il est souhaitable que ce soit une opération qui laisse une trace d'audit et qui soit visible par tout le monde. Cependant, en raison des frais généraux que cela implique, je pense que les gens négligent parfois de retirer une ancienne clé lorsqu'ils n'en ont plus besoin et nous n'avons pas de véritable moyen de suivre cette opération, sauf pour faire le ménage lorsqu'un employé quitte l'entreprise. Cela crée également des frictions supplémentaires lors de l'intégration d'un nouvel ingénieur, puisqu'il doit générer une nouvelle clé et l'envoyer à tous les hôtes avant de pouvoir être totalement productif.
Cependant, le plus grand avantage est d'avoir un nom d'utilisateur distinct pour chaque utilisateur, ce qui facilite un contrôle d'accès plus granulaire lorsque nous en avons besoin et donne à chaque utilisateur une identité qui apparaît dans les journaux d'audit, ce qui peut être très utile pour essayer de retracer un problème de production à partir d'une action de l'administrateur système.
Dans cette configuration, il est gênant d'avoir des systèmes automatisés qui prennent des mesures contre les hôtes de production, car leurs clés SSH "bien connues" peuvent servir de voie d'accès alternative. Jusqu'à présent, nous avons simplement fait en sorte que les comptes utilisateurs de ces systèmes automatisés n'aient que l'accès minimal dont ils ont besoin pour faire leur travail et nous avons accepté qu'un utilisateur malveillant (qui doit déjà être un ingénieur ayant un accès à la production) puisse également effectuer ces mêmes actions de manière semi-anonyme en utilisant la clé de l'application.