Utiliser sudo via Ansible

Utiliser sudo via Ansible

Become & ansible_user~

Rapide article où je vais vous expliquer comment passer sudo avec un utilisateur sous Ansible.

Le postulat de base

  • Un serveur où se trouve Ansible d’installé, avec des users qui s’y connectent via un service account nommé ansible-deploy pour déployer leurs playbooks ;
  • La clef SSH publique du compte ansible-deploy est copiée sur les différentes VMs qui vont être managées ;

Vous vous en doutez, ce user aura sûrement besoin de réaliser certaines actions avec des droits root. On va donc voir comment utiliser sudo avec ce user 😉

Modifier son inventaire

Si vous désirez utiliser un utilisateur spécifique comme décrit plus haut, il vous suffit d’éditer votre inventaire et de renseigner le paramètre ansible_user :

Prod:
  hosts:
    JBZ-OLK-SQL-08:
      ansible_user: ansible-deploy
    

De cette manière, si à l’avenir vous déployez des playbooks à destination de ce serveur, l’utilisateur pris en compte sera ansible-deploy. Si vous lancez vos scripts depuis votre machine perso, peu d’intérêt cela dit.

Adapter son playbook

Rien d’incroyable ici, il suffira de rajouter la directive become: true aux tâches demandant une élévation de privilèges :

    - name: Restart the service
      service:
        name: zabbix-agent
        state: restarted
      become: true

Ici, pour redémarrer l’agent Zabbix dans l’exemple, on rajoute notre directive et le tour est joué !

Modification du visudo

Le but du jeu ici est de permettre à notre utilisateur désigné de pouvoir réaliser ses actions sans devoir encoder son mot de passe, automatisation oblige.

Alors si vous avez fait quelques recherches sur “L’Internet” vous tomberez très vite sur des personnes vous proposant de ne pas se prendre la tête et de faire un simple :

ansible-deploy    ALL=(ALL:ALL) ALL

Alors ce n’est pas “faux” en soit, si vous testez par vous-même vous verrez qu’ansible-deploy peut tout à fait réaliser pléthore d’actions avec privilèges sans devoir entrer son mot de passe… mais niveau sécurité on a vu mieux 🫣

Préférez plutôt ceci, dans la mesure du possible :

ansible-deploy ALL= NOPASSWD: /usr/bin/apt update, /usr/sbin/service zabbix-agent restart

Ici, notre user va pouvoir réaliser avec les droits sudo et sans mot de passe un apt update ainsi que redémarrer le service zabbix-agent. Cela va nous permettre d’être plus granulaire au niveau des droits, ‘tout de même mieux 🙂

Le fameux test

Si vous réalisez un rapide ansible-playbook -i hosts.yml my_playbook.yml vous obtiendrez une jolie erreur de type :

 FAILED! => {"msg": "Missing sudo password"}

Et oui ! Il faut tout de même lui renseigner son mot de passe à un moment donné… rajoutez donc l’option -K et au moment de run votre playbook, encodez-le et c’est tipar comme disent les jeunes !

Alors bien-entendu il existe d’autres manières de réaliser des actions privilégiées via Ansible, d’autant plus dépendant de votre distribution…

Si vous avez des cas plus spécifiques, et comme souvent d’ailleurs, n’hésitez pas à vous plonger dans la documentation, cette dernière étant plus que bien faite, vous devriez y trouver votre bonheur !

Sur ce, ‘bonne soirée/bonne journée à vous, et à la prochaine ! Ciao !

Laisser un commentaire