Массовое сканирование безопасности
Находите репозитории GitHub или запускайте возобновляемое сканирование безопасности на основе реестра CSV.
Используйте npx @openai/codex-security bulk-scan, чтобы проверить репозитории в рамках одной
кампании. Находите репозитории в личной учетной записи GitHub или
организации либо предоставьте CSV, в котором для каждого репозитория указана точная ревизия Git.
Выбор источника репозиториев
| Источник | Когда использовать |
|---|---|
| Поиск в GitHub | Интерактивно выбирайте репозитории из личной учетной записи GitHub или организации. |
| Реестр CSV | Запускайте повторяемую автоматизированную кампанию для точных ревизий репозиториев. |
Оба рабочих процесса сохраняют ход выполнения и результаты для каждого репозитория, а также позволяют возобновить кампанию после прерывания.
Поиск репозиториев GitHub
Войдите в систему с помощью GitHub CLI:
gh auth loginЗапустите интерактивное массовое сканирование:
npx @openai/codex-security bulk-scanCLI проведет вас через следующие этапы:
- Выберите личную учетную запись GitHub или организацию.
- Просмотрите репозитории, активные в течение последних 90 дней.
- Выполните поиск в списке репозиториев и выберите репозитории для сканирования.
- Выберите каталог для результатов сканирования.
- Проверьте выбранные репозитории и подтвердите кампанию.
При поиске исключаются архивные репозитории и форки. 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 с репозиториями
Создайте CSV, содержащий по одной строке для каждого репозитория с закрепленной ревизией:
id,repository,revision,scope,mode,prompt
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard,Review payment authorization and refunds.
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep,Review session and identity boundaries.CSV поддерживает следующие столбцы:
| Столбец | Обязательный | Описание |
|---|---|---|
id |
Да | Уникальный идентификатор репозитория. Используйте буквы, цифры, точки, дефисы или символы подчеркивания. |
repository |
Да | URL HTTPS, URL SSH или путь к локальному репозиторию. Относительные пути разрешаются от каталога CSV. |
revision |
Да | Полный 40- или 64-символьный SHA коммита Git. Имена веток, теги и сокращенные хеши коммитов не поддерживаются. |
scope |
Нет | Каталог для сканирования относительно репозитория. Не указывайте значение, чтобы сканировать весь репозиторий. |
mode |
Нет | standard или deep. Не указывайте значение, чтобы использовать режим, выбранный в команде. |
prompt |
Нет | Инструкции по сканированию, относящиеся к этому репозиторию. |
Чтобы узнать полный 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. Этот параметр
не задает количество независимых исполнителей стандартного сканирования внутри каждого глубокого сканирования;
настройте эти ограничения с помощью
[deep_scan]. Используйте --mode deep, чтобы выбрать глубокое сканирование для строк, в которых не задан собственный mode. Каждая строка CSV
по-прежнему может задавать собственный режим сканирования и область репозитория.
Задайте [deep_scan].max_time_hours, чтобы ограничить выполнение исполнителей для каждого глубокого сканирования в
кампании. Флаг --max-time-hours работает с scan, но не с bulk-scan.
CLI извлекает каждую закрепленную ревизию, сканирует выбранную цель, записывает результат и удаляет временную рабочую копию репозитория. Репозиторий считается обработанным только в том случае, если сканирование имеет полное покрытие и существуют все необходимые артефакты результатов.
Передача контекста и инструкций по безопасности
Добавляйте архитектурные документы, модели угроз или политики безопасности к каждому сканированию
с помощью --knowledge-base. Повторите флаг, чтобы добавить другие файлы или каталоги:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--knowledge-base /path/to/architecture.md \
--knowledge-base /path/to/security-policiesЧтобы добавить общие инструкции по сканированию или выполнить дополнительный запрос после каждого сканирования, укажите файлы с запросами:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--scan-prompt-file scan-instructions.md \
--post-scan-prompt-file follow-up.mdCLI добавляет значение prompt из CSV для каждого репозитория после общих
инструкций по сканированию. Дополнительные инструкции выполняются в том же аутентифицированном сеансе
после успешного сканирования, а также сканирования с неполным покрытием или ошибками, но не
после отмены или сканирования, достигшего предельной стоимости. Пути к файлам с запросами
разрешаются относительно текущего каталога.
Выбор модели и уровня рассуждений
По умолчанию при массовом сканировании используется 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.
Чтобы использовать OpenRouter или Fireworks, задайте соответственно OPENROUTER_API_KEY или FIREWORKS_API_KEY
и укажите --provider и --model. Сведения об учетных данных и
примеры см. в разделе Настройка OpenRouter или Fireworks
или Настройка Amazon
Bedrock.
Проверка результатов кампании
Выходной каталог содержит закрепленную конфигурацию кампании, журнал результатов только для добавления и отдельные артефакты для каждого репозитория и каждой попытки:
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содержит удобочитаемый отчет об одной попытке обработки репозитория.findings.jsonиcoverage.jsonсодержат обнаруженные в рамках этой попытки проблемы и проверенную область.
Экспортируйте результат одного завершенного сканирования репозитория, если вам нужен переносимый результат:
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 возобновит незавершенные сканирования репозиториев и пропустит завершенные. Сканирования
с неполным покрытием не выполняются повторно. Их результаты остаются доступными, а
команда завершается с кодом 2.
Не изменяйте реестр репозиториев, инструкции по сканированию и дополнительные инструкции для существующего выходного каталога. CLI проверяет закрепленный манифест и отклоняет другую кампанию. Используйте новый выходной каталог при изменении репозиториев, ревизий, областей, режимов сканирования либо общих или относящихся к репозиториям инструкций.
Повторные попытки при ошибках репозитория
Используйте --max-attempts, чтобы повторить обработку репозитория после временной ошибки извлечения или
сканирования:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--max-attempts 3По умолчанию для каждого репозитория выполняется одна попытка. Каждая попытка получает собственную квитанцию и каталог артефактов. Повторные попытки выполняются при ошибках извлечения, сбоях сканирования и отсутствии необходимых артефактов. Завершенные сканирования с неполным покрытием не выполняются повторно.
При массовом сканировании используются следующие коды завершения:
| Код завершения | Значение |
|---|---|
0 |
Все репозитории успешно обработаны. |
2 |
Репозиторий не удалось обработать, сканирование имело неполное покрытие либо команда столкнулась с ошибкой ввода или выполнения. |
130 |
Кампания прервана нажатием Ctrl-C. |
143 |
Кампания завершена сигналом SIGTERM. |
Массовое сканирование в Docker
Репозиторий Codex Security содержит усиленную конфигурацию Compose для автоматизированных кампаний CSV на хосте Linux с Docker. Хост должен поддерживать создание пространств имен непривилегированными пользователями.
Подключайте 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 .