선행: MCP 트리플 연결 개요(연결 후 권한). 설치는 설치 가이드(준비 중). 5분 요약은 아래 「자주 묻는 주제」로, 감사·리뷰용 전문은 본문 전체—MCP 권한 규범 v1.0이며 연결 튜토리얼이 아닙니다.
자주 묻는 주제(검색 · 해당 절로 이동)
- Claude Code MCP 권한은 어떻게 나누나? →
~/.claude.json최소 예 · 제어 평면 · 정책 표 - GitHub PAT를 최소화하려면? → GitHub MCP · PAT·scope
- CodeGraph MCP는 읽기 전용이 맞나? → CodeGraph 읽기 전용 · FAQ
- 프로덕션에 닿지 않게 하려면? → API 스테이징 읽기 · 신뢰 경계 · 체크리스트
- 권한을 줄였는데도 오류·이상 동작? → 사고 경로 · 예정 MCP 장애(L4-Q07)
복붙 절차만 필요하면 예정 운영 가이드(L4-Q08)가 담당하고, 이 글은 설계·보안 리뷰 깊이를 유지합니다.
읽는 순서(약 15분 · 규범 전문): 자주 묻는 주제 → 한 줄 모델 → 시스템 모델 → 신뢰 경계·데이터 흐름 → 정책 표·제어 평면 → 설정 조각 → 공격 체인. 팀 SOP·보안 검토 부록으로 인용 가능합니다.
한 줄 보안 모델
MCP 권한의 핵심은 Agent의 「볼 수 있음」과 「쓸 수 있음」을 분리하고, 기본을 읽기 전용으로 두는 것입니다. 쓰기·프로덕션 접근·CI 자격 증명은 신뢰 경계 밖이거나 별도 프로필에서만 명시적으로 켭니다.
기본 원칙
인덱스·컨텍스트는 읽기 전용. 쓰기는 별도 MCP·토큰·환경으로 격리. 코드 변경은 로컬 git. 프로덕션 API·Runner 비밀은 Claude MCP 설정에 넣지 않습니다.
위치: 감사 가능한 규범
「자주 묻는 주제」가 검색 의도를 절과 연결합니다. 여기서부터 보안 아키텍처 규범입니다. 연결 검증은 mcp__github__* 등록; 권한 검증은 호출 시 도달 범위: 경로, API, GitHub 리소스, 토큰 scope.
Claude Code, CodeGraph, GitHub Runner를 같은 Mac에 둘 때 MCP 토큰과 Runner 비밀은 분리합니다. GitHub App 개인 키 공유, 프로덕션 DATABASE_URL을 Agent 워크스페이스에 두는 것은 금지(원격 Mac은 Cloud Mac vs 로컬 Mac).
1층 · 시스템 모델
트리플 MCP는 역할별로 세 층이며, 각각 읽기·쓰기 위험 경계가 다릅니다(MCP 개요):
Claude Code 세션
│
├─ GitHub MCP → intent (요구: issue / PR / 댓글)
├─ CodeGraph MCP → context (변경 위치: impact / 심볼)
└─ API MCP → truth (검증: 스테이징 데이터 / 계약)
위험: intent 오쓰기는 협업면, context는 인덱스 오염, truth는 프로덕션·스테이징 혼동.배포: CodeGraph 5분은 「그래프 사용 가능」; 본문은 「Agent 앞에서 그래프·API 기본 읽기 전용」. ① 아키텍처, ③ 예정 위협 모델.
신뢰 경계
┌─────────────────────────────────────────────────────────┐ │ 영역 A · Claude Code(사용자 / Agent) │ │ ┌──────────── MCP 계층 ────────────┐ │ │ │ GitHub(intent) → 협업 시스템 │ │ │ │ CodeGraph(context) → 로컬 인덱스 │ │ │ │ API(truth) → 스테이징 DB │ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘ 기본 금지: ✗ 프로덕션 DB / API URL ✗ 저장소 전체에 쓰기 가능한 MCP ✗ Runner·CI 토큰을 mcpServers에 ✗ .env.production · 인접 프로젝트 비밀
데이터 흐름
프롬프트 → Claude Code → MCP 호출 → 외부 응답 → Agent 해석 → 부작용 제어점: 호출 전 RO·최소 scope / 응답 전 PII 마스킹 / 부작용 전 쓰기 서비스 비활성 시 실패
흔한 권한 사고
- GitHub MCP로 댓글·라벨 변경 → 댓글 연동 bot·자동 머지가 사람 확인 없이 pipeline 진행.
- CodeGraph·FS MCP가 repo에 쓰기 →
.codegraph/오염,codegraph_impact불신. - API MCP가 스테이징에 쓰기 → 프로덕션 mock과 동명 필드가 PR에 섞임.
- 워크스페이스 루트 전체 읽기 →
.env.production·monorepo 인접 비밀 유출.
2층 · 기본 정책
- 세션에는 읽기 전용 MCP만(
*-ro); 쓰기는 단기 토큰 + 별도 서비스. - CI·Runner는 MCP로 노출하지 않음.
- 프로덕션은 Agent에 보이지 않음.
정책 표(권장 기본)
| MCP / 리소스 | 역할 | 기본 | Claude | CI / Runner | 프로덕션 | 흔한 오류 |
|---|---|---|---|---|---|---|
| GitHub | intent | 읽기 PAT + issues; 쓰기는 단기 토큰 |
허용(RO) | MCP 금지 | 프로덕션 브랜치 쓰기 금지 | repo 전권을 ~/.claude.json에 상시 |
| CodeGraph | context | 프로세스 RO; query/impact만 | 허용 | 야간 인덱스 재구축 | — | 전체 repo 쓰기를 MCP에 |
| API / DB | truth | 스테이징 RO; SELECT만 | api-ro |
테스트용 api-rw 분리 |
금지 | 프로덕션 URL을 워크스페이스에 |
.env* |
— | MCP 비경유 | 전체 스캔 금지 | Runner만 | .env.production 금지 |
monorepo 루트 cwd |
| Runner 비밀 | — | mcpServers 밖 |
금지 | 허용 | MCP와 공유 금지 | App 키 공유 |
제어 평면
강제 지점: 1. ~/.claude.json 2. OS·FS(RO 마운트) 3. GitHub PAT/App 4. CI(프로덕션 URL 게이트) 5. Runner 금고(MCP env 분리)
GitHub MCP · PAT
- 일상:
repo(private 읽기),issues. - 자동화 쓰기: 단일 repo fine-grained PAT, 7–30일 만료.
저장은 환경 변수 우선. Cloud Mac은 인스턴스 secret, 로컬은 Keychain.
CodeGraph · 읽기 전용
.codegraph/는 빌드 산출물 취급.- MCP는 소스 읽기 전용; 재인덱스는 CI·수동.
codegraph_impact가 비면 권한보다 인덱스·cwd를 먼저 확인.
CodeGraph와 AI Coding Agent 참고. 정책은 동일—그래프 RO.
API MCP · 스테이징 읽기
- 베이스 URL은 스테이징만.
- DB는
SELECT; 쓰기는api-staging-rw등 별도 이름, Claude에서는 기본 off. - PII는 MCP에서 마스킹.
~/.claude.json 최소 예
{
"mcpServers": {
"github-readonly": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_MCP_TOKEN_READONLY}"
}
},
"codegraph": {
"command": "codegraph",
"args": ["mcp"],
"env": { "CODEGRAPH_READ_ONLY": "1" }
}
}
}배포 전 체크(요약)
- □ PAT 최소 scope·git 미포함
- □ 프로덕션 쓰기 API MCP 없음/기본 off
- □ CodeGraph는 impact/query만
- □ Cloud Mac cwd 단일 repo
- □ Runner·MCP 토큰 분리
오설정 공격 체인
효율을 위해 그럴듯한 설정이 Agent 연쇄 호출 후 권한을 넘습니다.
- PAT 재발급(RO + 기한 있는 쓰기).
- CodeGraph RO; 재인덱스는 Runner만.
api-ro/api-rw분리.
시리즈 관련 글
| 층 | 페이지 | qid | 예정 |
|---|---|---|---|
| 1 | 권한 규범(본문) | L4-Q04 | ✅ |
| 2 | 권한 설정 가이드 | L4-Q08 | 6/11 |
| 3 | 장애 | L4-Q07 | 6/12 |
Policy as Code
표의 행을 JSON 허용 목록·CI 게이트로 옮기는 단계입니다. 위협 모델 확정 후 실행 매뉴얼을 분리합니다.
FAQ
CodeGraph 읽기 전용?
권장. 인덱스는 CI·수동만.
GitHub 쓰기?
댓글 정도는 가능. merge/push는 단기 토큰+사람 확인.
Runner 비밀 공유?
불가.
MCP 안 됨?
문제 대조표.
문서 정보
버전: AI Agent 권한 규범 v1.0. 시리즈: Cloud Mac AI Stack · L4.
| # | 문서 | 산출물 | 상태 |
|---|---|---|---|
| ① | 아키텍처 | intent/context/truth | 개요 ✅ |
| ② | 권한 | 정책·흐름 | 본문 ✅ |
| ③ | 위협 모델 | STRIDE | 6/10 |
