Skip to main content

Bonjour à tous, 

J’essaye d’utiliser le connecteur “Veeam Backup Enterprise Manager” :  https://docs.centreon.com/pp/integrations/plugin-packs/procedures/applications-veeam-vbem-restapi/

J’utilise la version Centreon 23.10.5 sur une vm debian 11. 

Depuis mon serveur poller via des commandes curl je parviens bien à utiliser l’API : 

  1. je génère une session : 

curl -si -X POST -H "Authorization: Basic XXX" -d "" https://X.X.X.X:9398/api/sessionMngr/?v=latest --insecure => Code 201 OK 

  1. j’utilise le X-RestSvcSessionId généré pour intérroger l’API :

curl -X GET -H "X-RestSvcSessionId: ODM5NTg5MGQtY2I5OS00NjUwLWIwNDAtOTI4ZTdjMjBjMGE1" https://X.X.X.X:9398/api/repositories --insecure => Code 200 OK (me recupère bien les infos)

Le problème c’est quand j’utilise le plugin Centreon (avec le même compte): 

/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=apps::backup::veeam::vbem::restapi::plugin --mode=repositories --hostname='X.X.X.X' --port=9398 --proto=https --api-username=’$APIUSER’ --api-password='$APIPWD’ --insecure --debug : 

UNKNOWN: 403 Forbidden
== Info:   Trying X.X.X.X:9398...
== Info: Connected to XXX (X.X.X.X) port 9398 (#0)
== Info: ALPN, offering h2
== Info: ALPN, offering http/1.1
== Info: successfully set certificate verify locations:
== Info:  CAfile: /etc/ssl/certs/ca-certificates.crt
== Info:  CApath: /etc/ssl/certs
== Info: TLSv1.3 (OUT), TLS handshake, Client hello (1):
== Info: TLSv1.3 (IN), TLS handshake, Server hello (2):
== Info: TLSv1.2 (IN), TLS handshake, Certificate (11):
== Info: TLSv1.2 (IN), TLS handshake, Server key exchange (12):
== Info: TLSv1.2 (IN), TLS handshake, Server finished (14):
== Info: TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
== Info: TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
== Info: TLSv1.2 (OUT), TLS handshake, Finished (20):
== Info: TLSv1.2 (IN), TLS handshake, Finished (20):
== Info: SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
== Info: ALPN, server accepted to use h2
== Info: Server certificate:
== Info:  subject: CN=XXX
== Info:  start date: Sep 13 15:58:01 2021 GMT
== Info:  expire date: Sep 11 15:58:01 2031 GMT
== Info:  issuer: CN=XXX
== Info:  SSL certificate verify result: self signed certificate (18), continuing anyway.
== Info: Using HTTP2, server supports multi-use
== Info: Connection state changed (HTTP/2 confirmed)
== Info: Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
== Info: Using Stream ID: 1 (easy handle 0x562c536977f0)
=> Send header: GET /api/query?format=Entities&type=Repository HTTP/2
Host: XXX:9398
content-type:application/json
accept:application/json
x-restsvcsessionid: NzkwZDIwMjMtZmUwZS00MDQ5LWI2YjAtZWRmOGM0NzBhMDc2

== Info: Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
=> Recv header: HTTP/2 403
=> Recv header: cache-control: private
=> Recv header: content-length: 119
=> Recv header: content-type: application/json
=> Recv header: server: Microsoft-HTTPAPI/2.0
=> Recv header: x-frame-options: SAMEORIGIN
=> Recv header: x-xss-protection: 1; mode=block
=> Recv header: strict-transport-security: max-age=31536000
=> Recv header: x-content-type-options: nosniff
=> Recv header: date: Fri, 23 Feb 2024 11:16:40 GMT
=> Recv header:
=> Recv data: {"FirstChanceExceptionMessage":null,"StackTrace":null,"Message":"Access denied.","StatusCode":403,"Status":"Forbidden"}
== Info: Connection #0 to host XXX left intact
== Info: Found bundle for host XXX: 0x562c53720dc0 == Info: Re-using existing connection! (#0) with host X
== Info: Connected to X (X.X.X.X) port 9398 (#0)
== Info: Server auth using Basic with user 'CENTREON'
== Info: Using Stream ID: 3 (easy handle 0x562c536977f0)
=> Send header: POST /api/sessionMngr/ HTTP/2
Host: X:9398
authorization: Basic XXX
content-type:application/json
accept:application/json
content-length: 0

Je ne comprends pas j’utilise le même compte que sur ma commande Curl précédente. 

Ce que je constate c’est quand utilisant le plugin il créé une session (comme j’ai fait en curl -X POST...) et utilise bien le X-RestSvcSessionId généré. 

Je ne vois pas pourquoi il me retourne un accès denied alors qu’il autorise bien l’accès aux “repositories” via curl.

Y’a-t-il moyen de préciser le X-RestSvcSessionId dans la commande Centreon ? Ou savez-vous où je m’y prends mal ? 

D’avance merci. 

Bonne journée 

Bonjour, Il me semble que les variables dans centreon sont récupérées sous la forme

$_HOSTNOMVARIABLE$

ou 

$_SERVICENOMVARIABLES$

 à adapter en fonction de l’emplacement ou elles sont définies, soit dans l’hôte soit dans le service.

Bonne journée


Bonjour @long,

Si la ligne de commande lancée est bien 

/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=apps::backup::veeam::vbem::restapi::plugin --mode=repositories --hostname='X.X.X.X' --port=9398 --proto=https --api-username=’$APIUSER’ --api-password='$APIPWD’ --insecure --debug

avec le nom d’utilisateur et le mot de passe stockés dans les variables bash APIUSER et APIPWD alors c’est normal que ça ne fonctionne pas car l’interpréteur bash ne “remplace” pas les variables par leurs valeurs si ces variables sont protégées par des “simple quotes” (l’apostrophe ). Vous devez utiliser des “double quotes” (les guillemets ).

Essayez de la façon suivante :

/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=apps::backup::veeam::vbem::restapi::plugin --mode=repositories --hostname='X.X.X.X' --port=9398 --proto=https --api-username=”$APIUSER” --api-password=”$APIPWD” --insecure --debug


Bonjour,

J’ai exactement le même souci que vous (check ok avec vos 2 commandes mais par contre je test avec les identifiants et non les variables $APIUSER et $APIPWD) par contre j’ai lu qu’il fallait une certaine version de Veeam afin de faire fonctionner l’API “veeam enterprise plus” https://forums.veeam.com/restful-api-f30/license-requirements-for-restful-api-t29923.html


Bonjour, 

Merci pour vos retours. J’ai bien la version Entreprise. 

C’était simplement pour ne pas afficher mes identifiants les variables ($APIUSER et $APIPWD). 

Je ne trouve toujours pas de solution, dans les logs de mon serveur VEEAM : 

:26.08.2024 17:05:45.194] <55>    Info (3)    IGET] request to Thttps://X.X.X.X:9398/api/query?format=Entities&type=Repository] deserialized. Message: znull]; Parameters: 😉.
e26.08.2024 17:05:45.195]    <55>   Error (3)    Failed to query resources.. RequestUri: rURI template match was not found].
s26.08.2024 17:05:45.195]    <55>   Error (3)    Access denied. (System.UnauthorizedAccessException)
e26.08.2024 17:05:45.195]    <55>   Error (3)       à Veeam.Backup.Enterprise.RestAPIService.CRestrictedRestApiQueryScope.Query(String queryTypeStr, String formatStr, String fieldsStr, String sortAscStr, String sortDescStr, String pageSizeStr, String pageNumStr, String filterStr)
N26.08.2024 17:05:45.195]    <55>   Error (3)       à Veeam.Backup.Enterprise.RestAPIService.CRestQueryControllerStub.<Query>d__1.MoveNext()


Je précise que par le DNS ou l’IP c’est la même chose. En commande curl depuis mon serveur j’ai bien le retour de l’API sans erreur. 

Des liens où d’autres personnes semblent rencontrer le même problème. 

https://forums.veeam.com/restful-api-f30/problem-creating-users-in-enterprise-manager-with-api-and-json-t68642.html

https://support.zabbix.com/si/jira.issueviews:issue-html/ZBX-23334/ZBX-23334.html

https://community.veeam.com/vug-germany-61/enterprise-manager-rest-api-3854

Je ne vois vraiment pas où j’ai fait une erreur. 
Merci pour vos retours. 

Bonne journée

 


Reply