Tout récemment, un développeur a accidentellement tenté de restaurer une base de données en production, alors qu'il aurait dû restaurer sur une copie intermédiaire. C'est facile à faire, étant donné que les noms de base de données sont similaires, c'est-à-dire CustomerName_Staging contre CustomerName_Production.
Idéalement, je les aurais sur des boîtiers entièrement séparés, mais cela est prohibitif et, à strictement parler, cela n'empêche pas la même chose de se produire si l'utilisateur se connecte au mauvais boîtier.
Ce n'est pas un problème de sécurité en soi - c'était le bon utilisateur qui travaillait avec la base de données intermédiaire, et s'il y avait du travail à faire sur la base de données de production, ce serait lui aussi. J'adorerais avoir un officier de déploiement pour séparer ces préoccupations, mais l'équipe n'est pas assez grande pour cela.
Je serais ravi d'entendre quelques conseils en termes de pratique, de configuration et de contrôles sur la façon d'éviter cela.
la source
Réponses:
Si c'est quelque chose que vous vous voyez souvent faire, automatisez-le. Et puisque vous êtes tous deux développeurs, l'écriture de code devrait se faire dans votre timonerie. :) Sérieusement cependant ... en l'automatisant, vous pouvez faire des choses comme:
Etc. Vous n'êtes limité que par votre imagination.
la source
Je ne suis pas d'accord avec l'hypothèse de la question - c'est la sécurité - mais je suis également en désaccord avec le fait que l'automatisation va sauver la situation toute seule. Je vais commencer par le problème:
Vous ne devriez pas pouvoir accidentellement faire quoi que ce soit à la production!
Cela inclut de faire des choses automatisées accidentellement.
Vous confondez la sécurité du système avec des concepts comme «qui est autorisé à faire quoi». Vos comptes de développement ne devraient pouvoir écrire que sur leurs copies, le serveur de contrôle de version et la base de données de développement. S'ils peuvent lire / écrire la production, ils peuvent être piratés et exploités pour voler des données client ou (comme vous l'avez démontré) peuvent être maltraités pour perdre des données client.
Vous devez commencer par trier votre flux de travail.
Vos comptes de développeur doivent pouvoir écrire sur leurs propres copies, contrôler la version et peut-être passer du contrôle de version dans un environnement de test.
Les utilisateurs de sauvegarde ne doivent pouvoir lire qu'à partir de la production et écrire dans votre magasin de sauvegarde (qui doit être correctement protégé).
Faire toute autre lecture / écriture sur la production devrait nécessiter une authentification spéciale et peu pratique . Vous ne devriez pas pouvoir y glisser ou oublier que vous êtes connecté. Le contrôle d'accès physique est utile ici. Cartes à puce, interrupteurs à bascule pour "armer" le compte, accès à double clé à tour simultané.
L'accès à la production ne devrait pas être quelque chose que vous devez faire tous les jours. La plupart du travail doit être effectué sur votre plate-forme de test et les déploiements en dehors des heures d'ouverture doivent être effectués en production après un examen minutieux. Un petit inconvénient ne vous tuera pas.
L'automatisation fait partie de la solution.
Je ne suis pas aveugle au fait que le retournement complet (téléchargement vers VCS, vérification de la couverture, traction vers le serveur de test, exécution de tests automatisés, réauthentification, création d'une sauvegarde, extraction depuis VCS) est un long processus.
C'est là que l'automatisation peut aider, selon la réponse de Ben. Il existe de nombreux langages de script différents qui rendent l'exécution de certaines tâches beaucoup plus facile. Assurez-vous simplement que vous ne faites pas trop facilement des choses stupides. Vos étapes de réauthentification doivent toujours être prononcées (et si elles sont dangereuses), elles doivent être incommodes et difficiles à faire sans réfléchir.
Mais seule , l'automatisation est pire qu'inutile. Cela vous aidera simplement à faire de plus grosses erreurs avec moins de réflexion.
Convient aux équipes de toutes tailles.
J'ai remarqué que vous montriez la taille de votre équipe. Je suis un gars et je me suis mis à travers ça car il n'y a qu'une seule personne pour avoir un accident. Il y a des frais généraux mais ça vaut le coup. Vous vous retrouvez avec un environnement de développement et de production beaucoup plus sûr et beaucoup plus sécurisé.
la source
Un de mes collègues a une approche intéressante à ce sujet. Son schéma de couleurs terminal pour la production est à la mode . Gris et rose et difficile à lire, ce qui est théoriquement censé garantir que quoi qu'il écrive, il avait vraiment l'intention d'écrire.
Votre kilométrage peut varier ... et je n'ai probablement pas à dire qu'il n'est guère à lui seul. :)
la source
Les développeurs ne doivent pas connaître le mot de passe de la base de données de production. Le mot de passe prod doit être aléatoire et non mémorisable - quelque chose comme le résultat de l'écrasement du clavier (
Z^kC83N*(#$Hx
). Votre mot de passe dev peut être$YourDog'sName
oucorrect horse battery staple
ou autre.Bien sûr, vous pouvez découvrir le mot de passe, surtout si vous êtes une petite équipe, en consultant le fichier de configuration de l'application cliente. C'est le seul endroit où le mot de passe prod doit exister. Cela garantit que vous devrez faire un effort délibéré pour obtenir le mot de passe prod.
(Comme toujours, vous devriez avoir des sauvegardes ponctuelles pour votre base de données de production. Par exemple, avec MySQL, archivez les journaux binaires en tant que sauvegardes incrémentielles. Pour PostgreSQL, archivez les journaux d'écriture anticipée. C'est votre protection de dernier recours pour tout type de catastrophe, auto-infligée ou non.)
la source
La réponse courte est RBAC - contrôle d'accès basé sur les rôles.
Vos autorisations pour tous les environnements doivent être différentes - et aussi ennuyeux que soient des choses comme des choses comme l'UAC, vous en avez besoin: en particulier pour les environnements PROD.
Il n'y a JAMAIS de raison pour que les développeurs aient un accès direct à Prod - quelle que soit la taille de l'organisation / de l'équipe. Votre "Dev" peut également porter les chapeaux "Stage" et "Prod", mais il doit avoir des informations d'identification et des processus différents pour atteindre différents environnements.
C'est ennuyeux? Absolument. Mais cela [aide-t-il] à empêcher le borking de vos environnements? Absolument.
la source
Une solution simple et rapide: utilisez deux comptes utilisateurs différents, un pour votre travail de développement normal qui n'a accès qu'à la base de données de développement, et un autre pour réellement opérer sur la base de données de production, avec un accès complet à celle-ci. De cette façon, vous devrez modifier activement le compte que vous utilisez avant de pouvoir apporter des modifications à la production, ce qui devrait être suffisant pour éviter les erreurs accidentelles.
La même approche peut être utilisée si vous avez deux sites Web, ou deux serveurs, ou deux environnements entiers: un compte utilisateur pour le développement sans accès (ou au moins aucun accès en écriture ) à la production, un autre compte utilisateur pour travailler sur le système de production ( s).
Il s'agit de la même approche qu'un administrateur système disposant d'un compte non administrateur standard pour le travail de routine (lecture d'e-mails, navigation sur le Web, suivi des tickets, classement des feuilles de temps, rédaction de documentation, etc.) et d'un compte administrateur complet distinct à utiliser lors de l'exploitation sur les serveurs et / ou Active Directory.
la source