Webhooks & Intégration SIEM
Les webhooks sortants permettent à Boundry de notifier instantanément vos systèmes tiers (SIEM, Slack, Datadog, Splunk, orchestrateurs internes) lors d'un incident de sécurité ou d'une mise en quarantaine.
1. Événements Émis
| Type d'Événement | Condition de Déclenchement |
|---|---|
event.blocked | Un appel d'outil a été formellement bloqué par une règle de pare-feu. |
event.quarantined | Une action sensible est suspendue en attente d'approbation humaine. |
event.anomaly | Le score de risque d'une action a dépassé le seuil d'alerte configuré. |
agent.circuit_breaker_tripped | Le disjoncteur anti-boucle d'un agent a été déclenché. |
audit.integrity_breach | Discordance détectée dans la chaîne séquentielle HMAC SHA-256. |
2. Structure du Payload JSON
Exemple d'événement webhook 'event.blocked'
{
"id": "evt_hook_901283af",
"event_type": "event.blocked",
"created_at": "2026-10-21T12:15:30.451Z",
"data": {
"agent_id": "support-agent-prod",
"tool_name": "delete_customer_database",
"risk_score": 98,
"rule_violated": {
"id": "rule_prevent_db_drop",
"name": "Interdiction de destruction de base de données"
},
"ip_address": "198.51.100.12",
"sha256_hash": "a4f8910bcde82710381928371928301293810293810293810293810293810293"
}
}
3. Vérification de Signature Cryptographique
Pour garantir qu'une requête provient authentiquement de la passerelle Boundry et n'a pas été rejouée par un tiers, chaque appel contient les en-têtes :
X-Boundry-Timestamp: 1729512930
X-Boundry-Signature: t=1729512930,v1=9f2d1e8c7b3a4f6d9012e8b7c6a5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7
Script de Validation en Python (FastAPI / Flask)
verify_webhook.py
import hmac
import hashlib
import time
def verify_boundry_webhook(payload_bytes: bytes, signature_header: str, secret_key: str) -> bool:
"""Valide l'en-tête de signature X-Boundry-Signature."""
elements = dict(item.split("=") for item in signature_header.split(","))
timestamp = elements.get("t")
v1_sig = elements.get("v1")
# 1. Protection contre les attaques par rejeu (tolérance max de 5 minutes)
if abs(time.time() - int(timestamp)) > 300:
return False
# 2. Recalcul du hash HMAC
signed_payload = f"{timestamp}.".encode("utf-8") + payload_bytes
expected_sig = hmac.new(
secret_key.encode("utf-8"),
signed_payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected_sig, v1_sig)
4. Politique de Réessai et Tolérance aux Pannes
- Délai d'accusé de réception : Votre endpoint doit retourner un code HTTP
2xxen moins de 5 000 ms. - Politique de réessai avec backoff exponentiel : En cas d'échec (timeout ou code
5xx), Boundry effectue jusqu'à 5 tentatives :
- Immédiat
- Après 30 secondes
- Après 5 minutes
- Après 30 minutes
- Après 2 heures
- Circuit Breaker d'évacuation : Après 5 échecs consécutifs, l'événement est archivé dans le journal des livraisons en échec de votre console pour renvoi manuel.