Claude Code 보안 — API키를 안전하게 관리하는 법

GitHub에 API키가 올라가면 봇이 몇 분 안에 탐지한다. 실제로 청구서 폭탄을 맞은 사례가 넘쳐난다. 나도 Blogger API OAuth 설정 중에 credentials.json을 git add .로 스테이징한 적이 있다. CLAUDE.md에 “credentials 디렉토리 읽기 금지” 규칙을 넣고 나서야 이런 실수가 사라졌다. 실제로 적용하고 있는 보안 규칙 3가지를 정리한다.


Claude Code에서 특히 위험한 이유

일반 개발과 다른 점이 있다.
Claude Code는 파일을 직접 읽고 쓴다.
“이 API 연동해줘”라고 하면 코드에 API키를 하드코딩할 수 있다.
CLAUDE.md에 시크릿을 적는 실수도 생긴다.
Claude Code가 credentials 파일을 읽어서 로그에 출력할 수도 있다.

사람이 직접 코딩할 때보다 시크릿 노출 경로가 더 많다.


가장 흔한 실수

# 절대 이렇게 하지 마라
api_key = "sk-proj-xxxxxxxxxxxxx"

API키를 코드에 직접 쓰면:
1. GitHub에 올라간다
2. 봇이 탐지한다 (몇 분 이내)
3. 키가 악용된다
4. 청구서가 날아온다


안전한 관리 — 3가지 규칙

규칙 1: 별도 파일에 저장

~/.blogger-credentials/credentials.json
~/.threads-credentials/config.json

코드와 시크릿을 분리한다.
코드는 GitHub에 올리고
시크릿은 로컬에만 둔다.

환경변수로 접근하는 방법도 있다:

export BLOGGER_API_KEY="your-key-here"
api_key = os.environ["BLOGGER_API_KEY"]

규칙 2: 파일 권한 제한

chmod 600 ~/.blogger-credentials/credentials.json

600 = 본인만 읽기/쓰기 가능.
다른 사용자나 프로그램이 접근 못 한다.

규칙 3: .gitignore에 추가

# .gitignore
credentials.json
token.json
.env
*.key

실수로 git add해도 커밋되지 않는다.


Claude Code에게 보안 지시하기

CLAUDE.md에 보안 규칙을 적어두면
Claude Code가 자동으로 따른다:

## 보안 규칙
- API키는 환경변수 또는 별도 파일로만 접근
- 하드코딩된 시크릿 절대 금지
- credentials 파일은 chmod 600
- .gitignore에 시크릿 파일 패턴 추가
- 에러 메시지에 시크릿 노출 금지
- ~/.blogger-credentials/ 디렉토리 읽기 금지
- ~/.threads-credentials/ 디렉토리 읽기 금지

시크릿이 노출됐을 때

이미 GitHub에 올라갔다면:
1. 즉시 해당 키 폐기 (서비스 대시보드에서)
2. 새 키 발급
3. git history에서 삭제 (git filter-branch 또는 BFG Repo Cleaner)
4. 관련 서비스 로그에서 비정상 활동 확인


자주 묻는 질문

Claude Code에서 API키를 안전하게 관리하려면?

API키는 코드에 직접 쓰지 말고
별도 파일에 저장하고 chmod 600으로 권한을 제한하고
.gitignore에 추가한다.

API키가 GitHub에 올라가면 어떻게 되나?

봇이 즉시 탐지해서 악용한다.
올라간 키는 즉시 폐기하고 새로 발급해야 한다.


관련 시리즈 글


지금 해볼 것

터미널에서 grep -r "sk-" --include="*.py" .를 실행하라. 하드코딩된 API키가 있으면 즉시 환경변수로 바꾸고, .gitignore에 credentials.json, .env, *.key를 추가하라. 3분이면 끝난다.

댓글

이 블로그의 인기 게시물

[알고리즘] Suffix Tree

[기타IT] php설치

[Digital Signage] Xibo 설치