Académique Documents
Professionnel Documents
Culture Documents
COMPTABLES ET COMMERCIALES
Date de Soutenance:
Septembre 2023
Promotion: 2020-2023
allows system administrators to save time while ensuring total cohesion in their IT
environment.
INTRODUCTION GENERALE :
L’évolution fulgurante des réseaux informatiques a fait accroitre la charge de travail
des administrateurs réseaux, occasionnant ainsi un accroissement des ressources
humaines consacrées à leur gestion. Les capacités de gestion de réseau ont été
poussées à leurs limites et sont donc devenues plus complexes et source d’erreurs.
De plus, elle offre une cohérence sans faille dans les configurations. Les erreurs
humaines sont inévitables lorsqu'il s'agit de configurer manuellement chaque nœud
réseau. L'utilisation d'une approche automatisée garantit que toutes les configurations
sont appliquées uniformément sur tous les appareils concernés.
Par ailleurs, la gestion et la configuration efficaces des réseaux sont essentielles pour
assurer le bon fonctionnement d'une infrastructure informatique. Cependant, cette
tâche peut s'avérer complexe et fastidieuse, nécessitant souvent une intervention
manuelle de la part des administrateurs réseau. Dans ce contexte, l'utilisation d'outils
d'automatisation devient cruciale pour simplifier ces processus.
Dans ce document nous utiliserons Ansible qui est une plate-forme logicielle libre
pour effectuer les tâches d’administration à distance à travers le protocole sécurisé
SSH. Ce document est structuré de deux parties donc 4 quatre chapitres
SECTION1 :
Introduction :
1- Contexte et Justification :
Automatiser les configurations des nœuds réseau est une décision stratégique
incontournable pour rester compétitif dans un monde en perpétuelle évolution.
L'automatisation constitue le premier pas vers une gestion plus agile et efficiente de
nos infrastructures.
Ce thème se propose donc d'étudier le contexte dans lequel l'utilisation Ansible peut
être bénéfique pour automatiser les configurations des nœuds réseau. Nous
chercherons également à justifier pourquoi il est important de développer cette
approche afin de répondre aux besoins croissants en matière de flexibilité, sécurité et
évolutivité dans les infrastructures informatiques actuelles.
Dans cet esprit, cette recherche vise non seulement à fournir une analyse
approfondie du potentiel offert par l'utilisation d'Ansible pour automatiser les
configurations des nœuds réseau mais aussi à proposer des recommandations
pratiques pour sa mise en œuvre efficace dans les environnements réels.
a Objectif :
L'objectif principal de cette étude est d'examiner comment Ansible peut simplifier et
accélérer le processus fastidieux de configuration manuelle des nœuds réseau. En
utilisant Ansible, il devient possible d'éliminer les erreurs humaines potentielles tout
en améliorant l'efficacité opérationnelle globale.
Le thème explore également différentes techniques et bonnes pratiques pour mettre
en œuvre efficacement l'automatisation des configurations à grande échelle.
b Problématique :
Le problème qui se pose est de trouver une solution pour effectuer les tâches
d’administration de façon efficace, gagner du temps en gérant plusieurs nœuds en
même temps c’est-à-dire de manière optimale.
Le concept Ansible est un outil de pilotage de système, sans agent, faisant partie de
la famille des outils Devops. Il permet de simplifier des opérations d’orchestrations
complexes, de faire du management de configuration centralisé sur un grand nombre
de machines. Il permet également le pilotage de plateformes cloud telles qu’Amazon
Web Services ou OpenStack. Il est un moteur d’automatisation informatique
radicalement simple qui automatise la gestion de configuration, le déploiement
d’application, intra-orchestration de services. Il utilise YAML qui est un langage très
simple permettant de décrire les travaux d’automatisation d’une manière simple.
a Pourquoi Ansible :
Section 1
I- Description et Structure des concepts clés
Pour comprendre le fonctionnement d'Ansible, il est essentiel de connaître les
concepts clés qui sous-tendent cette technologie.
Il s'agit d'un fichier où sont répertoriés tous les nœuds gérés par Ansible. Ces nœuds
peuvent être des serveurs physiques ou virtuels sur lesquels nous souhaitons effectuer
des opérations via Ansible. L'inventaire permet donc de regrouper ces machines et de
spécifier différentes informations telles que leurs adresses IP, leurs utilisateurs SSH
ou encore leur groupe d'appartenance.
user="root"
ansible-mansible.builtin.copy-e"user=${user}"-a"dest=~/lab/inventory
content='[nodes]\nnode0\nnode1\nnode2\n\n[all:vars]\nansible_connection=ssh\
nansible_user={{ user }}\nansible_ssh_pass=testtest\n'"localhost
cat ~/lab/inventory
[nodes]
node0
node1
node2
[all:vars]
ansible_connection=ssh
ansible_user=root
ansible_ssh_pass=testtest
Image 1 : Ficher d’inventaire
Cet inventaire désigne trois hôtes :
• node0
• node1
• node2
Il désigne explicitement aussi deux groupes :
• nodes qui comprend les hôtes node0, node1 et node2.
• all avec des variables qui portent sur tous les hôtes de l’inventaire.
On sera attentif aux variables d’inventaire du groupe all :
• Le type de connexion en SSH : ansible_connection=ssh
• Le nom d’utilisateur pour se connecter ansible_user=root
• Le mot de passe de l’utilisateur de connexion : ansible_ssh_pass=testtest
b) Les variables
Les variables dans Ansible sont exactement les mêmes que dans les autres systèmes.
Considérez une variable comme un 'nom' attaché à un 'objet' spécifique. Vous pouvez
définir ces variables dans vos playbooks, ainsi que dans votre inventaire. Pour créer
une variable, il vous suffit de lui attribuer une valeur, par exemple,
router_ip=10.10.5.20. Vous pouvez ensuite vous référer à l'adresse IP n'importe où
dans Ansible en utilisant la clé router_ip plutôt que l'adresse IP.
Dans cet exemple, nous allons vous montrer comment définir des variables
directement dans le fichier d'inventaire. L'exemple suivant montre comment définir
des variables à l'aide de group_vars. Les variables configurées dans [routers:vars] ne
s'appliquent à aucun autre groupe.
Image 2 : liste des variables
Les variables suivantes sont requises pour créer une connexion SSH réussie aux
périphériques réseau.
c) Ansible Vault :
Ansible Vault crypte les variables ou les fichiers afin que les données sensibles telles
que les mots de passe ou les clés ne soient pas visibles.
Pour se faire :
Créez un fichier crypté dans le coffre-fort dans le répertoire qui vivra à côté du
fichier routers.yml non crypté. Dans ce fichier, définissez les variables sensibles qui
se trouvaient auparavant dans le group_vars/routers.ymlfichier. Utilisez les mêmes
noms de variable, mais ajoutez la chaîne au début vault pour indiquer que ces
variables sont définies dans le fichier protégé par le coffre-fort.
pi@raspberrypi:/etc/ansible/inventory/group_vars/routers $ ls
routers.yml vault
pi@raspberrypi:/etc/ansible $ cat
inventory/group_vars/routers/vault
$ANSIBLE_VAULT;1.1;AES256
31333431656561643635663832663737636338356235313338653765393434
636264666339613432
3363626532663731656336653261623933616464646661330a616430373138
356234633963306232
34653535663361353937396266643734386632393639626363316135333238
303038336431663763
3934343233656339390a663838383165623161333964316636383030343035
313330643463316432
En général, la commande s’écrit ansible suivie d’un hôte ou d’un groupe d’inventaire
suivie -m nom_de_module suivie l’option d’argument -a "clé=valeur clé=valeur
clé=valeur", par exemple de manière formelle :
En toute logique, si le lab est bien monté, un résultat positif “pong” doit vous
parvenir :
Exemple
Tous les playbooks doivent contenir des tâches ou une liste de tâches à exécuter. Les
tâches sont une liste d'actions à effectuer. Un champ de tâches contient le nom de la
tâche. Cela fonctionne comme le texte d'aide pour l'utilisateur. Ce n'est pas
obligatoire mais s'avère utile pour déboguer le playbook. Chaque tâche est liée en
interne à un morceau de code appelé module. Un module qui doit être exécuté et les
arguments requis pour le module que vous souhaitez exécuter.
b- Boucle
key: "{{ item }}"C'est là que nous disons à Ansible ce qu'il faut changer dans chaque
boucle. Il {{ item }}s'agit d'un espace réservé qu'Ansible remplace par chaque
élément de la liste de boucles.
Loop est le mot-clé qui démarre la boucle, suivi de la liste des éléments à boucler.
La ligne pkg: "{{ item }}"indique à Ansible ce qu'il faut installer dans chaque
itération de boucle. Ansible remplace {{ item }}par chaque nom de package de la
liste.
Le loop mot-clé démarre la boucle, suivi d'une liste de packages que nous voulons
installer.
Lorsque vous exécutez ce playbook, Ansible installe les packages 'nginx', 'mysql' et
'php' un par un. Si vous avez besoin d'installer plus de packages, ajoutez-les
simplement à la liste. C'est pourquoi les boucles sont si puissantes dans Ansible :
elles nous permettent de gérer plusieurs éléments avec une seule tâche, quel que soit
le nombre d'éléments dont nous disposons.
PARTIE II : DESCRIPTION- AVANTAGE- METHODE DE COMMUNICATION SSH
ET DEPLOIEMENT
SECTION1 : Introduction
La gestion de configuration est un processus dont l’objectif est de définir un état dans
lequel doit se trouver les ressources d’une infrastructure : les serveurs, switchs,
routeurs…
d. FortiGate
Les pare-feux nouvelle génération FortiGate offrent une protection contre les
menaces et un décryptage à grande échelle avec une architecture ASIC personnalisée.
Ils offrent également une mise en réseau sécurisée avec des fonctionnalités intégrées
telles que le SD-WAN, la commutation, le sans-fil et la 5G.
Tout d'abord, Ansible utilise SSH (Secure Shell) pour établir une connexion
sécurisée avec les nœuds gérés. Cette méthode de communication permet un transfert
sécurisé des données entre le contrôleur et les hôtes distants.
En effet, en utilisant SSH, Ansible garantit que seules les personnes autorisées
peuvent accéder aux systèmes distants.
De plus, lorsqu'un playbook est exécuté par le contrôleur Ansbile sur un ou plusieurs
nœuds gérés simultanément, celui-ci utilise également JSON (JavaScript Object
Notation) pour transmettre efficacement toutes les informations nécessaires au
traitement des tâches demandées aux hôtes distants. JSON a été choisi car il offre une
structure légère mais puissante permettant de représenter différentes formes de
données. Enfin, il convient également de mentionner qu’Ansible utilise un modèle
client-serveur pour sa communication avec les nœuds gérés. Le contrôleur Ansible
agit en tant que serveur et les hôtes distants sont considérés comme des clients. Cette
architecture permet une gestion centralisée et facilement évolutive des
infrastructures. En conclusion, la communication entre le contrôleur Ansible et les
nœuds gérés repose sur différents protocoles tels que SSH, YAML et JSON. Ces
choix ont été faits dans le but d'assurer une connexion sécurisée ainsi qu'une
représentation claire et efficace des instructions nécessaires à la configuration des
systèmes distants.
a- Protocole SSH :
Ansible utilise le protocole SSH pour communiquer de façon sécurisée avec les
machines à configurer. Ainsi pour utiliser ansible, il faut installer openssh et générer
une clé sur la machine contrôleur qui sera ensuite copiée sur les nœuds distants sur
lesquels est installé le serveur openssh. Ces étapes peuvent être réalisées de la façon
suivante :
192.168.0.3 Switch
192.168.0.4 R3
192.168.0.5 R2
192.168.0.6 SW5
192.168.0.7 SW6
192.168.0.8 Fortinet
Tout d'abord, Ansible permet de gagner du temps précieux en évitant les tâches manuelles
fastidieuses. Grâce à son approche déclarative basée sur YAML, il devient possible de
spécifier l'état désiré du réseau plutôt que les étapes nécessaires pour y parvenir. Cela facilite
grandement le déploiement rapide et cohérent des configurations réseau.
Fiabilité :
Bien qu'Ansible soit généralement fiable, toute automatisation comporte un risque
potentiel si elle n'est pas correctement testée ou mise en œuvre avec rigueur. Il est
donc essentiel de valider soigneusement chaque modification apportée au système
avant son déploiement.
Sécurité :
Comme tout outil utilisant des informations sensibles (comme les mots de passe ou
les clés SSH), il est crucial de mettre en place des mesures de sécurité appropriées
pour protéger ces données. Cela inclut le chiffrement des communications et la
gestion adéquate des accès.
Complexité :
L'automatisation peut rendre certaines tâches plus complexes, notamment lorsqu'il
s'agit d'intégrer Ansible avec d'autres outils ou systèmes existants. Une bonne
compréhension du réseau ainsi que des compétences techniques avancées sont
nécessaires pour éviter tout problème potentiel.
Cependant, il est essentiel de prendre en compte les enjeux liés à sa mise en œuvre
afin de garantir un déploiement efficace et fiable.
"L'automatisation est le nouvel impératif de notre époque, car elle permet d'accroître
l'efficacité et la fiabilité des systèmes informatiques. Dans le domaine des réseaux,
Ansible se démarque comme un outil incontournable pour automatiser les tâches
courantes et simplifier la gestion quotidienne.
L'un des enjeux clés dans l'automatisation des réseaux est la rapidité avec laquelle les
modifications peuvent être appliquées. Ansible excelle dans ce domaine grâce à son
architecture sans agent : il utilise SSH pour exécuter ses tâches directement sur les
équipements cibles, évitant ainsi toute installation préalable d'un logiciel
supplémentaire sur ces derniers.
De plus, Ansible offre une grande flexibilité en termes de prise en charge multi-
vendor. Il peut être utilisé avec différentes marques et modèles d'équipements réseau
sans nécessiter une expertise approfondie dans chaque environnement spécifique.
Cela facilite grandement le déploiement rapide et cohérent de configurations réseau
complexes.
Le projet EVE-NG est la nouvelle génération du projet UNetlab, qui supporte des
images virtuelles de constructeurs comme Cisco et Nokia, mais aussi des routeurs «
Open Source ».
EVE-ng peut être utilisé pour étudier toutes sortes de technologies. Il donne des
outils à utiliser autour des appareils virtuels et à les interconnecter avec d'autres
appareils physiques ou virtuels. Beaucoup de ses fonctionnalités le rendent simple :
la convivialité, la réutilisabilité, la gérabilité, l'inter connectivité, la distribution et la
capacité à comprendre et à partager des topologies, des travaux, des idées, des
concepts ou des laboratoires virtuels. Cela aide à réduire les coûts et le temps
consacrés à la configuration de ce qui est nécessaire, et les tâches difficiles seraient
simplifiées pour être exécutées. Avec EVE-ng, nous pouvons en apprendre
davantage sur les technologies générales ou spécifiques à un fournisseur et tester de
nouvelles technologies telles que l'automatisation du réseau, le SDN, etc. Les réseaux
d'entreprise peuvent être recréés pour tester les modifications avant de les appliquer
dans un environnement de production.
b- Architecture du LAb
Voici un aperçu sur la topologie du projet :
Image 13 : Topologie du projet
c- Processus d'installation de Ansible
Il peut y avoir plusieurs machines distantes gérées par une seule machine de
contrôle. Ainsi, pour gérer les machines distantes, nous devons installer Ansible sur
la machine de contrôle.
Ansible peut être installé sur une machine de contrôle qui a les exigences
mentionnées ci-dessus de différentes manières. Vous pouvez installer la dernière
version via Apt, yum, pkg, pip, OpenCSW, pacman, etc.
Pour installer Ansible, vous devez configurer PPA sur votre machine. Pour cela, vous
devez exécuter la ligne de code suivante -
Section2
Préparation : Il nous faut le nom, le nom du domaine DNS, l'adresse IP, le masque de
sous réseau, la passerelle par défaut, un nom de login pour l’administrateur le mot de
passe administrateur la connexion à distance (ssh).
Image 14 : Configuration du Switch
Image 15 : Configuration du routeur
b- Création du fichier inventaire :
Ansible contient un fichier d’inventaire, communément appelé inventory et dans
lequel on renseigne les hôtes sur lesquels on effectue nos actions.
Cependant, bien qu’Ansible dispose de localhost par défaut, il faut avoir renseigné au
moins un nœud. En effet, si on laisse l’inventory vide, on aura le message d’erreur
suivant. Néanmoins, il y a un moyen de contourner cela en ajoutant explicitement
dans l’inventory qu’on veut utiliser la machine locale comme hôte :
localhost ansible_connection=local
[nginx]
myserver.com
192.168.0.11
yourserver.com
Comme vous pouvez le voir, on spécifie un nom de groupe entre crochets : [nginx].
Une fois que nous avons défini notre groupe, il faut dire à notre playbook sur quel
groupe il doit jouer. Pour cela, on peut le spécifier à l’intérieur de notre playbook
avec la variable hosts.
hosts: webservers
become: true
become_user: root
Cela signifie que nous allons joué notre playbook sur les machines du groupe
webservers. En effet, dans notre inventory, nous avions spécifié ce groupe comme
suit :
[webservers]
192.168.0.18
Par conséquent, lorsqu’on dit à notre playbook de jouer sur le groupe webservers, il
joue sur les machines de ce groupe. Dans ce cas précis, il va alors jouer sur la
machine 192.168.0.18.
Image 16 : déclaration des hôtes dans le fichier inventaire
c- Exécution du playbook :
Dans cette section, nous allons créer un playbook Ansible de base pour nous
permettre d’excécuter facilement des tâches plus complexes.
nano playbook.yml
---
- hosts : playbook
Tasks :
- name : run echo command
Command : /bin/echo BONJOUR
Lorsque vous exécutez un playbook, Ansible renvoie des informations sur les
connexions, les names lignes de toutes vos parties et tâches, si chaque tâche a réussi
ou échoué sur chaque machine, et si chaque tâche a apporté une modification sur
chaque machine. Au bas de l'exécution du playbook, Ansible fournit un résumé des
nœuds ciblés et de leurs performances. Les échecs généraux et les tentatives de
communication fatales "injoignables" sont séparés dans les décomptes.
CONCLUSION GENERALE
A travers ce mémoire, nous avons vu tous les aspects majeurs d’Ansible, rendant
ainsi son utilisation très simple intéressant et très puissante.
C’est un outil puissant permettant la gestion de plusieurs machines à distance.
Nous avions eu l’occasion d’augmenter la performance de notre playbook en étudiant
du mieux le protocole ssh mais également les possibilités offertes par le fichier de
configuration Ansible.
Ansible reste un outil qui s’intègre très facilement avec plusieurs autres technologies.
En somme, notre thème de fin d’étude nous a permis de connaître non seulement les
bases de linux mais aussi de pousser la configuration sur les nœuds réseau de façon
automatique.
Fort de cette expérience, nous aimerions essayer par la suite d’approfondir nos
recherches sur l’automatisation des configurations et de pouvoir apporter des
innovations.
BIBLIOGRAPHIE
www.datascienttest.com <ansible
linux.goffinet.org
packetswitch.co.uk./ansible
www.cisco.com
Alphorm.com/formation ansible
https://docs.ansible.com
www.eve-ng.net
www.tchmemore.com