Utilisation de l'API GraphQL¶
BoostSecurity prend en charge les API GraphQL pour accéder de manière programmatique aux différentes données de votre compte.
Notez que des données spécifiques peuvent être accessibles via des services spécialisés dans le backend BoostSecurity. Chaque service expose une API GraphQL pour interroger et muter les données spécifiques à ce service. Par exemple, des données récapitulatives sur l'ensemble du compte sur une période donnée peuvent être accessibles via le service Analytics. Finalement, ces API GraphQL spécifiques aux services seront remplacées par une seule API GraphQL qui unifiera toutes ces APIs GraphQL en une seule.
Une clé API peut être utilisée pour accéder à l'API GraphQL une fois qu'elle est créée.
Obtention d'une clé API¶
La première étape pour utiliser l'API GraphQL consiste à créer une clé API.
Listing des APIs GraphQL Boost¶
Téléchargez le fichier situé à https://app.boostsecurity.io/config.js et récupérez l'URL se terminant par graphql.
Accéder à l'API GraphQL¶
Une fois que vous avez créé une clé API, vous pouvez accéder à l'API GraphQL en utilisant soit un client GraphQL, soit un client HTTP. Les exemples suivants montrent comment accéder à l'API GraphQL en utilisant l'utilitaire curl.
La clé API est fournie avec l'en-tête Authorization afin d'authentifier la demande au serveur. Le mot-clé ApiKey doit être utilisé avec l'en-tête Authorization lors de la fourniture de la clé API.
Ainsi :
curl -H "Authorization: ApiKey <clé api>" -H "Content-Type: application/json" -d "{}" https://api.boostsecurity.io/<SERVICE>/graphql
Le schéma peut être obtenu depuis l'API GraphQL en utilisant l'introspection GraphQL. Enregistrez la requête suivante dans un fichier nommé introspection.json :
{
"query":"{
__schema {
queryType {
fields {
name
}
}
mutationType {
fields {
name
}
}
}
}",
"variables":{}
}
Ensuite, interrogez l'introspection pour le service analytics comme suit :
BOOST_API_BASE="https://api.boostsecurity.io"
BOOST_SERVICE="analytics"
BOOST_GRAPHQL_API_URL="${BOOST_API_BASE}/${BOOST_SERVICE}/graphql"
curl -d "$(cat introspection.json | tr -d '\n')" \
-H "Authorization: ApiKey <clé api>" \
-H "Content-Type: application/json" \
$BOOST_GRAPHQL_API_URL
Ce qui renvoie :
{
"data": {
"__schema": {
"queryType": {
"fields": [
{
"name": "projectsPosture"
},
{
"name": "topRepositories"
},
{
"name": "insights"
},
{
"name": "coverage"
},
{
"name": "scanMetrics"
},
{
"name": "scanSummaryMetrics"
}
]
},
"mutationType": null
}
}
}
Exemple utilisant l'API analytics¶
Par exemple, afin d'obtenir les activités quotidiennes du service analytics, entre le 2022-12-01 et le 2022-12-03, enregistrez le suivant comme daily_activities.json :
{
"query" : "
query(
$from_day: Date
$to_day: Date
$scannerIdsFilter: [String!]
$assetIdsFilter: [String!]
$max_rules: Int
){
insights(
fromDay: $from_day,
toDay: $to_day,
maxRules: $max_rules,
filters: {
scannerIds:$scannerIdsFilter
assetIds:$assetIdsFilter
}
) {
dailyMetric {
timeStamp,
violations,
findings
}
dailyActivity {
timeStamp,
fixedViolations,
mergedViolations
}
summary {
findings {
previous
current
}
violations {
previous
current
}
fixes
mergedViolations
}
}
}
",
"variables" : {
"from_day":"2022-12-01",
"to_day":"2022-12-03",
"scannerIdsFilter":[],
"assetIdsFilter":[]
}
}
Ensuite, effectuez la requête pour le service analytics comme suit :
BOOST_API_BASE="https://api.boostsecurity.io"
BOOST_SERVICE="analytics"
BOOST_GRAPHQL_API_URL="${BOOST_API_BASE}/${BOOST_SERVICE}/graphql"
curl -d "$(cat daily_activities.json | tr -d '\n')" \
-H "Authorization: ApiKey <clé api>" \
-H "Content-Type: application/json" \
$BOOST_GRAPHQL_API_URL
Ce qui renverrait :
{
"data": {
"insights": {
"dailyMetric": [
{
"timeStamp": "2022-12-01T00:00:00",
"violations": 397,
"findings": 104
},
{
"timeStamp": "2022-12-02T00:00:00",
"violations": 397,
"findings": 104
},
{
"timeStamp": "2022-12-03T00:00:00",
"violations": 397,
"findings": 104
}
],
"dailyActivity": [
{
"timeStamp": "2022-12-01T00:00:00",
"fixedViolations": 0,
"mergedViolations": 0
},
{
"timeStamp": "2022-12-02T00:00:00",
"fixedViolations": 0,
"mergedViolations": 0
},
{
"timeStamp": "2022-12-03T00:00:00",
"fixedViolations": 0,
"mergedViolations": 0
}
],
"summary": {
"findings": {
"previous": 104,
"current": 104
},
"violations": {
"previous": 397,
"current": 397
},
"fixes": 0,
"mergedViolations": 0
},
"filters": {
"scannerId": [
{
"value": "boostsecurityio/codeql",
"displayValue": "Boost CodeQL"
},
...
],
"assetId": [
{
"value": "...<certain uuid value>...",
"displayValue": "acme-storesrus"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / account-management"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / cart-service"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / fidelity-service"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / inventory-service"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / payment-service"
},
{
"value": "...<certain other uuid value>...",
"displayValue": "acme-storesrus / services-analytics"
}
]
}
}
}
}