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 의 belt-and-suspenders.cursorignore, .aiignore, .aiderignore
3. commit 된 config 에 placeholder진짜 값은 돌고 있는 프로세스에만 존재.env.exampleAPI_KEY=<FROM_KEYCHAIN>
4. 적극적 회전leak 시 blast radius 제한OPENAI / Anthropic / GitHub 키: 분기 최소
5. Scoped 토큰leak 된 토큰도 작은 blast radiusRead-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

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

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