3부: MCP Hub와 LLM Gateway

Claude Code를 하나의 통제면에서, 실제로 돌려 본 데모와 함께

모델은 Gateway로, 도구는 Hub로

전산실 (5호망): 개발자 단말
Claude Code터미널, IDE 플러그인
Codex같은 Gateway 뒤 보조 클라이언트
사내 MCP 서버, 지식 원본형상관리, 일정, 모니터링, 규정집, 코딩 표준
AI Platform 계정 (Workloads / Prod), DX 경유
LLM Gateway → VPC Endpoint → Bedrock + GuardrailsAnthropic / OpenAI 호환 API
MCP Hub = AgentCore GatewayAgentCore Identity(AD)로 사내 시스템 호출, VPC egress → 온프렘
감사 로그 → Log Archive
AI Project 계정 (컨텍스트 계층)
Vector: Bedrock Knowledge BasesOpenSearch Serverless, 규정, 가이드 문서 의미 검색
Graph: Neptune Analytics (+ AWS Context 검토)온톨로지, 관계 검색
ETL: Glue, Step Functions파싱, 정제, 가명화, 청킹. 원본은 온프렘에 유지
왜 컨텍스트 계층까지: Claude Code가 사내 규칙을 알고 코드를 쓰려면 컨텍스트가 필요합니다. 원본은 온프렘에 두고, ETL을 거친 Vector와 Graph만 MCP Hub를 통해 검색합니다.

MCP는 규약, Hub는 그 연결의 관문

통제 지점이 없음
클라이언트마다 MCP 서버를 따로 붙이면 누가 무엇에 붙었는지 알 수 없습니다.
신원 확인 불가
AI가 스스로 "나는 누구"라고 말하는 방식은 검증할 수 없습니다.
정책이 제각각
보안정책, 코딩표준을 개발자 설정에 맡기면 사람마다 다릅니다.
01 중앙 중계
모든 MCP 호출이 Hub를 한 번 거쳐 나갑니다. 감사 추적이 한 곳에 모입니다.
02 통합 인증
사내 AD 계정으로 로그인하고 토큰으로 신원을 증명합니다. 권한 없는 서버는 목록에 안 보입니다.
03 정책 주입
허용 도구, 호출 정책을 Hub가 서버 측에서 적용합니다. 개발자가 지울 수 없습니다.
MCP(Model Context Protocol): AI가 사내 시스템을 도구처럼 호출하게 해 주는 표준 인터페이스. Claude Code와 Codex 모두 지원합니다.

MCP Hub는 AgentCore Gateway로

MCP 클라이언트
Claude Code
Codex
사내 에이전트
Inbound Auth
JWT 검증IdP: 사내 AD 연동 (Keycloak, Entra ID, Cognito 중 택1, 확인 필요)
AgentCore Gateway (MCP Endpoint)
tools/list 분기: 사용자 권한별로 보이는 도구가 다름
Semantic tool search: 도구가 많아도 필요한 것만 노출
AgentCore Policy (Cedar): 호출 단위 허용 / 거부 (2026.03 GA)
Outbound Auth: AgentCore Identity: 자격증명 보관, 사용자 대신 호출. 단말에 자격증명이 남지 않음
Targets
Lambda사내 API 래핑
OpenAPI / Smithy형상관리, 배포, 티켓
기존 MCP 서버, KB 조회사내 문서, RAG
Observability: 호출 로그 → CloudWatch → Log Archive. 클라이언트는 Hub URL 하나만 압니다.
서울 리전: Gateway, Identity, Policy, Observability 가용(AgentCore 리전 문서). 전용 엔드포인트 bedrock-agentcore.gateway. 확인 필요: Policy 엔진의 처리 리전

단말 설정이 없으면 Hub도 무의미하다

관문무엇을 통제하나Claude Code 구현Codex 구현
① 등록 심사사내 MCP 서버를 Hub에 올릴지Hub 운영 조직이 기능, 권한 심사 후 Gateway Target 등록. 개발자 임의 추가 불가동일 (Hub 공용)
② 클라이언트 제한개발자 PC가 Hub 외의 MCP에 붙는 것/etc/claude-code/managed-settings.json: allowedMcpServers(serverUrl), allowManagedMcpServersOnly, allowManagedPermissionRulesOnly, env로 Bedrock, Gateway, 모델 고정관리 배포 config.toml: model_provider = 사내 Gateway, mcp_servers = Hub만 (강제 범위 PoC 확인 필요)
③ 호출 인가사용자별로 어떤 도구를 쓸 수 있나토큰 검증 후 허용 도구 목록만 반환, Policy로 호출 단위 판정동일 (Hub 공용)
②가 없으면 ①과 ③이 무의미: 단말 관리 설정 배포가 MCP 통제의 전제 조건입니다. 다음 장에서 실제로 동작하는 모습을 보여 드립니다.
관리 설정: 회사가 배포해 개발자가 바꿀 수 없게 고정한 도구 설정. 키 이름은 Claude Code 공식 문서(managed settings, managed MCP) 기준이며 데모에서 동작을 확인했습니다.

