Comment protéger le déploiement d'Ansible pour atténuer les accidents?

12

Récemment, l'Amazon S3 a connu une panne majeure dans la région des États-Unis-1. Il semble que cela soit probablement dû à une faute d'orthographe lors de l'exécution d'un playbook de maintenance dans Ansible ou un outil similaire. Vous pouvez mettre un wrapper de script shell autour de ansible-playbook pour ressembler à:

#!/bin/bash
/usr/bin/ansible-playbook "$@" --list-hosts --list-tasks
read -p "Are you sure? (y/n) " answer
test "$answer" = "y" || exit 0
exec /usr/bin/ansible-playbook "$@"

Mais quelles sont les autres méthodes que vous utilisez pour améliorer la sécurité et réduire le risque d'erreur provoquant une panne majeure pour votre entreprise.

Jiri Klouda
la source
1
Je vote pour fermer cette question comme hors sujet car elle conviendra mieux à unix.stackexchange.com ou superuser.com
Romeo Ninov
4
L'infrastructure en tant que code est l'un des composants clés pour accéder à des centaines de déploiements par jour. Être en mesure de sécuriser les outils qui fournissent cette vitesse de créer une panne majeure dans les opérations me semble être un sujet pertinent. J'ai peut-être tort, bien sûr. J'apprécie cependant votre point de vue. Souhaitez-vous vous joindre à cette discussion sur les questions d'activation et de désactivation dans Meta?
Jiri Klouda
Par exemple, cette question semble être acceptée comme sur le sujet: devops.stackexchange.com/questions/98/…
Jiri Klouda
Jiri, faites-vous la différence entre votre question et celle que vous mentionnez?
Romeo Ninov
5
Si ces types de questions pouvaient convenir au superutilisateur, il n'y aurait pas besoin de devops.se. C'est définitivement sur le sujet ici. Les opérations et l'atténuation des erreurs humaines sont au cœur de DevOps.
Evgeny

Réponses:

6

Nous utilisons des travaux dans Jenkins pour déclencher des déploiements. Il garantit que, peu importe qui effectue le déploiement, la commande ansible exécutée sera la même. Un bon bonus est l'enregistrement des journaux de construction lorsque les déploiements ont été déclenchés, qui les a déclenchés et ce qui s'est exactement passé pendant le déploiement.

Ce n'est certainement pas infaillible, mais cela a été une belle amélioration par rapport à l'exécution manuelle de manuels de jeu.

Pour les changements plus importants / plus risqués, cela devrait idéalement être combiné avec une certaine forme de gestion du changement, de sorte que les changements ne sont apportés qu'après qu'une autre personne / équipe a examiné le changement et l'approche du changement pour aider à identifier et à résoudre tôt les problèmes potentiels.

De plus, cela ne fait jamais de mal d'avoir un coéquipier qui comprend le changement que vous apportez être présent et regarder pendant que vous effectuez de grands changements afin qu'ils puissent surveiller et aider à prévenir les erreurs dans l'exécution du changement.

Bradym
la source
4

Catégories d'erreurs

Il existe deux façons de considérer les facteurs humains qui conduisent à des problèmes et à des accidents:

  1. Vous pouvez voir l'erreur humaine comme la cause d'un incident. Dans ce cas, «erreur humaine», sous quelque étiquette que ce soit - perte de conscience de la situation, violation de la procédure, lacunes réglementaires, lacunes managériales est la conclusion de votre enquête.
  2. Vous pouvez voir l'erreur humaine comme le symptôme d'un problème plus profond. Dans ce cas, l'erreur humaine est le point de départ de votre enquête. Vous découvrirez comment l'erreur humaine est systématiquement liée aux fonctionnalités des outils, des tâches et de l'environnement opérationnel / organisationnel des personnes.

Le premier est appelé l' approche humaine et le second l' approche système .

Pour expliquer l'échec en utilisant l'approche humaine, vous rechercheriez l'échec et trouveriez les évaluations inexactes des gens, les mauvaises décisions ou les mauvais jugements.

Pour expliquer l'échec en utilisant l'approche système, vous n'essayez pas de trouver où les gens se sont trompés. Au lieu de cela, découvrez comment les évaluations et les actions des gens avaient du sens à l'époque, compte tenu des circonstances qui les entouraient.

Par exemple, Donald Berwick de l'Institute for Healthcare Improvement (IHI) soutient que l'amélioration de la sécurité des patients nécessite des changements dans la conception des systèmes :

... Nous sommes humains et les humains se trompent. Malgré l'indignation, malgré le chagrin, malgré l'expérience, malgré nos meilleurs efforts, malgré nos vœux les plus profonds, nous sommes nés faillibles et le resterons. Être prudent aide, mais cela ne nous amène nulle part près de la perfection ... Le remède est de changer les systèmes de travail. Le remède est dans la conception. L'objectif devrait être une sécurité extrême. Je crois que nous devrions être aussi en sécurité dans nos hôpitaux que chez nous. Mais nous ne pouvons pas atteindre cet objectif par l'exhortation, la censure, l'indignation et la honte. Nous ne pouvons l'atteindre que par un engagement à changer, de sorte que les erreurs humaines normales puissent être rendues sans rapport avec le résultat, continuellement trouvées et atténuées avec talent.

Donald M Berwick. Pas encore! BMJ 2001


Suppression des erreurs du système

