Jalankan Codex Security di GitHub Actions
Pindai pull request dan repositori dengan Codex Security Action, simpan laporan, unggah SARIF, dan konfigurasikan penerapan kebijakan.
Jalankan Codex Security di GitHub Actions untuk meninjau perubahan pull request atau memindai repositori Anda secara terjadwal. Action menginstal CLI, menyimpan laporan terstruktur, serta menambahkan ringkasan job dan anotasi kode sumber. Mulailah dengan hasil yang bersifat saran, lalu konfigurasikan penerapan kebijakan setelah meninjau cakupan dan kualitas pemindaian.
Siapkan alur kerja
Menjalankan pemindaian memerlukan akses Codex Security. Untuk menambahkan API key OpenAI Anda:
- Di repositori GitHub Anda, buka Settings → Secrets and variables → Actions.
- Pilih New repository secret.
- Masukkan
CODEX_SECURITY_API_KEYsebagai nama dan tempel API key OpenAI Anda sebagai nilainya. Simpan rahasia tersebut.
Contoh alur kerja di bawah meneruskan rahasia ini ke Codex Security Action secara otomatis. Anda tidak perlu memasukkan API key ke dalam file alur kerja.
Jalankan alur kerja hanya untuk repositori dan pull request yang Anda percayai. Pemindaian menggunakan izin lokal runner dan tidak berhenti untuk meminta persetujuan. Tempatkan kredensial yang tidak terkait dan langkah deployment dalam job terpisah.
Tambahkan alur kerja GitHub Actions
Pindai repositori secara terjadwal
Alur kerja di bawah memindai cabang default Anda setiap Senin pukul 07:23 UTC. Anda juga dapat menjalankannya secara manual dari tab Actions GitHub. Alur kerja ini menggunakan runner Ubuntu 24.04 x64 yang dihosting GitHub dan menyiapkan sandbox yang diperlukan secara otomatis.
- Di repositori Anda, pilih Add file → Create new file.
- Beri nama file
.github/workflows/codex-security-repository.yml. - Tempel alur kerja di bawah dan commit ke cabang default Anda.
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 }}
Menyesuaikan runner: Action memerlukan Node.js 24 dan Python 3.11 atau lebih baru,
yang disediakan oleh runner ini. Penyiapan sandbox menginstal paket bubblewrap
dan memuat profil AppArmor yang disediakan sebelum pemindaian. Menginstal
paket saja tidak cukup pada runner ini.
Untuk menjalankan alur kerja secara manual, buka Actions → Codex Security repository → Run workflow. Buka eksekusi yang telah selesai untuk meninjau ringkasan, anotasi, dan laporan yang dapat diunduh.
Temuan hanya dilaporkan karena fail-on-severity bernilai none. Kesalahan pemindai dan
pelaporan wajib tetap menyebabkan job gagal.
Untuk memindai folder tertentu, tambahkan jalur literal yang dipisahkan baris baru ke blok
with pada langkah pemindaian:
paths: |
src/api
src/authJalur memerlukan scope: repository dan tidak memperluas pola glob. Untuk pemindaian diff, jangan sertakan
paths. Pertahankan persist-credentials: false dan jalankan pemindaian
segera setelah checkout.
Pindai perubahan pull request
Dengan rahasia yang sama, buat .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 }}Buka atau perbarui PR dari cabang dalam repositori yang sama. Action menggunakan riwayat lengkap untuk menemukan merge base yang tepat dan memindai perubahan hingga head PR yang di-checkout. Lihat pemeriksaan Codex Security di bagian Checks pada PR. Mulailah dengan temuan yang bersifat saran, lalu pilih kebijakan tingkat keparahan saat Anda siap menggunakan hasilnya sebagai syarat perubahan.
Contoh ini melewati PR dari fork dan PR yang dibuka oleh dependabot[bot]. Job yang dilewati
bukan bukti bahwa tinjauan keamanan telah dilakukan. Untuk menyertakan PR bot ini, hapus pengecualian
aktor dan juga
konfigurasikan CODEX_SECURITY_API_KEY sebagai rahasia
untuk dependabot[bot]. Action tidak mendukung pull_request_target atau workflow_run.
Pemindai membaca panduan SECURITY.md yang berlaku dari checkout,
termasuk perubahan kebijakan dalam PR. Tinjau perubahan tersebut bersama kode.
Konfigurasikan akses Daybreak opsional
Daybreak bersifat opsional. Kedua contoh alur kerja menggunakan gpt-6-sol. Jika
organisasi Anda telah disetujui untuk Trusted Access for
Cyber, hapus # sebelum
cyber-access-program dalam blok with pada langkah pemindaian:
model: gpt-6-sol
cyber-access-program: daybreak_blueGunakan API key dari proyek yang telah mengaktifkan Daybreak Blue dengan akses ke
gpt-6-sol.
Input program juga menerima standard. Tanpa akses Daybreak, gunakan
model yang dapat diakses API key Anda dengan perlindungan standar dan jangan sertakan
cyber-access-program atau tetapkan nilainya ke standard. Memilih model atau program
tidak memberikan akses. Lihat panduan akses Daybreak untuk Action.
Penolakan atau pemblokiran keamanan yang membatalkan pemindaian menyebabkan Action gagal, termasuk saat
fail-on-severity bernilai none. Input tersebut mengontrol kebijakan temuan, bukan kesalahan
pemindai.
Tetapkan anggaran pemindaian opsional
Kedua contoh alur kerja tidak menyertakan max-cost, sehingga tidak memiliki ambang penghentian
berdasarkan perkiraan biaya. Untuk menetapkannya, tambahkan jumlah USD positif melalui input max-cost.
Untuk pemindaian CLI langsung, gunakan --max-cost.
Batas biaya memerlukan dukungan informasi harga CLI untuk model yang dipilih.
Ambang perkiraan tersebut bukan batas pengeluaran mutlak: biaya permintaan yang sedang
berlangsung dapat melampauinya.
Tinjau temuan dan coverage.json jika pemindaian berhenti pada ambang batas. Lihat
opsi output dan kebijakan
untuk perilaku batas biaya.
Simpan laporan dan unggah SARIF
Contoh menetapkan upload-artifacts: "true" untuk menyimpan laporan yang dapat diunduh dengan
masa retensi tujuh hari. Laporan dapat berisi cuplikan kode sumber, bukti
kerentanan, dan detail remediasi. Pilih masa retensi dan akses repositori
yang sesuai untuk kode Anda. Action hanya mengunggah laporan tervalidasi
dalam daftar izinnya; jangan unggah output results-directory secara rekursif.
Pengunggahan SARIF bersifat opsional. Untuk repositori privat atau internal, aktifkan GitHub Code Security sebelum mengunggah. Ganti blok permissions pada alur kerja dengan:
permissions:
contents: read
security-events: write
actions: read # Required for private repositoriesLalu tambahkan langkah ini setelah pemindaian di salah satu alur kerja:
- 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-repositoryUntuk alur kerja PR, gunakan category: codex-security-pr agar setiap cakupan memiliki
kategori yang berbeda. Pertahankan id: security pada langkah pemindaian. Laporan yang lengkap dan tervalidasi
tetap tersedia untuk diunggah saat temuan menyebabkan kegagalan kebijakan tingkat keparahan.
SARIF tidak diunggah untuk pemindaian yang gagal atau terhenti, diff kosong, atau dry
run.
Lihat referensi input dan output Action untuk semua pengaturan, kolom status, dan jalur laporan.
Pilih kebijakan tingkat keparahan
Alur kerja GitHub dimulai dengan fail-on-severity: none. Untuk menyebabkan kegagalan jika ada temuan tingkat tinggi atau
kritis dari pemindaian yang selesai, ubah input langkah pemindaian:
fail-on-severity: highJadikan Codex Security sebagai pemeriksaan status wajib dalam aturan repositori Anda untuk
memblokir penggabungan saat job PR gagal. GitHub menganggap job yang dilewati secara bersyarat sebagai berhasil,
bahkan untuk pemeriksaan wajib. PR dari fork dan PR dari dependabot[bot] lolos
pemeriksaan ini tanpa pemindaian. Untuk memblokir pelewatan tersebut, wajibkan pemindaian yang
berhasil dan selesai.
Action mengikuti hasil CLI:
- Kode keluar
0menetapkanscan-status: completeddanpolicy-status: passed. - Kode keluar
1menetapkanscan-status: completeddanpolicy-status: failed; langkah gagal jika ada temuan yang mencapai atau melampaui tingkat keparahan yang dikonfigurasi. - Kode keluar
2atau proses yang terhenti menetapkanscan-status: faileddanpolicy-status: not-evaluated; langkah gagal. - Laporan wajib yang tidak valid atau tidak tersedia, checkout yang berubah, kegagalan mengunggah artefak yang diminta, dan kegagalan pembersihan runtime juga menyebabkan langkah gagal.
Pemindaian yang selesai berarti analisis yang dikonfigurasi memberikan hasil yang valid.
Pengecualian cakupan, investigasi yang ditunda, dan catatan lain dalam coverage.json
tidak menciptakan hasil pemindaian terpisah atau meniadakan penerapan kebijakan tingkat keparahan.
Selesainya pemindaian tidak menjamin bahwa setiap kerentanan telah ditemukan. Tinjau
coverage.json saat menilai hasil.
Wajibkan pemindaian yang berhasil dan selesai
Untuk kebijakan yang lebih ketat, tambahkan gerbang terpisah yang berjalan meskipun job pemindaian gagal atau dilewati GitHub. Langkah di dalam job pemindaian tidak dapat memeriksa job yang dilewati karena tidak ada satu pun langkahnya yang dijalankan.
Dalam alur kerja PR, tambahkan pemetaan outputs ini ke job security yang ada,
dengan indentasi yang sama seperti runs-on dan steps:
outputs:
scan-status: ${{ steps.security.outputs.scan-status }}Lalu tambahkan job ini di bawah jobs, sejajar dengan job security yang ada:
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" = completedJadikan Codex Security gate sebagai pemeriksaan status wajib untuk kebijakan ini. Gerbang ini
memerlukan job pemindaian yang berhasil dan scan-status: completed. Memeriksa
keduanya memastikan kegagalan kebijakan tingkat keparahan, pelaporan, dan pembersihan tetap menggagalkan pemeriksaan,
bahkan ketika pemindaian itu sendiri telah selesai.
Dengan pengecualian pada contoh, gerbang ini memblokir PR dari fork dan PR dari
dependabot[bot]. Gerbang ini juga memblokir diff kosong dan dry run, yang ditandai Action
sebagai skipped.
Gerbang ini tidak memindai PR yang dikecualikan. Pilih kebijakan ini hanya jika kasus tersebut
harus mencegah penggabungan.
Atasi masalah pemindaian
- Referensi Git tidak dikenal atau diff tidak sesuai harapan: Lakukan checkout head PR dengan
fetch-depth: 0. - Kesalahan saat memulai sandbox: Di Ubuntu 24.04, instal paket
bubblewrapdan muat profil AppArmor sebelum Action. Menginstal paket saja tidak memuat profil yang diperlukan. - Kredensial tidak tersedia: Pastikan
CODEX_SECURITY_API_KEYtersedia bagi alur kerja tepercaya dan dipetakan ke variabel lingkunganOPENAI_API_KEYpada langkah pemindaian. - Kesalahan penyiapan Python: Action memerlukan Python 3.11 atau lebih baru.
- Catatan cakupan: Tinjau pengecualian cakupan dan investigasi yang ditunda dalam
coverage.json. Catatan ini tidak menyebabkan kegagalan eksekusi atau meniadakan penerapan kebijakan tingkat keparahan. - SARIF tidak tersedia: Periksa
scan-status,report-status, dansarif-upload-ready. Jika SARIF opsional tidak tersedia, Action memberikan peringatan tanpa mengubah hasil pemindaian; kegagalan pengunggahan artefak yang diminta tetap menyebabkan job gagal. - Kesalahan pengunggahan SARIF: Pastikan organisasi Anda telah mengaktifkan GitHub Code
Security untuk repositori dan alur kerja memberikan izin
actions: read,contents: read, dansecurity-events: write.
Untuk setiap perintah, flag, artefak, dan kolom output, lihat referensi CLI. Untuk penyedia lain, lihat ringkasan CI/CD.