데모 V1: 관리 설정은 개발자가 못 푼다

실제 터미널 녹화 (2026.10.19 13:59 UTC), Claude Code 2.1.303, 서울 리전 Bedrock. 출력이 2초 넘게 없는 구간은 2초로 줄임, 무음

V1에서 확인한 여섯 가지

자격증명 없음
단말의 AWS_ 환경변수 0개, ~/.aws 없음
env | grep -c "^AWS_" → 0
설정은 root 소유
Gateway 주소, 모델, MCP 허용 목록, deny 규칙을 한 파일로
-rw-r--r-- root root managed-settings.json
Hub 외 MCP 차단
github, 로컬 npx 서버 추가 거부. Hub URL만 허용
Cannot add MCP server "github": not allowed by enterprise policy
사용자 allow 무시
~/.claude/settings.json 의 curl 허용이 적용되지 않음
denied: ["curl -s https://example.com | head -n 1"]
고객 데이터 두 겹
CLAUDE.md 규칙이 먼저 거절, 없는 폴더에서는 deny 규칙이 Read 차단
denied: ["Read .../customer-data/accounts.csv"]
호출은 실명으로
모든 모델 호출이 Gateway 감사 로그에 dev01로 기록
{"user":"dev01","decision":"ALLOW",...}
한계도 정직하게: Bash deny 규칙은 명령 문자열 기준이라 /usr/bin/curl, sh -c 같은 우회는 막지 못하고, Read deny는 스크립트가 직접 여는 파일을 막지 못합니다(공식 문서). 단말 방화벽과 sandbox로 OS 수준을 보강합니다.

요청 한 건이 남기는 흔적

IdP (AD)
개발자, Claude Code
LLM Gateway
Bedrock
AgentCore Gateway
사내 시스템
Log Archive
①AD 로그인 (MFA)
②단기 토큰
③모델 호출 + 토큰
④DLP, allowlist 통과 → PrivateLink
⑤모델 호출 로그 (user, model, 판정, 토큰)
⑥도구 호출 + 같은 토큰
⑦Policy 허용 → Identity 자격증명으로 호출
⑧도구 호출 로그
한 줄로 이어지는 감사: AI가 주장하는 신원이 아니라 토큰으로 확인합니다. 모델 호출과 도구 호출이 같은 신원으로 기록되어 "누가 무엇을 했는지"가 이어집니다.

도구는 개발자가, 통제는 Gateway가

클라이언트
Claude CodeCLAUDE_CODE_USE_BEDROCK
CodexResponses API
LLM Gateway
Bedrock InvokeModel 경로ANTHROPIC_BEDROCK_BASE_URL, CLAUDE_CODE_SKIP_BEDROCK_AUTH
OpenAI 호환 APIResponses / Chat Completions
① 인증, 인가
② DLP
③ 로깅
④ Quota
백엔드
ClaudeSonnet 5 서울 in-region, Opus 5.5, Sonnet 5.5 global CRIS
OpenAI on BedrockGPT-6 Astra, GPT-6.1 Sol 등 global / US CRIS만
(향후) 사내 모델온프렘 vLLM
Claude Code 연결 방식: Bedrock 모드에서 Gateway가 /model/{id}/invoke-with-response-stream 을 받아 자기 역할로 다시 서명합니다. 단말은 Gateway 토큰(Authorization: Bearer)만 가집니다.
리스크: OpenAI 모델은 서울 in-region이 없어 Codex는 CRIS가 전제입니다. 국외 처리와 DLP 범위를 신청서에 명시하고, 지정서에 "사용 도구"를 적는 경우 도구 추가 시 변경 신고가 필요한지 확인합니다.

데모 V2: Gateway가 막고, 남긴다

실제 터미널 녹화 (2026.10.19 14:01 UTC). Gateway는 데모용 Python 구현(약 150줄), Bedrock은 서울 리전 실호출. 대기 구간 2초로 줄임, 무음

