API 키가 한 번 새면 가장 빠르게는 분 단위로 자동 스캐너가 가져간다.
AI 도구가 만들어 준 코드를 그대로 배포한 SaaS·사이드 프로젝트에서 가장 흔하게 발견되는 결함 1순위가 시크릿 노출이다.
이 글은 1~3년차 개발자가 30초 안에 1차 점검하고, 새고 있다면 즉시 해야 할 4가지를 정리한 가이드다.
한눈에 보는 API 키 유출
Q. AI 코드에 왜 키가 박히나요? A. AI 도구는 동작 가능한 코드를 우선 보여 주기 때문에 환경변수 분리·시크릿 매니저 분리를 생략하는 경우가 많습니다. 검토 없이 배포하면 그대로 운영에 박힙니다. Q. 한 번 GitHub에 올라간 키는 회전만 하면 되나요? A. 회전이 가장 우선이지만, git 히스토리도 함께 정리해야 합니다. 히스토리에 남으면 자동 스캐너가 다시 가져갑니다. Q. 클라이언트 JS에 박힌 키는 위험한가요? A. 빌드만 하면 모든 사용자가 다운로드합니다. 백엔드 프록시로 즉시 옮기고 노출 키는 회전해야 합니다.30초 자가 점검 — 새고 있는지부터 확인
다음 6가지 명령어로 1차 점검 가능. 하나라도 결과가 나오면 새고 있다.
# 1. .env 파일이 외부에 노출돼 있는지
curl -I https://yourdomain.com/.env
# 2. /.git/ 디렉터리 외부 접근
curl https://yourdomain.com/.git/HEAD
# 3. git 히스토리에 시크릿 키워드
git log --all --full-history -p -S 'API_KEY\|SECRET\|sk_live_'
# 4. 빌드된 JS 번들에 키 박힘
grep -r "sk_live_\|service_role\|SECRET" ./dist ./build 2>/dev/null
# 5. config 파일이 웹 루트에 노출
curl https://yourdomain.com/config.json
# 6. 백업 파일 노출
curl -I https://yourdomain.com/backup.sql
30초 안에 자동으로 잡고 싶다면 CodeScan 무료 스캔으로 1·2·5·6번을 한 번에 확인할 수 있다.
새고 있다면 즉시 할 4가지
1. 키 회전 (가장 먼저)
발견된 키를 즉시 회전한다. 파일을 지우는 것이 아니라 키 자체를 무효화한다.
- AWS: IAM → 액세스 키 비활성화 → 신규 발급
- Stripe/Toss: 대시보드 → API 키 → 재발급
- OpenAI/Anthropic: API 키 → revoke + 재발급
- DB 비밀번호: 즉시 변경, 옛 비밀번호 사용 세션 종료
2. git 히스토리 정리
# BFG 또는 git filter-repo로 히스토리 삭제
git filter-repo --invert-paths --path .env --force
git push origin --force --all
협업 중인 레포는 동료에게 fresh clone 안내 필수.
3. 새는 경로 차단
- 웹서버에서
.env,.git/,*.sql,config.json차단 (nginx/Apache/Cloudflare 단) - 빌드 산출물에서 시크릿 검색해 백엔드 프록시로 이동
4. 모니터링 켜기
키 회전 후 이상 사용량 알람을 켠다. 옛 키로 시도가 들어오면 추적 단서가 된다.
- AWS: CloudWatch + Cost Anomaly Detection
- Stripe: 대시보드 알람
- OpenAI/Anthropic: 사용량 임계 알람
AI 코딩 환경에서 시크릿 관리 표준
| 단계 | 도구 | 비고 |
|---|---|---|
| 로컬 개발 | .env + .gitignore | .env.example만 커밋 |
| 협업 공유 | 1Password CLI / doppler / dotenv-vault | 평문 채팅 금지 |
| 빌드 | CI 시크릿 환경변수 | 빌드 로그 출력 금지 |
| 배포 | 시크릿 매니저 (AWS SM, GCP SM, Vault) | 클라이언트 번들 진입 금지 |
| 운영 | 분기 1회 키 회전 | 사용 안 하는 키 제거 |
자주 발견되는 실수 5가지
.env를.gitignore에 넣었지만 옛날 커밋에 이미 들어가 있음- CI 빌드 로그에 환경변수가 그대로 출력
- 프론트 번들에
NEXT_PUBLIC_*로 시크릿 키 노출 - Slack·노션·메일에 평문 키 공유 후 검색 가능 상태로 보존
- 개발/프로덕션 키를 한 개로 사용
이 중 3개 이상 해당되면 분기 안에 시크릿 운영 정책 갱신이 필요하다.
오늘 시작할 5가지
- CodeScan 30초 무료 스캔 —
.env·.git·민감 파일 자동 점검 gitleaks/trufflehog로 git 히스토리 1회 스캔- 빌드 산출물에서
sk_live_·SECRET·service_role검색 - 발견 시 즉시 키 회전 → 히스토리 정리 → 차단 → 알람 4단계 실행
- CI에 pre-commit/push hook으로 시크릿 차단 자동화
CodeScan이 잡아 주는 것
CodeScan은 보안 실무 10년 레드팀이 운영하는 보안 점검 SaaS다.
URL 하나만 넣으면 외부 노출 자산·환경변수·민감 파일·헤더 17종을 자동 점검한다.
- 무료 스캔: 외부 노출 1차 점검 무료
- 정기 스캔: 코드 변경마다 자동 점검 + 알람
- 사고 시: 외부 노출 차단 가이드 + 키 회전 체크리스트 동봉
다음에 해야 할 한 가지
API 키 유출은 가장 흔하고 가장 빠르게 악용되는 결함이다.
👉 지금 CodeScan 30초 무료 스캔에 자사 도메인을 입력하세요.
새고 있는지 30초 안에 확인하고, 새고 있다면 위 4가지 액션을 즉시 시작하면 된다.
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ {"@type":"Question","name":"AI 코드에 왜 API 키가 박히나요?","acceptedAnswer":{"@type":"Answer","text":"AI 도구가 동작 가능한 코드를 우선 보여 주면서 환경변수 분리를 생략하는 경우가 많고, 검토 없이 배포되면 그대로 운영에 박힙니다."}}, {"@type":"Question","name":"GitHub에 한 번 올라간 키는 어떻게 처리하나요?","acceptedAnswer":{"@type":"Answer","text":"키 회전이 가장 우선이며, git 히스토리도 filter-repo·BFG로 정리해야 자동 스캐너 재수집을 막습니다."}}, {"@type":"Question","name":"클라이언트 JS에 박힌 키는 위험한가요?","acceptedAnswer":{"@type":"Answer","text":"빌드만 하면 모든 사용자가 다운로드합니다. 백엔드 프록시로 즉시 이동하고 노출 키는 회전해야 합니다."}} ] }