Codex Security CLI·SDK·CI의 실패 판정
보안 스캔을 CI에 넣을 때 가장 위험한 오해는 ‘job이 초록색이니 스캔도 끝났다’는 판단입니다. 제외된 작업, 입력 검사만 한 작업, 보고서 게시만 성공한 작업은 완성된 scan과 다릅니다. 검사 실행과 정책 판정을 분리해 설계합니다.
공식 문서를 참고한 비공식 한국어 가이드입니다. 설치·인증·스캔·CI 등록은 실행하지 않았습니다. 명시적으로 허가된 저장소에서만 수행해야 하며 이 사이트에는 GitHub Actions를 추가하지 않습니다.
Scanner는 OS 권한으로 실행
standalone 명령은 codex-security, alias는 cs, 배포 package는 @openai/codex-security입니다. 공식 quickstart의 Node.js와 Python 요구사항을 먼저 확인합니다. 일반 Codex CLI의 runtime 요구와 같다고 가정하지 않습니다.
중요한 차이는 로컬 scan이 OS 사용자 권한으로 실행되고 승인을 기다리며 멈추지 않는다는 점입니다. 불필요한 credentials를 제거한 전용 환경에서 범위와 출력 위치를 제한합니다. 다음은 형식만 설명하는 합성 예시이며 실제 대상과 경로를 검토한 뒤에만 실행합니다.
codex-security scan /path/authorized-repository \
--auth chatgpt --output-dir /private/scan-results
결과에는 소스와 취약점 세부 정보가 들어갈 수 있습니다. 저장소 밖의 비공개 출력 디렉터리를 사용하고 보존 기간·독자를 정합니다. --dry-run 성공은 인증과 Python runtime의 실제 scan 성공을 증명하지 않습니다.
종료 코드와 coverage
현재 공식 quickstart는 완료 0, 설정한 severity threshold 충족 1, 입력·실행·무결성·필수 출력 실패 2를 구분합니다. 기본적으로 finding severity만으로 실패하지 않으므로 정책 threshold를 확인해야 합니다. 중단/종료 signal은 별도 실패로 처리합니다.
0은 무취약성이나 모든 파일 검토의 증명이 아닙니다. scan manifest의 범위와 warning, 보고서와 coverage를 확인합니다. 합성 소비자에서는 완료+정책 통과, 완료+정책 실패, 실행 실패, 누락 결과, 중단을 각각 시험합니다.
TypeScript SDK의 책임
Security SDK는 일반 Codex SDK와 다른 제품입니다. CodexSecurity의 run()과 preflight(), close()를 사용하는 구조이며 finally에서 runtime을 닫습니다.
preflight()는 로컬 입력을 확인할 뿐 credential 로딩이나 Python/plugin 가용성까지 검증하지 않습니다. run()의 completed 결과에서도 scope·warnings를 읽어야 합니다. 인증 필요·잘못된 대상·출력 위치·비용 한도·불완전 scan·계약 오류를 구분하고 부분 결과를 성공으로 반환하지 않습니다.
GitHub의 skipped gate
공식 GitHub Action 안내는 severity 정책과 scan-status를 별도로 제공합니다. GitHub가 조건부 skipped job을 성공으로 취급할 수 있으므로 ‘필수 check’ 하나만 지정해도 실제 scan을 보장하지 못할 수 있습니다.
더 엄격한 gate는 job 성공과 scan-status: completed를 모두 확인합니다. 이 선택은 제외된 fork/bot PR, empty diff, dry-run을 막을 수 있지만 그 대상을 새로 scan해 주는 것은 아닙니다. 신뢰할 수 없는 PR에 secret을 넘기려는 우회로 해결하지 않습니다.
GitLab 보고와 정책 분리
공식 GitLab 예제는 성공한 report job으로 SARIF를 게시하고 별도 gate가 원래 scanner의 정책 결과를 복원합니다. 보고서가 업로드됐다고 finding threshold를 통과한 것은 아닙니다. 실행/출력 실패나 export 오류도 막아야 합니다.
자동 remediation과 draft MR 게시에는 추가 권한·기존 회귀 테스트·credential 없는 코드 실행 환경이 필요합니다. 초기에는 scan-only로 시작합니다. --max-cost는 추정 비용 guardrail이지 hard billing cap이 아니므로 시간·동시 실행·사용량도 관찰합니다. 전체 옵션과 provider별 도입은 공식 참조를 따릅니다.
공식 한국어 도움말: ChatGPT 플랜과 Codex에서 계정별 이용 안내를 확인할 수 있습니다. 이 글은 해당 도움말의 공식 번역이 아니며 계정 조건과 요금은 공식 안내를 우선합니다.
추가 공식 참조
다음은 관련 세부 기능과 전체 참조 문서입니다. 아래 항목은 원문 전체를 한국어로 설명하거나 실행 검증한 범위가 아닙니다. 적용 조건과 정확한 옵션은 공식 원문을 확인하세요.