日本語

セキュリティスキャンを一括実行する

GitHub リポジトリを検出するか、CSV インベントリから再開可能なセキュリティスキャンを実行します。

npx @openai/codex-security bulk-scan を使用すると、1 つのキャンペーンで複数のリポジトリをレビューできます。個人の GitHub アカウントまたは組織からリポジトリを検出するか、各リポジトリを正確な Git リビジョンに固定した CSV を指定します。

リポジトリの取得元を選択する

取得元 使用する場面
GitHub での検出 個人の GitHub アカウントまたは組織から、リポジトリを対話的に選択します。
CSV インベントリ 正確なリポジトリリビジョンに対して、再現可能な自動キャンペーンを実行します。

どちらのワークフローも進行状況を保存し、リポジトリごとの結果を保持するため、中断後にキャンペーンを再開できます。

GitHub リポジトリを検出する

GitHub CLI でサインインします。

gh auth login

対話型の一括スキャンを開始します。

npx @openai/codex-security bulk-scan

CLI の案内に従って次の手順を進めます。

  1. 個人の GitHub アカウントまたは組織を選択します。
  2. 過去 90 日以内にアクティブだったリポジトリを確認します。
  3. リポジトリ一覧を検索し、スキャンするリポジトリを選択します。
  4. スキャン結果を保存するディレクトリを選択します。
  5. 選択したリポジトリを確認し、キャンペーンを確定します。

検出では、アーカイブ済みのリポジトリと fork が除外されます。CLI は、選択した各リポジトリについて、デフォルトブランチの正確なコミットを <output-directory>/repositories.csv に記録します。選択を確定するまで、スキャンは開始されません。

GitHub Enterprise Server を使用するには、まず GitHub ホストにサインインします。

gh auth login --hostname github.example.com

リポジトリの検出を開始するときに GH_HOST を設定します。

GH_HOST=github.example.com npx @openai/codex-security bulk-scan

対話型の検出にはターミナルが必要です。CI、コンテナ、または準備済みのリポジトリ一覧では、代わりに CSV インベントリを使用します。

リポジトリ CSV を作成する

リポジトリごとに 1 行を使用し、リビジョンを固定した CSV を作成します。

id,repository,revision,scope,mode
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep

CSV は次の列をサポートします。

必須 説明
id はい リポジトリを識別する一意の値。英字、数字、ピリオド、ハイフン、アンダースコアを使用できます。
repository はい HTTPS URL、SSH URL、またはローカルリポジトリのパス。相対パスは CSV のディレクトリを基準に解決されます。
revision はい 40 文字または 64 文字の完全な Git commit SHA。ブランチ名、タグ、短縮されたコミットハッシュはサポートされません。
scope いいえ スキャン対象となる、リポジトリからの相対ディレクトリ。リポジトリ全体をスキャンする場合は値を省略します。
mode いいえ standard または deep。コマンドで選択したモードを使用する場合は値を省略します。

ローカルリポジトリの完全な commit SHA を確認するには、次を実行します。

git -C /path/to/repository rev-parse HEAD

CSV からキャンペーンを実行する

CSV と、リポジトリ外部にある非公開の出力ディレクトリを指定します。

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

--workers は同時に実行するリポジトリスキャン数を制御し、デフォルトは 4 です。独自の mode がない行に deep スキャンを適用するには、--mode deep を使用します。各 CSV 行では、引き続き独自のスキャンモードとリポジトリスコープを選択できます。

CLI は各固定リビジョンをチェックアウトし、選択した対象をスキャンして結果を記録し、一時的なリポジトリのチェックアウトを削除します。スキャンのカバレッジが complete で、必要な結果アーティファクトがすべて存在する場合にのみ、リポジトリは完了として扱われます。

モデルと推理強度を選択する

一括スキャンでは、デフォルトで gpt-5.6-solxhigh の推理強度が使用されます。CSV キャンペーンで別のモデルと強度を選択するには、次のようにします。

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --model gpt-5.6-terra \
  --effort high

対話型のリポジトリ検出でも、同じオプションを使用できます。

npx @openai/codex-security bulk-scan --model gpt-5.6-terra --effort high

