Programmation Cisco Meraki

Cisco Meraki est une solution réseau complète gérée depuis le cloud avec une interface graphique. En terme d’automatisation, la solution Meraki propose les domaines suivants :

  • Captive portal API
  • Scanning API
  • Dashboard API
  • Webhooks

Le « Dashboard API » Meraki est une interface permettant aux programmes extérieurs d’interagir directement avec la plate-forme cloud Meraki et les appareils gérés par Meraki. L’API contient un ensemble d’outils appelés « endpoints » pour créer des logiciels et des applications qui communiquent avec le tableau de bord Meraki. C’est une API RESTful moderne utilisant des requêtes HTTPS vers une URL avec un format de données JSON. Pour tester le Dashboard Meraki, il est possible d’utiliser l’URL https://account.meraki.com/secure/login/dashboard_login avec le compte devnetmeraki@cisco.com et le mode de passe ilovemeraki, puis choisir « DevNet Sandbox ».

Ce qui pourrait nous intéresser, c’est de récupérer une clé API disponible dans Organization/Settings/profile, mais dans notre cas, c’est une clé standard permettant l’accès au Sandbox que nous allons utiliser. Il va sans dire que, comme pour un login/password, une clé API ne doit pas figurer dans les programmes sur une infrastructure en exploitation. Dans les labs, il est fréquent de prendre un raccourci sur le plan de la sécurité, qu’il ne faut pas reproduire sur le terrain. Il existe des solutions pour stocker les informations d’authentification et d’autorisation de manière sécurisée. Le produit Vault de la société HashiCorp en est un très répandu. Il existe des librairies, permettant l’accès à Vault, pour de nombreux langages et outils dont Golang, Python et Ansible qui nous concernent dans le domaine du NetDevOps. De manière plus globale, il est également possible de stocker les secrets dans NetBox qui, en plus, fait office de source de vérité.

La documentation des APIs permet de pouvoir utiliser Postman ou la librairie Python requests. C’est une documentation très complète, mais on se rend rapidement compte que la configuration de Postman et les programmes Python requests sont très verbeux pour interagir avec les API du Dashboard Meraki.

Il existe une solution beaucoup plus rapide et synthétique pour réaliser des scripts Python, c’est le SDK Meraki pour interagir avec les APIs v1 du Dashboard. Attention, l’ancienne version de SDK pour les API v0 du Dashboard a été rendu obsolète à partir de février 2020, et ne recevra plus de mises à jour supplémentaires. De nombreux exemples disponibles sur internet font référence à l’ancienne version de SDK qui est toujours en ligne sur le GitHub Meraki.

Dans l’exemple ci-dessous, on peut voir la compacité du code et les quelques commentaires, que j’ai mis dans le code, suffisent à comprendre le fonctionnement de l’ensemble.

#!/usr/bin/env python
import meraki
from pprint import pprint

api_key = '093b24e85df15a3e66f1fc359f4c48493eaa1b73'

if __name__ == '__main__':
    # instantiate API consumer class
    dashboard = meraki.DashboardAPI(api_key)
    # get the list of organizations accessible by the API key
    my_orgs = dashboard.organizations.getOrganizations()
    for org in my_orgs:
        if org['name'] == 'DevNet Sandbox':
            org_id = org['id']
    # get the list of networks in DevNet Sandbox organization
    my_networks = dashboard.organizations.getOrganizationNetworks(org_id)
    for network in my_networks:
        if network['name'] == 'DevNet Sandbox ALWAYS ON':
            network_id = network['id']
    # get the list of clients in DevNet Sandbox ALWAYS ON network
    my_clients = dashboard.networks.getNetworkClients(network_id)
    pprint(my_clients)
Meraki SDK get clients