セキュリティスキャンを一括実行する
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-scanCLI の案内に従って次の手順を進めます。
- 個人の GitHub アカウントまたは組織を選択します。
- 過去 90 日以内にアクティブだったリポジトリを確認します。
- リポジトリ一覧を検索し、スキャンするリポジトリを選択します。
- スキャン結果を保存するディレクトリを選択します。
- 選択したリポジトリを確認し、キャンペーンを確定します。
検出では、アーカイブ済みのリポジトリと 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,,deepCSV は次の列をサポートします。
| 列 | 必須 | 説明 |
|---|---|---|
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 HEADCSV からキャンペーンを実行する
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-sol と xhigh の推理強度が使用されます。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サポートされる強度レベルは、minimal、low、medium、high、xhigh です。
キャンペーン結果を確認する
出力ディレクトリには、固定されたキャンペーン、追記専用の結果台帳、各リポジトリと試行ごとの個別のアーティファクトが含まれます。
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.mdmanifest.jsonには、キャンペーン内のリポジトリ、固定リビジョン、スコープ、スキャンモードが記録されます。results.jsonlには、各リポジトリの試行、そのステータス、アーティファクトディレクトリ、利用可能なコストまたはエラーの詳細が記録されます。report.mdは、1 回のリポジトリ試行について読みやすいレポートを提供します。findings.jsonとcoverage.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 4CLI は、まだ処理が必要なリポジトリを再開します。対応するレシートと必要なスキャンアーティファクトがすべて残っている場合にのみ、完了済みのリポジトリをスキップします。
既存の出力ディレクトリに対して、リポジトリインベントリを変更しないでください。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をご覧ください。