サポートされる強度レベルは、minimallowmediumhighxhigh です。

キャンペーン結果を確認する

出力ディレクトリには、固定されたキャンペーン、追記専用の結果台帳、各リポジトリと試行ごとの個別のアーティファクトが含まれます。

security-scans/
├── manifest.json
├── results.jsonl
├── checkouts/
└── artifacts/
    ├── payments/
    │   └── attempt-1/
    │       ├── scan-manifest.json
    │       ├── findings.json
    │       ├── coverage.json
    │       └── report.md
    └── identity/
        └── attempt-1/
            ├── scan-manifest.json
            ├── findings.json
            ├── coverage.json
            └── report.md
  • manifest.json には、キャンペーン内のリポジトリ、固定リビジョン、スコープ、スキャンモードが記録されます。
  • results.jsonl には、各リポジトリの試行、そのステータス、アーティファクトディレクトリ、利用可能なコストまたはエラーの詳細が記録されます。
  • report.md は、1 回のリポジトリ試行について読みやすいレポートを提供します。
  • findings.jsoncoverage.json には、その試行の検出事項とレビュー済みスコープが記録されます。

持ち運び可能な結果が必要な場合は、完了したリポジトリスキャンを 1 件エクスポートします。

npx @openai/codex-security export \
  /path/outside/repositories/security-scans/artifacts/payments/attempt-1 \
  --export-format sarif \
  --output /path/outside/repositories/payments.sarif

結果にはソースの抜粋や脆弱性の詳細が含まれることがあります。出力ディレクトリは非公開かつスキャン対象リポジトリの外部に置き、適切な保持ポリシーを適用してください。

キャンペーンを再開する

同じ CSV と出力ディレクトリを指定して、元のコマンドを実行します。

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

CLI は、まだ処理が必要なリポジトリを再開します。対応するレシートと必要なスキャンアーティファクトがすべて残っている場合にのみ、完了済みのリポジトリをスキップします。

既存の出力ディレクトリに対して、リポジトリインベントリを変更しないでください。CLI は固定された manifest を確認し、異なるキャンペーンを拒否します。リポジトリ、リビジョン、スコープ、スキャンモードを変更する場合は、新しい出力ディレクトリを使用してください。

リポジトリエラーを再試行する

一時的なチェックアウトエラーやスキャンエラーの後にリポジトリを再試行するには、--max-attempts を使用します。

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --max-attempts 3

デフォルトでは、リポジトリごとに 1 回試行します。各試行には独自のレシートとアーティファクトディレクトリが割り当てられます。

一括スキャンでは次の終了コードが使用されます。

終了コード 意味
0 すべてのリポジトリが正常に完了しました。
2 リポジトリを完了できなかった、スキャンのカバレッジが不完全だった、またはコマンドで入力エラーかランタイムエラーが発生しました。
130 Ctrl-C によってキャンペーンが中断されました。
143 SIGTERM によってキャンペーンが終了されました。

Docker で一括スキャンを実行する

Codex Security リポジトリには、Linux Docker ホストで自動 CSV キャンペーンを実行するための、強化された Compose 設定が含まれています。ホストは、非特権ユーザー名前空間の作成をサポートしている必要があります。

リポジトリの CSV、スキャン結果、サインイン状態は、永続的なディレクトリにマウントして保持してください。OpenAI の認証情報は、環境変数またはシークレットマネージャーを通じて提供します。プライベート GitHub リポジトリの場合は、同じ方法で GH_TOKEN または GITHUB_TOKEN を提供してください。

マウントした CSV と出力ディレクトリを使用してイメージを実行します。

docker compose run --rm codex-security \
  bulk-scan /input/repositories.csv \
  --output-dir /output \
  --workers 4

同じマウント済み CSV と出力ディレクトリを使用して、キャンペーンを再開します。 GitHub Enterprise Server の場合は、CODEX_SECURITY_GIT_HOST に GitHub ホストを設定します。

利用可能なすべてのフラグについては、bulk-scan コマンドリファレンスをご覧ください。スキャンのカバレッジと検出事項に関する一般的な質問については、CLI FAQをご覧ください。