배경
발표 후 pm님 피드백: 시크릿(자격증명 등)이 코드나 로그에 섞이는 걸 사람이 눈으로 검색해서 확인하는 대신, push/commit 시점에 자동으로 감지·차단하는 자동화를 도입할 것.
핵심 개념: Secret Scanning
커밋·push되는 순간 시크릿 패턴(AWS 키 등)을 자동 탐지해서, 발견 시 커밋/push/PR을 막는 방식. 적용 시점에 따라 3단계로 나뉨.
| 단계 |
시점 |
강제성 |
| ① Pre-commit hook |
로컬에서 커밋 직전 |
낮음 (개발자별 설치 필요) |
| ② Push Protection |
GitHub 서버로 push 직전 |
높음 (조직 전체 강제) |
| ③ CI 파이프라인 스캔 |
push 이후 PR 단계 |
높음 (PR 자체를 막음) |
구현 방법 3가지
1. GitHub Secret Scanning + Push Protection (가장 쉬움)
- Settings > Code security 에서 활성화
- AWS 키 등 잘 알려진 패턴을 GitHub이 자동 감지, push 자체를 서버단에서 거부
- Private 레포는 플랜에 따라 제공 여부 다름 → 확인 필요
2. gitleaks + pre-commit hook (로컬)
gitleaks란?
- 오픈소스 시크릿 전용 스캐너 (Go 언어, Zach Rice 제작). Docker 다운로드 1600만+, GitHub 스타 17k+로 사실상 업계 표준
- 정규식 패턴(AWS 키
AKIA..., GitHub 토큰, Slack Webhook 등 기본 내장) + 엔트로피 분석(패턴 없는 무작위 문자열도 탐지) 두 방식 병행
- git 히스토리 전체를 스캔 → 지금은 지워졌어도 과거 커밋에 남아있는 값까지 찾아냄
- 결과에 파일명·줄번호·커밋 해시·작성자까지 표시됨
- 출력 형식: JSON, CSV, SARIF(GitHub 보안 탭 연동 가능), JUnit
- CLI / pre-commit hook / GitHub Action(공식
gitleaks-action) 세 가지 방식으로 사용 가능
- 개인 계정 레포는 무료, Organization 소유 레포는 무료 라이선스 키 별도 발급 필요 (gitleaks.io)
pip install pre-commit