> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tenable.io

> Ingérez les findings de vulnérabilités Tenable.io dans CaseBender par interrogation automatique (pull) à l'aide de l'API d'export de vulnérabilités.

## Présentation

L'intégration Tenable.io (**INT-003**) ingère les findings de vulnérabilités dans CaseBender, les
enrichit d'une sévérité basée sur le CVSS et d'observables CVE, et les convertit en alertes (et
éventuellement en cas).

<Tip>
  **Recommandé : activez l'interrogation automatique.** CaseBender extrait de
  nouvelles vulnérabilités directement de Tenable.io de façon planifiée à l'aide de
  l'API d'export de vulnérabilités — sans endpoint entrant. Voir
  [Interrogation automatique](#entrant-interrogation-automatique).
</Tip>

<Note>
  L'interrogation utilise l'**API d'export de vulnérabilités de Tenable.io**,
  authentifiée avec une **paire de clés d'API** (access key + secret key).
</Note>

## Fonctionnalités

| Fonctionnalité                              | Sens    | Description                                                                              |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------------------------- |
| **Interrogation des vulnérabilités (pull)** | Entrant | CaseBender exporte les vulnérabilités de façon planifiée et ingère les nouveaux findings |
| Extraction d'observables                    | Entrant | IP des hôtes, noms d'hôte et CVE                                                         |
| Mappage de sévérité CVSS                    | Entrant | Les findings sont mappés à la sévérité CaseBender depuis le CVSS                         |
| Seuil de sévérité                           | Entrant | Extrait éventuellement uniquement les findings à partir d'une sévérité minimale          |

## Prérequis

<Steps>
  <Step title="Créer des clés d'API">
    Dans Tenable.io, allez dans **Settings → My Account → API Keys** et générez une paire de clés.
    Copiez l'**Access Key** et la **Secret Key**.
  </Step>

  <Step title="Sortie réseau">
    L'interrogateur de CaseBender doit atteindre `https://cloud.tenable.com` (ou l'URL de votre
    région privée Tenable.io).
  </Step>
</Steps>

## Configurer l'intégration dans CaseBender

<Steps>
  <Step title="Ouvrir le catalogue d'intégrations">
    Allez dans **Settings → Integrations → Create**, puis choisissez **Tenable.io** dans la
    catégorie **Vulnerability Management**.
  </Step>

  <Step title="Saisir les clés d'API">
    | Champ                         | Description                                                                                                           |
    | ----------------------------- | --------------------------------------------------------------------------------------------------------------------- |
    | Access Key                    | Access key de l'API Tenable.io                                                                                        |
    | Secret Key                    | Secret key de l'API Tenable.io                                                                                        |
    | API URL (facultatif)          | Par défaut `https://cloud.tenable.com`                                                                                |
    | Minimum severity (facultatif) | L'une des valeurs `info`, `low`, `medium`, `high`, `critical` — seuls les findings à partir de ce seuil sont extraits |
  </Step>

  <Step title="Activer l'interrogation automatique (recommandé)">
    | Option                        | Effet                                                                                           |
    | ----------------------------- | ----------------------------------------------------------------------------------------------- |
    | `pollingEnabled`              | Active l'export + l'ingestion planifiés                                                         |
    | `pollingIntervalMinutes`      | Fréquence d'interrogation (par défaut `15` ; les exports sont asynchrones, donc 15+ recommandé) |
    | `pollingInitialLookbackHours` | Au premier passage, importe les findings mis à jour dans cette fenêtre (par défaut `24`)        |
    | `pollMaxItemsPerRun`          | Limite de sécurité d'éléments par passage (par défaut `500`)                                    |
  </Step>

  <Step title="Configurer la création automatique de cas">
    | Option               | Effet                                                             |
    | -------------------- | ----------------------------------------------------------------- |
    | `autoCreateCases`    | Promeut chaque finding en **Cas** (dédupliqué par asset + plugin) |
    | `minSeverityForCase` | Ne crée automatiquement des cas qu'à partir de cette sévérité     |
  </Step>
</Steps>

## Entrant (interrogation automatique)

Tenable expose les données de vulnérabilités incrémentales via une **tâche d'export asynchrone**.
CaseBender gère ce flux automatiquement :

<Steps>
  <Step title="Demander un export">
    À chaque intervalle, CaseBender demande un export des vulnérabilités `OPEN`/`REOPENED` mises à
    jour depuis le dernier curseur (éventuellement filtrées par sévérité). Au premier passage, la
    fenêtre est `pollingInitialLookbackHours`.
  </Step>

  <Step title="Attendre + reprendre">
    CaseBender attend (de façon bornée) la fin de l'export et télécharge ses fragments. Si l'export
    est encore en cours de génération lorsque le budget de temps du cycle est épuisé, son ID est
    enregistré et le cycle suivant le reprend — aucune donnée n'est perdue.
  </Step>

  <Step title="Curseur + déduplication">
    Après un export terminé, le curseur avance jusqu'à l'heure d'exécution. Les findings sont
    **dédupliqués par `asset.uuid` + `plugin.id`**, de sorte que les fenêtres qui se chevauchent ne
    créent jamais de doublons.
  </Step>
</Steps>

<Info>
  Comme les exports sont asynchrones, les findings peuvent apparaître quelques minutes après leur
  mise à jour dans Tenable. C'est attendu pour les données de vulnérabilités et contrôlé par
  `pollingIntervalMinutes`.
</Info>

## Considérations de sécurité

* **Gestion des secrets** — les clés d'API sont stockées dans les paramètres de l'intégration ;
  faites-les tourner selon la politique de votre organisation.
* **Moindre privilège** — utilisez des clés liées à un compte utilisateur avec accès en lecture
  aux vulnérabilités.
* **Réseau** — restreignez la sortie à l'URL de votre région Tenable.io.

## Dépannage

<AccordionGroup>
  <Accordion title="L'interrogation est activée mais aucun finding n'apparaît">
    Confirmez que les clés access/secret sont valides et qu'il existe des findings `OPEN`/`REOPENED`
    mis à jour depuis le curseur. Les exports prennent du temps ; laissez au moins un intervalle
    complet. Réduisez la `Minimum severity` si elle filtre tout.

    **Assurez-vous que tous les services CaseBender fonctionnent** — avec Docker,
    `docker compose ps` doit afficher les services `worker` et `misp-processor` en `Up`.
  </Accordion>

  <Accordion title="L'export a échoué">
    Une erreur `Tenable export … failed` indique que la tâche d'export a échoué côté serveur. Elle
    sera relancée à l'intervalle suivant. Vérifiez que les clés ont la permission d'export de
    vulnérabilités.
  </Accordion>
</AccordionGroup>

## Documentation connexe

* [Présentation des intégrations](./introduction.mdx)
* [Portail développeur Tenable](https://developer.tenable.com/)
