Claude Code가 Context compaction을 통해 .env 파일을 읽어버림
Claude read my .env file through Context compaction
핵심 요약
Claude Code가 .env 파일의 보안 정보를 읽는 문제를 방지하기 위한 사용자들의 보안 설정 및 격리 전략 공유.
- 보안 격리 — 에이전트가 접근할 수 없는 별도 폴더나 OS 계정 사용 권장
- 권한 제한 — Deny Rules와 PreToolUse 훅은 보조적인 수단으로 활용
- 키 관리 — 개발용 키는 사용 한도를 설정하고 즉시 로테이션 수행
- 환경 격리 — Docker 컨테이너를 활용해 에이전트의 접근 권한을 원천 차단
맞아. 나 코딩 지식은 그냥 겉핥기 수준이고 독학으로 배운 거라 그래.
.env에 비밀값 저장하면 되는 줄 알았는데, 여기 서브레딧 눈팅해보니까 그게 아니더라고.
내 이해도가 맞는지, 그리고 이 '수정안'이 제대로 된 건지 좀 봐줘. 내가 뭘 놓쳤는지 알려주라. AI한테 물어보는 건 답이 아닌 거 같아서 여기 물어봄.
문제
- 이건 하네스(harness) 동작 문제라 claude.md에 지침을 적어놔도 ClaudeCode의 도구 호출이나 파일 읽기는 막을 수 있어도, 컨텍스트 압축이나 다른 '백그라운드' Claude 관리 작업까지는 못 막더라고.
- .env 파일 자체가 Claude Code가 작업 디렉토리에 처음 생성한 거라 '최근 수정된' 파일로 등록돼서 컨텍스트에 포함돼 버렸어.
수정안
-
워크플로우 수정 - .env를 수동으로 생성하고, 접근 차단해 둔 다른 폴더에 넣어두면 Glob/Grep 스캔이나 파일 복구 기능이 접근 못 하겠지.
-
지침 수준 - settings.json의 Deny Rules를 수정해서 읽기/수정/bash를 막아버리기 (가장 약한 방법)
{ "permissions": { "deny": [ "Read(/*.env)", "Read(/token.json)", "Read(~/.secrets/)", "Edit(/.env)", "Write(**/.env)", "Grep(**/*.env)", "Bash(cat .env)", "PowerShell(Get-Content .env)"
-
애플리케이션 수준 - PreToolUse 훅을 써서 Bash/Powershell/Read 입력이나 관련 명령어 변형들을 차단하기
-.env|token.json|.secrets| 변형:type, gc, python -c open(...) -
OS 수준 - 추가 안전장치로 샌드박스 도입.
- 난 AI 테스트용으로 PC를 따로 써서 그게 내 물리적 '샌드박스'였거든.
- 근데 진행 중인 프로젝트 안 깨지게 **제한된 사용자 계정(Limited User Account)**을 따로 만들어서 제대로 된 샌드박싱을 시도해 보려고.
이 정도면 충분할까?


