본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

방어 — 시크릿을 'private' 이 아니라 unreadable 로

~15 min · defense, keychain, ignore-files

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

믿을 만한 방어는 하나뿐이야. LLM 이 애초에 시크릿을 못 보게 하는 것. "공유하지 마" 라고 말하는 건 방어가 아니고.

Layered 전략

Layer하는 일방법
1. Agent 가 읽는 파일에 시크릿 두지 마context 에 없으면 반복할 수 없음OS keychain, secrets manager, repo 외부의 runtime env var 사용
2. Ignore 파일1번을 한 겹 더 받쳐주는 안전장치.cursorignore, .aiignore, .aiderignore
3. commit 된 config 에 placeholder진짜 값은 돌고 있는 프로세스에만 존재.env.exampleAPI_KEY=<FROM_KEYCHAIN>
4. 적극적 회전새더라도 번지는 범위를 제한OPENAI / Anthropic / GitHub 키: 분기 최소
5. Scoped 토큰토큰이 새도 번지는 범위가 작음Read-only DB 사용자, repo-scoped GitHub PAT

Code

.cursorignore (와 등가) — 항상 리스트할 것·text
# .cursorignore (와 등가)
.env
.env.*
*.pem
*.key
*.crt
*.p12
secrets/
credentials/
config/secrets.*
*.sqlite          # session 토큰, 비밀번호 hash 포함 가능
*.db
.ssh/
.aws/credentials
.gnupg/
Keychain 패턴 — runtime 에 시크릿 fetch·python
import keyring  # pip install keyring  -- macOS Keychain / Windows Credential Vault / Secret Service backed

def get_api_key() -> str:
    key = keyring.get_password("my-app", "OPENAI_API_KEY")
    if not key:
        raise RuntimeError("설정: keyring set my-app OPENAI_API_KEY")
    return key

# Commit 된 코드엔 이 함수만 존재.
# 진짜 키는 한 번 CLI 로 set: keyring set my-app OPENAI_API_KEY
.env.example 에 들어갈 거 (commit 됨)·text
# Commit 파일. 진짜 값은 runtime 에 keychain/keyring 에서.
OPENAI_API_KEY=<설정: keyring set my-app OPENAI_API_KEY>
ANTHROPIC_API_KEY=<설정: keyring set my-app ANTHROPIC_API_KEY>
DB_PASSWORD=<설정: keyring set my-app DB_PASSWORD>

External links

Exercise

오늘 프로젝트 하나에서 다섯 가지를 해봐. (1) keyring 을 설치해 (pip install keyring). (2) 지금 .env 에 있는 키를 전부 keyring set <app> OPENAI_API_KEY 로 옮겨. (3) .env 를 읽던 자리를 keyring 을 부르는 get_secret() 헬퍼로 바꿔. (4) .env 값은 <FROM_KEYCHAIN> placeholder 로 갈아. (5) .env.* 를 .cursorignore 에 추가해. 이제 agent 는 시크릿이 아니라 구조만 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.