> ## 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` 발견 항목이 존재하는지
    확인하세요. 익스포트는 시간이 걸리므로 최소한 하나의 완전한 주기를 기다리세요. 모든 항목이
    필터링되면 `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/)
