brain www.christophe-casalegno.com
Boap : Brain OVH Api Player – Christophe Casalegno
UTC

Boap : Brain OVH Api Player

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

Brain OVH Api Player

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)