Codex Security in GitHub Actions ausführen
Scannen Sie Pull Requests und Repositorys mit der Codex Security Action, speichern Sie Berichte, laden Sie SARIF hoch und konfigurieren Sie die Richtliniendurchsetzung.
Führen Sie Codex Security in GitHub Actions aus, um Änderungen aus Pull Requests zu prüfen oder Ihr Repository nach einem Zeitplan zu scannen. Die Action installiert die CLI, speichert strukturierte Berichte und fügt eine Jobzusammenfassung sowie Quellcodeannotationen hinzu. Beginnen Sie mit Ergebnissen, die nur als Hinweise dienen, und konfigurieren Sie die Durchsetzung, nachdem Sie Abdeckung und Scanqualität geprüft haben.
Den Workflow vorbereiten
Für Scans benötigen Sie Zugriff auf Codex Security. So fügen Sie Ihren OpenAI API key hinzu:
- Öffnen Sie in Ihrem GitHub-Repository Settings → Secrets and variables → Actions.
- Wählen Sie New repository secret.
- Geben Sie
CODEX_SECURITY_API_KEYals Namen ein und fügen Sie Ihren OpenAI API key als Wert ein. Speichern Sie das Secret.
Die folgenden Workflowbeispiele übergeben dieses Secret automatisch an die Codex Security Action. Sie müssen Ihren API key nicht in die Workflowdatei eintragen.
Führen Sie den Workflow nur für Repositorys und Pull Requests aus, denen Sie vertrauen. Scans verwenden die lokalen Berechtigungen des Runners und warten nicht auf eine Genehmigung. Verwenden Sie separate Jobs für nicht zugehörige Zugangsdaten und Bereitstellungsschritte.
Den GitHub Actions-Workflow hinzufügen
Das Repository nach einem Zeitplan scannen
Der folgende Workflow scannt Ihren Standardbranch jeden Montag um 07:23 UTC. Sie können ihn auch manuell über die Registerkarte Actions in GitHub ausführen. Er verwendet einen von GitHub gehosteten Ubuntu 24.04-Runner mit x64-Architektur und richtet die erforderliche Sandbox automatisch ein.
- Wählen Sie in Ihrem Repository Add file → Create new file.
- Nennen Sie die Datei
.github/workflows/codex-security-repository.yml. - Fügen Sie den folgenden Workflow ein und committen Sie ihn in Ihren Standardbranch.
name: Codex Security repository
on:
workflow_dispatch:
schedule:
- cron: "23 7 * * 1" # Mondays at 07:23 UTC
permissions:
contents: read
jobs:
security:
runs-on: ubuntu-24.04
timeout-minutes: 120
steps:
- name: Set up the Ubuntu sandbox
run: |
sudo apt-get update
sudo apt-get install --yes bubblewrap apparmor-profiles
sudo apparmor_parser -r /usr/share/apparmor/extra-profiles/bwrap-userns-restrict
- name: Check out the repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Scan the repository
id: security
uses: openai/codex-security@3f61e5150981a5087c32e4395bbaa8ce5ce0c3e3 # action-v0.3.0
with:
scope: repository
model: gpt-6-sol
# For approved Daybreak Blue access, uncomment the next input.
# cyber-access-program: daybreak_blue
effort: high
fail-on-severity: none
upload-artifacts: "true"
env:
OPENAI_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}
Den Runner anpassen: Die Action benötigt Node.js 24 und Python 3.11 oder höher,
was dieser Runner bereitstellt. Die Sandboxeinrichtung installiert das Paket bubblewrap
und lädt vor dem Scan das mitgelieferte AppArmor-Profil. Die Installation
des Pakets allein reicht auf diesem Runner nicht aus.
Um den Workflow manuell auszuführen, öffnen Sie Actions → Codex Security repository → Run workflow. Öffnen Sie einen abgeschlossenen Lauf, um die Zusammenfassung, Annotationen und herunterladbaren Berichte zu prüfen.
Befunde werden nur gemeldet, da fail-on-severity auf none gesetzt ist. Fehler des Scanners und
bei der erforderlichen Berichterstellung lassen den Job weiterhin fehlschlagen.
Um ausgewählte Ordner zu scannen, fügen Sie durch Zeilenumbrüche getrennte wörtliche Pfade in den
Block with des Scanschritts ein:
paths: |
src/api
src/authPfade erfordern scope: repository; Glob-Muster werden nicht expandiert. Lassen Sie bei Diff-Scans
paths weg. Behalten Sie persist-credentials: false bei und führen Sie den Scan
unmittelbar nach dem Checkout aus.
Änderungen aus Pull Requests scannen
Erstellen Sie unter Verwendung desselben Secrets .github/workflows/codex-security-pr.yml:
name: Codex Security PR
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
permissions:
contents: read
concurrency:
group: codex-security-pr-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
security:
if: github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]'
name: Codex Security
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- name: Set up the Ubuntu sandbox
run: |
sudo apt-get update
sudo apt-get install --yes bubblewrap apparmor-profiles
sudo apparmor_parser -r /usr/share/apparmor/extra-profiles/bwrap-userns-restrict
- name: Check out the pull request
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
- name: Scan PR changes
id: security
uses: openai/codex-security@3f61e5150981a5087c32e4395bbaa8ce5ce0c3e3 # action-v0.3.0
with:
scope: diff
model: gpt-6-sol
# For approved Daybreak Blue access, uncomment the next input.
# cyber-access-program: daybreak_blue
effort: high
fail-on-severity: none
upload-artifacts: "true"
env:
OPENAI_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}Öffnen oder aktualisieren Sie einen PR aus einem Branch desselben Repositorys. Die Action verwendet den vollständigen Verlauf, um die exakte Merge-Basis zu ermitteln, und scannt Änderungen bis zum ausgecheckten PR-Head. Sehen Sie sich die Prüfung Codex Security im PR unter Checks an. Beginnen Sie mit Befunden, die nur als Hinweise dienen, und wählen Sie eine Schweregradrichtlinie, sobald Sie Änderungen auf dieser Grundlage zulassen oder blockieren möchten.
Dieses Beispiel überspringt Fork-PRs und PRs, die von dependabot[bot] geöffnet wurden. Ein übersprungener Job
ist kein Nachweis einer Sicherheitsprüfung. Um diese Bot-PRs einzubeziehen, entfernen Sie den Ausschluss des Akteurs
und
konfigurieren Sie CODEX_SECURITY_API_KEY zusätzlich als Secret
für dependabot[bot]. Die Action unterstützt weder pull_request_target noch workflow_run.
Der Scanner liest die geltenden SECURITY.md-Anweisungen aus dem Checkout,
einschließlich Richtlinienänderungen im PR. Prüfen Sie diese Änderungen zusammen mit dem Code.
Optionalen Daybreak-Zugriff konfigurieren
Daybreak ist optional. Beide Workflowbeispiele verwenden gpt-6-sol. Wenn Ihre
Organisation für Trusted Access for
Cyber zugelassen wurde, entfernen Sie # vor
cyber-access-program im Block with des Scanschritts:
model: gpt-6-sol
cyber-access-program: daybreak_blueVerwenden Sie einen API key aus einem Projekt, für das Daybreak Blue aktiviert ist und das Zugriff auf
gpt-6-sol hat.
Die Programmeingabe akzeptiert auch standard. Verwenden Sie ohne Daybreak-Zugriff ein
Modell, auf das Ihr API key unter den standardmäßigen Schutzmaßnahmen zugreifen kann, und lassen Sie
cyber-access-program weg oder setzen Sie es auf standard. Die Auswahl eines Modells oder Programms
gewährt keinen Zugriff. Siehe die Hinweise zum Daybreak-Zugriff der Action.
Eine Ablehnung oder Sicherheitsblockierung, die den Scan abbricht, lässt die Action fehlschlagen, auch wenn
fail-on-severity auf none gesetzt ist. Diese Eingabe steuert die Befundrichtlinie, nicht die Behandlung von Scannerfehlern.
Ein optionales Scanbudget festlegen
Beide Workflowbeispiele lassen max-cost weg und haben daher keinen Schwellenwert für die geschätzten Kosten, bei dessen Erreichen der Scan anhält. Um einen festzulegen, geben Sie über die Eingabe max-cost einen positiven USD-Betrag an.
Für direkte CLI-Scans verwenden Sie --max-cost.
Das Kostenlimit erfordert, dass die CLI Preisdaten für das ausgewählte Modell unterstützt. Der
geschätzte Schwellenwert ist keine feste Ausgabenobergrenze: Die Kosten bereits laufender
Anfragen können ihn überschreiten.
Prüfen Sie die Befunde und coverage.json, wenn ein Scan am Schwellenwert anhält. Unter
Ausgabe- und Richtlinienoptionen
finden Sie Informationen zum Verhalten des Kostenlimits.
Berichte speichern und SARIF hochladen
Die Beispiele setzen upload-artifacts: "true", um herunterladbare Berichte mit einer
Aufbewahrungsdauer von sieben Tagen zu speichern. Berichte können Quellcodeausschnitte, Schwachstellennachweise und Details zur Behebung enthalten. Wählen Sie eine Aufbewahrungsdauer und einen Repositoryzugriff, die zu Ihrem Code passen. Die Action lädt nur validierte Berichte
von ihrer Positivliste hoch; laden Sie ihre results-directory-Ausgabe nicht rekursiv hoch.
Der SARIF-Upload ist optional. Aktivieren Sie für private oder interne Repositorys vor dem Upload GitHub Code Security. Ersetzen Sie den Block permissions des Workflows durch:
permissions:
contents: read
security-events: write
actions: read # Required for private repositoriesFügen Sie dann in einem der beiden Workflows diesen Schritt nach dem Scan hinzu:
- name: Upload security findings
if: ${{ always() && steps.security.outputs.sarif-upload-ready == 'true' }}
uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
with:
sarif_file: ${{ steps.security.outputs.sarif-path }}
sha: ${{ steps.security.outputs.scanned-sha }}
ref: ${{ steps.security.outputs.analysis-ref }}
category: codex-security-repositoryVerwenden Sie für den PR-Workflow category: codex-security-pr, damit jeder Prüfumfang eine
eigene Kategorie hat. Behalten Sie id: security im Scanschritt bei. Vollständige, validierte
Berichte bleiben für den Upload verfügbar, wenn Befunde die Schweregradrichtlinie verletzen.
Bei fehlgeschlagenen oder unterbrochenen Scans, leeren Diffs oder Testläufen wird SARIF nicht
hochgeladen.
Alle Einstellungen, Statusfelder und Berichtspfade finden Sie in der Referenz zu Ein- und Ausgaben der Action.
Eine Schweregradrichtlinie auswählen
Die GitHub-Workflows beginnen mit fail-on-severity: none. Damit hohe oder
kritische Befunde aus einem abgeschlossenen Scan zum Fehlschlagen führen, ändern Sie die Eingabe des Scanschritts:
fail-on-severity: highLegen Sie Codex Security in Ihren Repositoryregeln als erforderliche Statusprüfung fest, um
Merges zu blockieren, wenn der PR-Job fehlschlägt. GitHub behandelt einen aufgrund einer Bedingung übersprungenen Job als erfolgreich,
auch bei erforderlichen Prüfungen. Fork-PRs und PRs von dependabot[bot] bestehen diese
Prüfung ohne Scan. Um solche übersprungenen Scans zu blockieren, verlangen Sie einen
erfolgreichen, abgeschlossenen Scan.
Die Action folgt dem CLI-Ergebnis:
- Exitcode
0setztscan-status: completedundpolicy-status: passed. - Exitcode
1setztscan-status: completedundpolicy-status: failed; der Schritt schlägt bei Befunden fehl, deren Schweregrad den konfigurierten Schwellenwert erreicht oder überschreitet. - Exitcode
2oder ein unterbrochener Prozess setztscan-status: failedundpolicy-status: not-evaluated; der Schritt schlägt fehl. - Ungültige oder fehlende erforderliche Berichte, ein veränderter Checkout, Fehler beim Hochladen angeforderter Artefakte und Fehler bei der Laufzeitbereinigung lassen den Schritt ebenfalls fehlschlagen.
Ein abgeschlossener Scan bedeutet, dass die konfigurierte Analyse ein gültiges Ergebnis erzeugt hat.
Ausnahmen vom Prüfumfang, zurückgestellte Untersuchungen und andere Hinweise in coverage.json
erzeugen kein separates Scanergebnis und umgehen die Schweregradrichtlinie nicht.
Der Abschluss bestätigt nicht, dass jede Schwachstelle gefunden wurde. Prüfen Sie
coverage.json bei der Bewertung des Ergebnisses.
Einen erfolgreichen, abgeschlossenen Scan verlangen
Für eine strengere Richtlinie fügen Sie eine separate Freigabeprüfung hinzu, die auch ausgeführt wird, wenn der Scanjob fehlschlägt oder GitHub ihn überspringt. Ein Schritt innerhalb des Scanjobs kann einen übersprungenen Job nicht prüfen, da keiner seiner Schritte ausgeführt wird.
Fügen Sie im PR-Workflow diese outputs-Zuordnung zum vorhandenen Job security hinzu,
auf derselben Einrückungsebene wie runs-on und steps:
outputs:
scan-status: ${{ steps.security.outputs.scan-status }}Fügen Sie dann diesen Job unter jobs neben dem vorhandenen Job security hinzu:
security-gate:
name: Codex Security gate
needs: security
if: ${{ always() }}
runs-on: ubuntu-24.04
steps:
- name: Require a successful, completed scan
env:
SCAN_RESULT: ${{ needs.security.result }}
SCAN_STATUS: ${{ needs.security.outputs.scan-status }}
run: test "$SCAN_RESULT" = success && test "$SCAN_STATUS" = completedLegen Sie Codex Security gate als erforderliche Statusprüfung für diese Richtlinie fest. Sie
verlangt sowohl einen erfolgreichen Scanjob als auch scan-status: completed. Durch die Prüfung
beider Bedingungen bleiben Fehler aus der Schweregradrichtlinie, der Berichterstellung und der Bereinigung wirksam,
selbst wenn der Scan selbst abgeschlossen wurde.
Mit den Ausschlüssen des Beispiels blockiert diese Freigabeprüfung Fork-PRs und PRs von
dependabot[bot]. Sie blockiert auch leere Diffs und Testläufe, die die Action
als skipped kennzeichnet.
Die Freigabeprüfung scannt ausgeschlossene PRs nicht. Wählen Sie diese Richtlinie nur, wenn diese Fälle
einen Merge verhindern sollen.
Scanprobleme beheben
- Unbekannte Git-Referenz oder unerwarteter Diff: Checken Sie den PR-Head mit
fetch-depth: 0aus. - Fehler beim Start der Sandbox: Installieren Sie unter Ubuntu 24.04 das Paket
bubblewrapund laden Sie vor der Action das AppArmor-Profil. Die Installation des Pakets allein lädt das erforderliche Profil nicht. - Fehlende Zugangsdaten: Stellen Sie sicher, dass
CODEX_SECURITY_API_KEYdem vertrauenswürdigen Workflow zur Verfügung steht und der UmgebungsvariablenOPENAI_API_KEYdes Scanschritts zugeordnet ist. - Fehler bei der Python-Einrichtung: Die Action benötigt Python 3.11 oder höher.
- Hinweise zur Abdeckung: Prüfen Sie Ausnahmen vom Prüfumfang und zurückgestellte Untersuchungen in
coverage.json. Diese Hinweise verursachen keine Ausführungsfehler und umgehen die Schweregradrichtlinie nicht. - Fehlendes SARIF: Prüfen Sie
scan-status,report-statusundsarif-upload-ready. Fehlt optionales SARIF, gibt die Action eine Warnung aus, ohne das Scanergebnis zu ändern; Fehler beim angeforderten Artefaktupload lassen den Job weiterhin fehlschlagen. - Fehler beim SARIF-Upload: Stellen Sie sicher, dass Ihre Organisation GitHub Code
Security für das Repository aktiviert hat und der Workflow
actions: read,contents: readundsecurity-events: writegewährt.
Alle Befehle, Flags, Artefakte und Ausgabefelder finden Sie in der CLI-Referenz. Informationen zu anderen Anbietern finden Sie in der CI/CD-Übersicht.