> ## 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

> 脆弱性エクスポート API を使用した自動ポーリング（pull）で Tenable.io の脆弱性検出結果を CaseBender に取り込みます。

## 概要

Tenable.io 統合（**INT-003**）は、脆弱性の検出結果を CaseBender に取り込み、CVSS ベースの深刻度と
CVE 観測対象で強化し、アラート（および任意でケース）に変換します。

<Tip>
  **推奨: 自動ポーリングを有効にしてください。** CaseBender は脆弱性エクスポート API
  を使用してスケジュールに基づき、Tenable.io から直接新しい脆弱性をプルします。
  インバウンドエンドポイントは不要です。
  [自動ポーリング](#インバウンド自動ポーリング) を参照してください。
</Tip>

<Note>
  ポーリングは **Tenable.io 脆弱性エクスポート API** を使用し、**API キーのペア**
  （access key + secret key）で認証します。
</Note>

## 機能

| 機能                  | 方向     | 説明                                               |
| ------------------- | ------ | ------------------------------------------------ |
| **脆弱性のポーリング（pull）** | インバウンド | CaseBender がスケジュールに基づき脆弱性をエクスポートし、新しい検出結果を取り込みます |
| 観測対象の抽出             | インバウンド | ホスト IP、ホスト名、CVE                                  |
| CVSS 深刻度マッピング       | インバウンド | 検出結果が CVSS から CaseBender の深刻度にマッピングされます          |
| 深刻度しきい値             | インバウンド | 任意で最小深刻度以上の検出結果のみをプル                             |

## 前提条件

<Steps>
  <Step title="API キーを作成">
    Tenable.io で **Settings → My Account → API Keys** に移動し、キーのペアを生成します。
    **Access Key** と **Secret Key** をコピーします。
  </Step>

  <Step title="ネットワーク送信">
    CaseBender のポーラーが `https://cloud.tenable.com`（または Tenable.io プライベートリージョンの
    URL）に到達できる必要があります。
  </Step>
</Steps>

## CaseBender で統合を構成

<Steps>
  <Step title="統合カタログを開く">
    **Settings → Integrations → Create** に移動し、**Vulnerability Management** カテゴリの
    **Tenable.io** を選択します。
  </Step>

  <Step title="API キーを入力">
    | フィールド                | 説明                                                               |
    | -------------------- | ---------------------------------------------------------------- |
    | Access Key           | Tenable.io API の access key                                      |
    | Secret Key           | Tenable.io API の secret key                                      |
    | API URL（任意）          | 既定 `https://cloud.tenable.com`                                   |
    | Minimum severity（任意） | `info`、`low`、`medium`、`high`、`critical` のいずれか。この値以上の検出結果のみプルされます |
  </Step>

  <Step title="自動ポーリングを有効にする（推奨）">
    | オプション                         | 効果                                    |
    | ----------------------------- | ------------------------------------- |
    | `pollingEnabled`              | スケジュールされたエクスポート + 取り込みを有効化            |
    | `pollingIntervalMinutes`      | ポーリング間隔（既定 `15`。エクスポートは非同期のため 15+ 推奨） |
    | `pollingInitialLookbackHours` | 初回実行時、この範囲内に更新された検出結果を取り込む（既定 `24`）   |
    | `pollMaxItemsPerRun`          | 実行あたりの取り込み件数の安全上限（既定 `500`）           |
  </Step>

  <Step title="ケースの自動作成を構成">
    | オプション                | 効果                                       |
    | -------------------- | ---------------------------------------- |
    | `autoCreateCases`    | 各検出結果を **ケース** に昇格（asset + plugin で重複排除） |
    | `minSeverityForCase` | この深刻度以上の場合のみケースを自動作成                     |
  </Step>
</Steps>

## インバウンド（自動ポーリング）

Tenable は **非同期エクスポートジョブ** を通じて増分的な脆弱性データを公開します。CaseBender は
このフローを自動的に処理します。

<Steps>
  <Step title="エクスポートを要求">
    各間隔で、CaseBender は前回のカーソル以降に更新された `OPEN`/`REOPENED` 脆弱性のエクスポートを
    要求します（任意で深刻度でフィルタリング）。初回実行時のウィンドウは `pollingInitialLookbackHours`
    です。
  </Step>

  <Step title="待機 + 再開">
    CaseBender は（上限付きで）エクスポートの完了を待機し、そのチャンクをダウンロードします。サイクル
    の時間予算が尽きた時点でエクスポートがまだ生成中の場合、その ID が保存され、次のサイクルで再開
    されます。データは失われません。
  </Step>

  <Step title="カーソル + 重複排除">
    エクスポート完了後、カーソルは実行時刻まで進みます。検出結果は **`asset.uuid` + `plugin.id` で
    重複排除** されるため、ウィンドウが重なっても重複は作成されません。
  </Step>
</Steps>

<Info>
  エクスポートは非同期のため、検出結果は Tenable で更新されてから数分後に表示される場合があります。
  これは脆弱性データでは想定される挙動であり、`pollingIntervalMinutes` で制御されます。
</Info>

## セキュリティ上の考慮事項

* **シークレットの取り扱い** — API キーは統合設定に保存されます。組織のポリシーに従ってローテーション
  してください。
* **最小権限** — 脆弱性への読み取りアクセスを持つユーザーアカウントに紐づくキーを使用してください。
* **ネットワーク** — 送信を Tenable.io リージョンの URL に制限してください。

## トラブルシューティング

<AccordionGroup>
  <Accordion title="ポーリングは有効だが検出結果が表示されない">
    access/secret キーが有効で、カーソル以降に更新された `OPEN`/`REOPENED` の検出結果が存在すること
    を確認してください。エクスポートには時間がかかるため、少なくとも 1 つの完全な間隔を待ちます。
    すべてがフィルタリングされる場合は `Minimum severity` を下げてください。

    **CaseBender のすべてのサービスが稼働していることを確認してください** — Docker では
    `docker compose ps` で `worker` と `misp-processor` サービスが `Up` である必要があります。
  </Accordion>

  <Accordion title="エクスポートが失敗した">
    `Tenable export … failed` エラーはエクスポートジョブがサーバー側で失敗したことを示します。次の
    間隔で再試行されます。キーに脆弱性エクスポート権限があることを確認してください。
  </Accordion>
</AccordionGroup>

## 関連ドキュメント

* [統合の概要](./introduction.mdx)
* [Tenable 開発者ポータル](https://developer.tenable.com/)
