pressmaster - Fotolia
Comment administrer l’infrastructure réseau via des APIs
Les administrateurs peuvent utiliser les outils cURL et Postman pour interagir avec les équipements réseau via leurs APIs. Les APIs sont plus adaptées que la ligne de commande pour l’automatisation.
Les APIs ont le potentiel de simplifier le travail des administrateurs réseau. Elles permettent d’exécuter le même type de fonctions que les commandes saisies dans un CLI, mais aussi davantage de fonctions et dans un contexte bien plus large que le simple réseau local.
Les commandes CLI n’ont pas été conçues pour prendre en charge des équipements réseau à l’échelle du cloud, ou à celles des appareils intelligents (ou « smart devices » : tout appareil plus ou moins autonome et programmable) potentiellement situés sur un site distant. Dans ces cas d’usage, les configurations à base de commandes CLI découlent souvent sur des tâches fastidieuses et des erreurs humaines.
Les APIs sont aussi le passage essentiel des réseaux programmables, qui permettent d’automatiser des actions de configuration et la télémétrie. Par exemple, il suffit d’une seule requête API pour déployer une mise à jour logicielle sur un millier d’appareils réseau, alors qu’il faudrait procéder appareil par appareil avec une API.
Il en va de même pour reconfigurer des ports ou des règles de répartition de charge, que ce soit sur des équipements physiques, ou des réseaux logiques à cheval entre plusieurs installations physiques. Concernant la télémétrie de plusieurs appareils en réseau, l’API permet de filtrer les résultats en amont pour n’observer que les informations pertinentes.
Le principe
Dans le domaine des réseaux, on utilise classiquement le protocole SSH (Secure Shell) pour accéder de manière sécurisée aux équipements distants. Dans le cadre de l’utilisation d’APIs pour administrer les équipements réseau, on utilise les protocoles HTTP ou HTTPS pour envoyer des requêtes aux APIs.
Les protocoles HTTP et HTTPS s’utilisent d’ordinaire avec un navigateur web. Pour communiquer avec des APIs ans le cadre d’une administration réseau, on utilise plutôt la ligne de commande cURL ou l’interface graphique Postman.
Dans le principe, il s’agit d’interagir avec une API en envoyant, sur l’URL étendue d’un équipement, des commandes qui vont servir à créer, lire, écrire ou effacer des paramètres, lesquels sont le plus souvent au format JSON.
Le format JSON est utilisé comme norme pour l’échange de données ; de nombreux langages de programmation et outils le prennent en charge. JSON est à la fois lisible par un humain et analysable par la machine. Les administrateurs se servent des informations au format JSON pour les intégrer à une API ou les utiliser dans l’automatisation du réseau.
Dans le cadre des équipements réseau, on trouve classiquement trois APIs standard, utilisées par la plupart des fabricants : RestConf et NetConf qui servent à paramétrer et monitorer les appareils, ainsi qu’OpenFlow qui sert à redéfinir la topologie (routage, répartition de charge, identification des équipements connectés, etc.). Par exemple, l’URL étendue d’une API RestConf sur un équipement dont l’adresse IP est 172.31.0.1 est typiquement https://172.31.0.1/restconf/.
Concernant les interactions possibles, les protocoles HTTP et HTTPS offrent des commandes (aussi appelées « verbes », ou « méthodes ») qui correspondent chacune à un type d’action. Sachant que ces actions serviront ici à créer, lire, écrire ou effacer des informations dans le cadre d’une conversation avec des APIs, on peut se souvenir de leur signification en faisant un parallèle avec le jeu de commandes CRUD que l’on utilise pour créer, lire, écrire ou effacer des informations quand on interagit avec des bases de données via une API.
HTTP VERB | CRUD ACTION |
POST |
CREATE |
GET |
READ |
PUT |
UPDATE |
PATCH |
UPDATE |
DELETE |
DELETE |
L’outil en ligne de commande cURL est utilisé pour envoyer des données vers et depuis un serveur. Cet outil est largement utilisé en raison de la richesse de ses fonctionnalités, telles que la prise en charge de plusieurs protocoles, en particulier HTTP et HTTPS.
Postman est une plateforme de test d’API basée sur une interface graphique qui compte plus de 20 millions d’utilisateurs dans le monde. Elle aide les développeurs à concevoir, construire, tester et améliorer leurs API en multipliant les itérations. L’utilisation de l’outil simplifie les flux de travail des APIs dans les environnements de test et de production.
À ce stade, l’administrateur a les moyens d’interagir avec les APIs des équipements réseau. Les interactions concernent l’obtention de données ou leur manipulation. Dans le domaine des réseaux, les données sont principalement des configurations d’équipements.
Exemples d’interactions avec cURL
Dans ce premier exemple, nous nous connectons à un routeur dont l’adresse IP est 172.31.0.1. Nous y parvenons via HTTPS à l’aide de la commande suivante :
curl -k https://172.31.0.1/restconf/ -u "cisco:cisco"
Ici, « -k » sert à communiquer en ignorant la certification SSL et « -u » sert à mentionner le nom d’utilisateur (« cisco »), puis le mot de passe (« cisco » également).
Cette commande produira l’affichage suivant, où l’on constate que les paramètres de ce routeur sont définissables avec le langage YANG.
L’étape suivante consiste à collecter des informations sur l’interface réseau de ce routeur à laquelle nous sommes connectés. Ces informations comprennent son adresse IP primaire, sa description et ses paramètres de transfert. Ces informations sont utiles aux administrateurs lorsqu’ils analysent et dépannent les réseaux.
Pour inspecter une interface sur un appareil Cisco, les administrateurs utilisent d’ordinaire la commande Cisco IOS suivante :
'show interface <interface name>'
En HTTP/HTTPS, il nous suffit de préciser dans l’URL le jeu de données que l’on veut lire. Ce jeu de données est en l’occurrence celui de l’interface GigabitEthernet numérotée 1 qui fait partie des interfaces natives consultables depuis la base de données cisco-IOS-XE-Native du routeur.
Sans rien d’autre, les informations concernant l’interface seraient affichées en XML, c’est-à-dire comme une suite de valeurs correspondant aux paramètres affichés de part et d’autre avec « <parametre> » et « </parametre> ».
Une bonne pratique est d’abolir le format XML des habitudes et d’utiliser à la place le JSON, qui apporte bien plus de sécurité, comme l’indique le palmarès des failles les plus répandues sur le web selon l’OWASP.
Afin de récupérer ce résultat au format JSON, nous ajoutons à notre requête un en-tête que nous précisons à l’aide de « -H ». Cet en-tête sera interprété par l’API RestConf comme une commande. En l’occurrence la commande « Accept : » qui dit au langage YANG de produire un contenu au format JSON.
curl -H "Accept: application/yang-data+json" -k
https://172.31.0.1/restconf/data/cisco-IOS-XE-
native:native/interface/gigabitethernet=1 -u "cisco":"cisco"
Cette requête produira l’affichage de données selon un formatage JSON :
Dans les deux exemples précédents, nous n’avons pas utilisé dans la ligne de commande de méthode HTTP/HTTPS, la méthode GET étant implicite. Voici à présent un exemple dans lequel nous allons éteindre l’interface. Il s’agit en l’occurrence de changer le seul paramètre « shutdown » dans le jeu de données de l’interface.
En HTTP/HTTPS, il s’agit donc d’envoyer une requête PATCH. Pour préciser à cURL que PATCH est ici une méthode HTTP/HTTPS, on le fait précéder par « -X ». Pour préciser la nouvelle valeur « True » à mettre sur le paramètre « shutdown » de l’interface « 1 » parmi le jeu de données Cisco-IOS-XE-native: GigabitEthernet », on fait précéder l’ensemble du chemin par « -d » :
$ curl -X PATCH -H "Content-Type: application/yang-data+json" -H
"Accept: application/yang/data+json" -d ’{Cisco-IOS-XE-native:
GigabitEthernet": [{"name": "1", "shutdown": true}]}' -k
https://172.31.0.1/restconf/data/Cisco-IOS-XE-
native:native/interface/GigabitEthernet=1 -u "cisco":"cisco"
Exemples d’interaction avec Postman
Postman est souvent plus facile à utiliser que cURL. Pour obtenir des informations sur l’interface native de notre routeur, il nous suffit de choisir la méthode GET et préciser l’URL comme précédemment :
GET - https://172.31.0.1/restconf/data/Cisco-IOS-XE-native:native/interface
Naviguez dans les onglets « Authorization » et « Headers » de Postman pour remplir les paramètres d’accès. Allez dans « Body » pour lire le résultat au format JSON.
Pour enregistrer de nouveaux paramètres sur une interface, il suffit de les changer dans « Body » puis d’utiliser la méthode POST avec la même URL
La méthode POST réécrit tout le jeu de données d’une interface. Si on préfère utiliser la méthode PATCH pour ne changer qu’un seul paramètre sans toucher aux autres, il faudra donc préciser le chemin vers ce paramètre dans l’URL.
Une caractéristique unique de Postman est la possibilité d’exécuter un code Python, lequel peut être plus simple à écrire quand il s’agit d’automatiser des interactions avec une API.