Je configure un serveur MySQL et souhaite qu'Ansible définisse le mysql-root
mot de passe lors de l'installation.
Avec l'aide d'Internet, j'ai trouvé cette solution:
- name: Set MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
apt: pkg=mysql-server state=latest
mysql_root_pwd
est une variable chargée à partir du coffre-fort Ansible. Cela fonctionne bien, mais maintenant sur le serveur il y a beaucoup de lignes dans le journal:
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None
Comment puis-je empêcher Ansible d'écrire des mots de passe en texte clair dans les fichiers journaux?
Le comportement observé semble être un bogue dans le module debconf. J'ai déposé un rapport de bug .
L'utilisateur bcoca de github a souligné que l'on peut utiliser la
no_log: true
directive dans les tâches, qui définissent les mots de passe, pour empêcher la journalisation. Ceci est une solution de contournement, qui fonctionne pour moi jusqu'à ce que le bug soit corrigé.la source
ERROR: no_log is not a legal parameter in an Ansible task or handler
sudo apt-add-repository ppa:ansible/ansible
,sudo apt-get update
,sudo apt-get install ansible
J'ai résolu en mettant à niveau la version Ansible vers 1.6.1
la source
Selon les documents Ansible :
Cela ressemble à un réglage
log_path
sur votre nœud de contrôle, car il n'aura pas de journaux sur les nœuds de destination.la source
vtype='password'
. Cela devrait être assez explicite à mon humble avis? Je suppose que le message de journal est également créé par le module debconf.Il y a un meilleur moyen que juste no_log: True
Comme vous pouvez le voir, vous devez ajouter:
Et puis faites la sortie du résultat de la commande avec regex_replace, où:
Avec cette approche, vous masquerez non seulement les mots de passe et les connexions, mais obtiendrez également le résultat de votre opération
la source
Ceci est un complément à la réponse de TheDESTROS de ce fil:
wrapper-script.sh.j2
Vous avez besoin d'un peu moins de code et vous pouvez ignorer les commandes de vos journaux. Il n'y a qu'une seule caveeat, si un secret est dans les commandes stdout. Si vous voulez éviter le modèle externe, le
copy
module avec le paramètrecontent
peut aider à écrire un petit script wrapper à la volée.la source
L'
no_log: true
approche doit être utilisée en dernier recours si d'autres tentatives échouent car cela rendra l'exécution de la tâche totalement opaque et vous n'aurez aucune idée de l'échec.Les pratiques de sécurité recommandent de donner des informations d'identification à partir de stdin ou lorsque cela n'est pas possible en utilisant des fichiers d'informations d'identification (ou même des exécutables).
Voici un exemple sur la façon d'effectuer une connexion podman sécurisée en évitant d'exposer le mot de passe:
Avec cela, le secret ne sera pas dévoilé,
result
mais vous pourrez toujours voir la sortie de la commande.La plupart des outils nécessitant une connexion mettent en œuvre l'une des approches les plus sécurisées mentionnées. L'utilisation des informations d'identification sur CLI dans le code est comme avoir
123456
comme mot de passe bancaire.la source