Une excellente façon de trouver (et de corriger) les différentes façons dont l'échec se produit après coup est de rechercher la cause première sans blâmer les gens. Ceci est souvent appelé «post-mortem irréprochable», et Etsy Code en tant que billet de blog Craft développe le concept. Les gens d'Etsy ont présenté et écrit plus à ce sujet sur d'autres forums et blogs.

Pour éviter les erreurs en premier lieu, certains traits culturels sont indispensables. Les procédures et divers artefacts créés dans le système doivent tester que leur utilisation par les humains est très claire et explicite. Souvent, ceux qui créent ne sont pas ceux qui consomment, ce qui entraîne une déconnexion et un manque de clarté. Le système n'est alors pas sûr à utiliser car la seule personne qui connaît toutes les hypothèses est celle qui l'a créé (et personne d'autre).

Mesures de contrôle efficaces

Mettre en place des mesures de contrôle efficaces pour arrêter le processus en cas d'erreur. C'est à l'abri des erreurs. Les mesures de contrôle efficaces sont des modifications de conception qui empêchent ou empêchent les processus de se poursuivre lorsqu'une erreur s'est produite en introduisant une défaillance du processus

Exemple:

En 1896, Sakichi Toyoda a inventé le premier métier à tisser électrique japonais appelé «le métier à tisser électrique Toyoda Steam». Ce développement a augmenté la productivité de vingt fois, et la qualité des textiles s'est améliorée et a provoqué une révolution dans l'industrie textile au Japon. Mais voici la découverte et le principe subtils mais très importants:

lorsque l'aiguille s'est cassée, la machine s'est arrêtée

Sakichi Toyoda a créé une innovation pour le métier à tisser qui deviendra plus tard l'un des piliers du système de production Toyota (Lean). Ce pilier que nous appelons maintenant Jidoka, parfois appelé «automatisation intelligente avec une touche humaine» ou «autonomisation».

En grande partie, Andon (arrêt au premier défaut) et Poka-Yoke (correction des erreurs) sont des développements ultérieurs qui trouvent leur influence dans le métier à tisser.

Suppression des faiblesses ponctuelles

Le terme faiblesse en un seul point fait référence à la création de redondances dans le système comme une approche pour améliorer la fiabilité du système. La redondance est créée en augmentant le nombre de systèmes ou d'individus impliqués dans le processus. Avoir plus de systèmes de sauvegarde ou plus de contrôles (double, triple ou plus) augmente la probabilité que le processus se déroule correctement.

Un bon exemple en est le «principe des quatre yeux», qui signifie que «toutes les décisions et transactions commerciales doivent être approuvées par le PDG et le directeur financier. Étant donné que le directeur financier ne relève pas du directeur général, un mécanisme de contrôle indépendant est en place» .

source: https://en.wikipedia.org/wiki/Two-man_rule

Rendre les dangers évidents

Si les dangers deviennent évidents ou impossibles à atteindre, les humains ne peuvent pas créer d'erreurs. Par exemple, le codage couleur est une approche courante pour rendre les erreurs plus évidentes. Ou si vous pensez à diverses prises d'ordinateur qui ne peuvent être insérées que dans un sens et pas dans l'autre, etc.


De grands livres parlent du sujet, et ce ne serait pas une bonne réponse sans les mentionner:

Evgeny
la source
1
Une méthode très importante que vous ne mentionnez pas est le «principe des quatre yeux» qui est utilisé dans la finance - soit comme une obligation réglementaire, soit comme un garde-fou. Dans l'industrie du logiciel, il est mis en œuvre de diverses manières, comme par exemple les revues de code, mais peut également être utilisé pour valider des commandes affectant des systèmes en direct.
Michael Le Barbier Grünewald
J'ajouterai cela au principe SPW.
Evgeny
1
Grande discussion sur les erreurs, mais elle ne dit pas comment se protéger contre les déploiements accidentels.
Alexandre
1
La question concerne spécifiquement Ansible. Cette réponse est très approfondie et bien documentée, mais c'est une étape éloignée du problème du monde réel.
Woodland Hunter
1
@Evgeny Lorsque j'ai répondu à votre question sur les performances d'AWS Lambda, au début, je n'ai pas dit comment exécuter vos tests et vous l'avez signalé. Vous aviez raison et j'ai ajusté ma réponse. Je comprends que les gens qui ne votent pas votre réponse ici. Votre réponse serait bonne pour une question sur "Comment aborder et réduire les erreurs sur notre lieu de travail?". Ici, OP a une question sur Ansible et vous ne la mentionnez même pas. Pire, OP donne une indication sur le type de solution qu'il recherche, et vous allez dans l'autre sens. Votre réponse est excellente (vraiment), mais pas pour cette question.
Alexandre
1

Comme l'a dit @bradim, l'utilisation de votre outil CI / CD pour lancer le déploiement au lieu de commandes manuelles est généralement un bon pas en avant, tout comme l'ajout de tests dans votre pipeline qui testent réellement vos scripts de déploiement sur votre environnement intermédiaire (ou fraîchement créé), où vous pouvez détecter les bogues plus tôt.

J'ajouterais également qu'au lieu d'appeler directement vos scripts ansible, vous pouvez également ajouter des outils comme Ansible Tower dans votre flux, ce qui vous permettra de suivre les modifications qui ont été exécutées plus facilement et peut vous donner une étape supplémentaire de sécurité dans votre couler.

SztupY
la source