BOAP (Brain OVH API Player)
BOAP est un script Bash sous licence GPL conçu pour piloter rapidement l’API OVHcloud depuis la ligne de commande.
Il permet d’interroger les ressources principales d’un compte OVHcloud sans passer par l’interface web : IP, serveurs dédiés, factures, NAS-HA, Load Balancers, vRack, zones DNS, tâches de statut, interventions, etc.
BOAP est né d’un besoin simple : disposer d’un outil CLI léger, direct et facilement modifiable pour exécuter rapidement des appels fréquents vers l’API OVHcloud, sans dépendance lourde, sans framework, et sans abstraction inutile.
Le script utilise l’authentification historique OVHcloud basée sur :
– Application Key
– Application Secret
– Consumer Key
– signature SHA1 conforme au mécanisme AK/AS/CK de l’API OVHcloud
Fonctionnalités principales
Gestion des IP :
– liste des IP et blocs CIDR associés au compte OVHcloud
– affichage des informations d’un bloc IP
– liste des reverses DNS
– liste des entrées phishing
– liste des entrées anti-hack
– liste des entrées anti-spam
– liste et détail des règles firewall OVHcloud associées
– liste et détail des entrées de mitigation anti-DDoS
Serveurs dédiés :
– liste des serveurs dédiés du compte
– informations détaillées d’un serveur
– liste des IP associées au serveur
– informations de service
– affichage des dernières interventions OVHcloud
– reboot serveur via API
Facturation :
– liste des factures
– affichage des informations d’une facture
– filtrage des champs sensibles ou peu utiles dans la sortie
DNS :
– export d’une zone DNS OVHcloud au format texte
– conversion des retours JSON échappés en sortie lisible
NAS-HA :
– liste des NAS-HA
– informations détaillées d’un NAS-HA
– liste des partitions
– informations par partition
– liste des accès
– informations de service
IP Load Balancing :
– liste des Load Balancers
– informations détaillées
– statut
– informations de service
– liste des fermes HTTP
– liste des fermes TCP
– liste des frontends HTTP
vRack :
– liste des vRack
– informations générales
– informations de service
– liste des serveurs dédiés rattachés
– liste des projets Public Cloud rattachés
– liste des Dedicated Cloud rattachés
– liste des IP Load Balancers rattachés
Statut OVHcloud :
– tâches planifiées
– tâches en cours
– tâches terminées
Architecture technique
BOAP reste volontairement minimaliste.
Il repose uniquement sur des briques standards disponibles sur la plupart des systèmes Linux :
– Bash
– curl
– sha1sum
– python pour le formatage JSON
– outils classiques Unix : cut, sed, grep, head, etc.
L’authentification est calculée directement dans le script à partir des éléments suivants :
APP_SECRET + CONSUMER_KEY + METHOD + URL + BODY + TIMESTAMP
Le hash SHA1 est ensuite envoyé dans le header :
X-Ovh-Signature
Les autres headers utilisés sont :
X-Ovh-Application
X-Ovh-Consumer
X-Ovh-Timestamp
Content-Type
La configuration est séparée dans un fichier secret.cfg, qui contient les credentials OVHcloud.
CONSUMER_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
APP_KEY="xxxxxxxxxxxx"
APP_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
OVH_API_BASE="https://eu.api.ovh.com/1.0"
Note : secret.cfg ne doit jamais être publié, versionné ou partagé.
Correctifs récents
OVHcloud ayant fait évoluer certains comportements autour de ses endpoints et de la validation des clés API, BOAP a été mis à jour pour rendre le diagnostic plus robuste.
Les anciennes versions pouvaient masquer la vraie erreur OVHcloud, notamment à cause d’une chaîne de traitement trop agressive :
python -mjson.tool | sed | grep | cut
En cas d’erreur API, la sortie pouvait se retrouver réduite à quelque chose comme :
{
class
errorCode
httpCode
message
}
Ce comportement empêchait de distinguer proprement :
– Application Key invalide
– Consumer Key invalide
– signature invalide
– droits insuffisants
– endpoint API incorrect
Les versions récentes corrigent ce point en affichant désormais le JSON d’erreur réel retourné par OVHcloud.
Exemple :
HTTP 403 GET /dedicated/server
{
"class": "Client::Forbidden",
"message": "This call has not been granted",
"httpCode": "403 Forbidden",
"errorCode": "NOT_GRANTED_CALL"
}
Diagnostic intégré
BOAP inclut désormais des commandes de diagnostic pour isoler rapidement les problèmes d’authentification.
Tester uniquement l’Application Key :
./boap.sh appkey_diag
Cette commande appelle :
POST /auth/credential
avec uniquement :
X-Ovh-Application
Elle ne dépend donc pas de :
– APP_SECRET
– CONSUMER_KEY
– signature
– droits de la Consumer Key
– endpoint applicatif comme /dedicated/server
Elle permet de vérifier si l’Application Key est reconnue par les endpoints OVHcloud, SoYouStart ou Kimsufi.
Tester un appel signé :
./boap.sh diag /me
./boap.sh diag /dedicated/server
La commande teste plusieurs endpoints possibles :
https://eu.api.ovh.com/1.0
https://api.ovh.com/1.0
https://eu.api.ovh.com/v1
https://ca.api.ovh.com/1.0
https://api.us.ovhcloud.com/1.0
https://eu.api.soyoustart.com/1.0
https://ca.api.soyoustart.com/1.0
https://eu.api.kimsufi.com/1.0
https://ca.api.kimsufi.com/1.0
Interprétation :
APP_KEY_VALID
L’Application Key est valide sur cet endpoint.
This call has not been granted
La clé fonctionne, la signature est correcte, mais la Consumer Key n’a pas les droits nécessaires.
This application key is invalid
L’Application Key n’est pas valide pour cet endpoint.
Invalid signature
Le couple APP_SECRET / CONSUMER_KEY / méthode / URL / body / timestamp ne correspond pas à la signature attendue.
Génération d’une Consumer Key
BOAP permet aussi de générer une nouvelle Consumer Key avec les droits nécessaires.
Générer une Consumer Key adaptée à BOAP :
./boap.sh request_ck boap
La commande retourne :
– une URL de validation OVHcloud
– une Consumer Key pending
Il faut ensuite :
1. Ouvrir la validationUrl dans le navigateur.
2. Valider l'autorisation OVHcloud.
3. Copier la nouvelle CONSUMER_KEY dans secret.cfg.
4. Conserver le même APP_KEY et le même APP_SECRET.
Droits demandés par le profil boap :
GET /me
GET /ip
GET /ip/*
GET /me/bill
GET /me/bill/*
GET /dedicated/server
GET /dedicated/server/*
POST /dedicated/server/*/reboot
GET /domain/zone/*
GET /dedicated/nasha
GET /dedicated/nasha/*
GET /ipLoadbalancing
GET /ipLoadbalancing/*
GET /status/task
GET /vrack
GET /vrack/*
Générer une Consumer Key read-only large :
./boap.sh request_ck readonly
Générer une Consumer Key complète :
./boap.sh request_ck full
Note : le mode full doit être réservé aux tests courts. Il n’est pas recommandé de conserver durablement une Consumer Key trop large, surtout si le script permet des actions sensibles comme le reboot d’un serveur.
Utilisation
Lister les IP du compte :
./boap.sh ip_list
Afficher les informations d’une IP ou d’un bloc CIDR :
./boap.sh ip_info 1.2.3.4
./boap.sh ip_info 1.2.3.0/24
Lister les factures :
./boap.sh bill_list
Afficher les informations d’une facture :
./boap.sh bill_infos FR123456789
Lister les serveurs dédiés :
./boap.sh servers_list
Afficher les informations d’un serveur :
./boap.sh server_info ns123456.ip-1-2-3.eu
Rebooter un serveur dédié :
./boap.sh server_reboot ns123456.ip-1-2-3.eu
Note : cette commande doit être utilisée avec prudence. Elle déclenche une action réelle côté OVHcloud.
Exporter une zone DNS :
./boap.sh zone_export example.com
Lister les NAS-HA :
./boap.sh nasha_list
Afficher les informations d’un NAS-HA :
./boap.sh nasha_info zpool-123456
Lister les Load Balancers :
./boap.sh lb_list
Afficher les informations d’un Load Balancer :
./boap.sh lb_info ip-1-2-3.eu
Lister les farms d’un Load Balancer :
./boap.sh lb_farms ip-1-2-3.eu
Lister les frontends d’un Load Balancer :
./boap.sh lb_frontends ip-1-2-3.eu
Lister les tâches OVHcloud planifiées :
./boap.sh status planned
Lister les tâches OVHcloud en cours :
./boap.sh status inprogress
Lister les tâches OVHcloud terminées :
./boap.sh status finished
Lister les vRack :
./boap.sh vrack_list
Afficher les informations d’un vRack :
./boap.sh vrack_info pn-12345
Afficher l’aide :
./boap.sh help
Exemple de configuration
Le fichier secret.cfg doit être placé à côté du script ou explicitement désigné via la variable BOAP_CONFIG.
CONSUMER_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
APP_KEY="xxxxxxxxxxxxxxxx"
APP_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
OVH_API_BASE="https://eu.api.ovh.com/1.0"
Utiliser un autre fichier de configuration :
BOAP_CONFIG="/root/.config/boap/secret-prod.cfg" ./boap.sh servers_list
Forcer temporairement un endpoint :
OVH_API_BASE="https://eu.api.ovh.com/1.0" ./boap.sh servers_list
Notes de conception
BOAP n’a pas vocation à remplacer les SDK OVHcloud, ni le CLI officiel. Son objectif est différent : fournir un outil Bash compact, lisible, modifiable rapidement, et adapté aux usages opérationnels.
Le script privilégie :
– une exécution directe depuis un shell
– un format simple
– une configuration minimale
– des appels API explicites
– des sorties lisibles
– une dépendance minimale aux bibliothèques externes
– une logique facile à auditer
Il est particulièrement utile pour :
– les vérifications rapides
– les scripts d’exploitation
– les audits ponctuels
– les interventions sur serveurs dédiés
– les exports DNS
– les contrôles IP/vRack/LB/NAS-HA
– le dépannage des credentials API OVHcloud
La philosophie reste la même que pour beaucoup de mes outils internes : peu de magie, peu de dépendances, un comportement compréhensible, et une capacité à être modifié rapidement quand le terrain l’exige.
Sécurité
secret.cfg contient des secrets sensibles.
Il faut donc :
– ne jamais le publier
– ne jamais le commiter dans un dépôt public
– limiter ses permissions
– utiliser des Consumer Keys avec des droits adaptés
– révoquer immédiatement toute clé exposée
– éviter les droits globaux sauf pour un test temporaire
Permissions recommandées :
chmod 700 boap.sh
chmod 600 secret.cfg
Si une clé a été copiée dans un terminal partagé, un ticket, un paste, un log ou une conversation, elle doit être considérée comme compromise.
Todo list
– Ajouter un mode OAuth2/service account pour les nouveaux usages OVHcloud.
– Ajouter un format de sortie JSON brut optionnel.
– Ajouter un mode table plus lisible pour certaines commandes.
– Ajouter une option –raw pour désactiver tout post-traitement.
– Ajouter une option –debug plus détaillée sans fuite de secrets.
– Ajouter une gestion plus propre des erreurs réseau et des timeouts.
– Ajouter des sous-commandes pour créer/modifier certaines entrées DNS.
– Ajouter des commandes dédiées pour les règles firewall OVHcloud.
– Ajouter des commandes dédiées pour la mitigation anti-DDoS.
– Ajouter un mode batch pour exécuter plusieurs appels API à partir d’un fichier.
Ressources
Script : boap.sh
—
Christophe Casalegno (retrouvez tous mes réseaux sur : all.bo)