감사 로그 한 줄이 점검 답변이 된다

시각 (UTC)usermodeldecisionreasonin / out 토큰
14:01:12dev01anthropic.claude-sonnet-5ALLOWbedrock:20028,950 / 87
14:01:18dev01anthropic.claude-sonnet-5BLOCKdlp:주민등록번호 (9001**********)- (전송 안 됨)
14:01:25dev01global.anthropic.claude-opus-5-5BLOCKmodel_not_allowed-
14:01:30(unknown)anthropic.claude-sonnet-5BLOCKauth-
누가 언제 어떤 모델에
user, ts, model. 토큰은 IdP 신원과 연결
DLP가 무엇을 막았나
reason과 마스킹된 샘플. 원문은 남기지 않음
얼마나 썼나
입출력 토큰. 사용자 Quota와 팀 예산의 원천 데이터
운영 환경에서는: 이 로그를 Log Archive(S3 Object Lock)로 보내고, Bedrock Invocation Logging, CloudTrail과 함께 사내 SIEM에 연동합니다. 4부 감사 추적에서 이어집니다.

원본은 온프렘, AI는 ETL 결과만

온프렘 전산실 (원본)
사내 규정집, 디자인 가이드
코딩 표준, 아키텍처, 기술문서
✕ AI에 원본 직접 연결 없음
DX 경유 승인 배치
AI Project 계정 (지식 계층)
ETL: Glue, Step Functions파싱, 정제, 가명화(규칙 기반), 청킹, 엔티티, 관계 추출, 등급 태깅 → S3 curated(KMS)
Bedrock Knowledge Bases + OpenSearch ServerlessVector: 문서 의미 검색 (서울 가용)
AWS Context지식 그래프: 데이터, 조직, 정책 관계 (서울 확인 필요)
Neptune Analytics그래프 질의: 규정 조항 간 관계 (서울 가용)
개발자 질의를 눌러 보세요
Claude Code는 AgentCore Gateway의 MCP 도구(search_policy, search_design, graph_query)로만 검색합니다.
서울 리전 기준 설계: Amazon Bedrock Managed Knowledge Base(2026.06 GA)와 Bedrock KB GraphRAG는 서울 리전 미지원(AWS 문서)이라, 기본안은 Bedrock Knowledge Bases + OpenSearch Serverless와 Neptune Analytics입니다. AWS Context는 서울 가용성 확인 필요. ETL 가명화 규칙은 컴플라이언스 검토 대상입니다.

국외 처리는 구성요소별로 확인한다

구성요소서울 리전국외 처리 리스크판단
Bedrock Runtime가용 (Sonnet 5 in-region)CRIS 사용 시 해외 리전 처리사용 (서울 기본, 신규 모델 CRIS)
AgentCore Runtime / Gateway / Identity / Observability가용-사용
AgentCore Policy가용정책 엔진 처리 리전 확인 필요확인 후 사용
AgentCore Memory / Evaluations가용교차 리전 추론 사용CRIS 허용 정책 범위에서 사용
Amazon Bedrock Managed Knowledge Base미지원 (2026.06 GA, 서울 미포함)-서울 기본안에서 제외
AWS Context (지식 그래프)확인 필요처리 리전, 데이터 위치확인 후 사용
Bedrock Knowledge Bases + OpenSearch Serverless가용임베딩 모델 리전 확인기본안 (Vector)
Knowledge Bases GraphRAG미지원-Neptune Analytics 직접 질의로 대체
Neptune Analytics가용-기본안 (Graph)
Glue, Step Functions (ETL)가용-사용
원본 제안서 35장을 2026.10.19 기준으로 갱신: AgentCore 지원 리전, Managed Knowledge Base 리전, Knowledge Bases 지원 리전 문서와 서울 리전 API 조회(Bedrock, Neptune Analytics).

3부 정리: 관문은 둘, 겹은 여럿

MCP Hub = AgentCore Gateway
등록 심사, 호출 인가, Identity로 자격증명 보관. 클라이언트는 Hub URL 하나만 압니다.
단말 관리 설정이 전제
V1: Hub 외 MCP, 사용자 allow, 고객 데이터 읽기를 개발자가 풀 수 없음을 확인했습니다.
LLM Gateway가 막고 남긴다
V2: DLP, 모델 allowlist, 토큰 인증, 실명 감사 로그를 서울 리전 실호출로 확인했습니다.
다음 4부: 온프렘과의 비교, 단일 통제면, 그리고 Claude Code가 사내 표준대로 일하게 만드는 하네스 데모입니다.