Automatisation : Gitea, drone.io et ansible

Généralité

Le but est de réaliser un dépot sur gitea qui sera controlé par drone et qui executera des actions avec Ansible sur une machine distante.

De cette façon on entame la création d’un système automatisé dans la mouvance DevOps.

Cette pratique est utile dans différent cas :

  • la mise en oeuvre d’une nouvelle machine/vm
  • l’evolution d’une infrastructure
  • et surment d’autre cas que je ne vois pas.

Remarques sur la sécurité

L’utilisateur d’Ansible en fonction de ses besoins va pouvoir être amener à utiliser un compte privilégier sur la machine cible.

A ma connaissance pour effectuer des actions tels qu’une installation, il faut avoir les pouvoirs du superutilisateur donc soit être root, soit voir sudo et dans le cas sudo, un sudo débridé, c’est à dire sans avoir besoin de taper le mot de passe du compte en question.

Ce qui fait donc que celui qui utilise Ansible sera root sur la machine qu’il controle. Ici l’utilisateur d’Ansible est Drone.io lui même piloté par Gitea. Donc il vaut mieux blinder sont accès à gitea. =)

Une clef privé doit être stocké au niveau de drone et la clef publique correspondante doit être installé sur le compte privilégié de la machine cible.

Si quelqu’un parvient a déchiffré le secret qui contient cette clef privé, il gagne un accès root chez vous.

Pensez bien votre infra surtout si elle doit être distribué sur le net.

Mise en place du dépot Git

Ìl faut initialiser un fichier .drone.yml dans lequel on va spécifier l’utilisation du plugin ansible.

kind: pipeline
name: default

steps:
- name: check ansible syntax
  image: plugins/ansible:1
  settings:
    playbook: ./playbook.yml
    inventory: ./inventory.yml
    syntax_check: true

- name: Play
  image: plugins/ansible:1
  settings:
    playbook: ./playbook.yml
    inventory: ./inventory.yml
#   verbose: 4
    private_key:
      from_secret: ansible_private_key

il faut créer le fichier playbook.yml et inventory.yml à la racine de dépot.

Déploiement des clefs SSH

il faut générer une paire de clef.

ssh-keygen -f ansible

ce qui génèrera 2 fichiers:

  • ansible, qui est la clef privé
  • ansible.pub, qui est la clef publique

Déploiement sur drone de la clef privé

Lors de mes tests, j’ai été confronté à une difficulté. L’IHM de drone ne gère pas très bien les secrets multi-ligne ce qui est le cas de la clef privé.

J’ai trouvé sur forum la solution. Il faut utiliser les outils d’administration de drone en ligne de commande afin de réaliser l’injection du secret.

drone secret add --repository nithir/ansible_diane --name ansible_private_key --data @/root/ssh/ansible

/root/ssh/ansible est le chemin vers le fichier qui contient la clef privé.

Pas très ergonomique mais ça fonctionne. Peut être compliqué si ont n’a pas la main sur la machine hôte de drone.

Déploiement de la clef publique

La clef doit être copier dans le fichier ~/.ssh/authorized_keys du user privilégier.

cat ansible.pub >> ~/.ssh/authorized_keys