5호망 단말에서 AI 코딩 에이전트를 안전하게 도입하는 방법
하나증권, Claude Code on Amazon Bedrock
| 통제 | 내용 |
|---|---|
| 전송 방향 | 연구개발망 → 전산실 단방향, 한시적 연결 |
| 사전 점검, 수신 검증 | 시큐어코딩 점검, 악성코드 검사. 수신 서버에서 무결성(해시), 바이너리 검증 |
| 파일 통제 | 유형, 용량 제한, 암호 걸린 파일 금지, 중요정보, 개인신용정보 포함 여부 검토 후 반출 |
| 통신, 기록 | IPS, 보안 모니터링. 망간 파일 이동 내역 기록, 보관, 주기 점검 |
| 비교축 | AI Playground | 연구개발망 | 5호망 + 혁신금융 |
|---|---|---|---|
| 성격 | 프롬프트, 모델 체험용 테스트 콘솔 | 독립된 정식 R&D 인프라 | 기존 IT 개발, 운영 단말에 AI 연계 |
| 법적 근거 | 비조치의견서 / 사내 정책 (확인 필요) | 전자금융감독규정 §15 연구개발망 예외 (조항 확인 필요) | 혁신금융서비스 지정 (망분리 특례) |
| 승인 주체 | CISO, 정보보호 조직 | 내부 정보보호위원회 | 금융위 지정 + 금보원 이행점검 |
| 허용 데이터 | 공개, 샘플 (고객정보 입력 금지) | 가명, 더미 (실데이터 금지) | 지정 범위 업무 데이터, 개인정보 필터링 전제 |
| 비교축 | AI Playground | 연구개발망 | 5호망 + 혁신금융 |
|---|---|---|---|
| 단말 | 인터넷망 PC | 연구개발 전용 단말 | 기존 5호 단말 + AI 이용 통제 |
| 네트워크 | 인터넷 → 중앙 Gateway | 독립 VPC, SSE로 인터넷 통제 | 전산실 Gateway → DX → PrivateLink |
| 소스코드 | 반입 불가 | 망연계 단방향 + 반출 승인 | 사내 코드 직접 활용, 입력 필터링, 로깅 |
| 운영계 연계 | 불가 | 불가 | 지정 범위 내 가능 |
| 비교축 | AI Playground | 연구개발망 | 5호망 + 혁신금융 |
|---|---|---|---|
| 체감 기간 | 수주 | 수개월 (내부 의결 + 망 구축) | 약 1년 (KB증권 사례) |
| Coding Agent 활용 | 학습, 실험 | 실데이터 없는 코드베이스 전면 활용 | 실제 업무 코드베이스 + 운영 도구 연계 |
| 통제 영역 | Playground | 연구개발망 | 5호망 | AWS 구현 수단 |
|---|---|---|---|---|
| 범위 (목적 한정) | ● | ● | ● | 이용 고지, 정보보호위원회 의결 |
| 독립 네트워크, 접속 경로 | ◐ | ● | ● | 전용 VPC, TGW RT 분리, DX / Client VPN / PrivateLink |
| 접속 단말, 인증, 권한 | ◐ | ● | ● | NAC, EDR, MDM + IAM Identity Center + IdP, MFA |
| 인터넷, SaaS | ● | ● | ● | SSE(SWG/CASB), Network Firewall (5호망은 경로 없음) |
| 망간 전송 | ○ | ● | ○ | 망연계 솔루션 (연구개발망 → 전산실) |
| 계정 분리 | ◐ | ● | ● | Control Tower, OU |
| 리전, 데이터 위치 | ● | ● | ● | SCP 리전 제한 (Bedrock은 승인 CRIS 프로파일만 예외) |
| 가명, 민감정보, 로그 | ● | ● | ● | Gateway DLP, Macie, CloudTrail → Log Archive, Invocation Logging |
| 비용, 사용량 | ● | ◐ | ● | Gateway Quota, AWS Budgets |
KB증권이 지나간 길, 그리고 5호 단말에서 Bedrock까지
AgentCore Gateway→ Lambda, ECS 컨테이너(MCP Hub)| 계정 분리 요인 | 계정 설계에 미친 영향 |
|---|---|
| 망 구분 (3호 / 5호 / 연구개발) | 망별 OU 분리, OU마다 다른 SCP |
| 그룹 공통 vs 계열사 단독 | 그룹 공통 AI 플랫폼 계정 + 계열사별 소비 계정 |
| 보안 조직 R&R | Audit, Log Archive 소유권, 위임 관리자 지정 |
| 데이터 등급 (가명 / 실데이터) | 데이터 계정과 추론 계정 분리 |
| 비용 배분 (본부 / 프로젝트) | 계정 = 과금 단위, 태그 정책 |
{
"Sid": "DenyOutsideSeoulExceptApprovedCRIS",
"Effect": "Deny",
"NotAction": ["iam:*", "sts:*", "organizations:*", "support:*"],
"Resource": "*",
"Condition": {
"StringNotEquals": { "aws:RequestedRegion": "ap-northeast-2" },
"ArnNotLike": { "bedrock:InferenceProfileArn":
"arn:aws:bedrock:ap-northeast-2:*:inference-profile/global.anthropic.claude-sonnet-5-5" }
}
}
{
"Sid": "OnlyGatewayRoleInvokesModels",
"Effect": "Deny",
"Action": "bedrock:InvokeModel*",
"Resource": "*",
"Condition": {
"ArnNotLike": { "aws:PrincipalArn":
"arn:aws:iam::*:role/llm-gateway-*" }
}
}
| 정책 | 목적 | Deny 대상 예 |
|---|---|---|
| 로깅 비활성화 금지 | 감사 무결성 | cloudtrail:StopLogging, cloudtrail:DeleteTrail, bedrock:DeleteModelInvocationLoggingConfiguration |
| 인터넷 경로 생성 금지 | 5호망 경로에 Egress 없음 | ec2:CreateInternetGateway, ec2:CreateNatGateway, ec2:CreateVpcPeeringConnection (Network 계정 제외) |
| VPC Endpoint 강제 | 사설 경로만 허용 | aws:SourceVpce 조건을 IAM, 리소스 정책에 적용 |
bedrock-runtime 모델 추론bedrock-agentcore.gateway MCP Hub (Gateway)bedrock-agent-runtime KB 조회bedrock-agentcore Runtime, Memory, Identitysts 역할 임시 자격증명logs, monitoring CloudWatchkms, secretsmanager 키, 비밀aoss, glue, states RAG, ETLClaude Code를 하나의 통제면에서, 실제로 돌려 본 데모와 함께
MCP Hub = AgentCore GatewayAgentCore Identity(AD)로 사내 시스템 호출, VPC egress → 온프렘
JWT 검증IdP: 사내 AD 연동 (Keycloak, Entra ID, Cognito 중 택1, 확인 필요)| 관문 | 무엇을 통제하나 | 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 공용) |
env | grep -c "^AWS_" → 0-rw-r--r-- root root managed-settings.jsonCannot add MCP server "github": not allowed by enterprise policydenied: ["curl -s https://example.com | head -n 1"]denied: ["Read .../customer-data/accounts.csv"]{"user":"dev01","decision":"ALLOW",...}| 시각 (UTC) | user | model | decision | reason | in / out 토큰 |
|---|---|---|---|---|---|
| 14:01:12 | dev01 | anthropic.claude-sonnet-5 | ALLOW | bedrock:200 | 28,950 / 87 |
| 14:01:18 | dev01 | anthropic.claude-sonnet-5 | BLOCK | dlp:주민등록번호 (9001**********) | - (전송 안 됨) |
| 14:01:25 | dev01 | global.anthropic.claude-opus-5-5 | BLOCK | model_not_allowed | - |
| 14:01:30 | (unknown) | anthropic.claude-sonnet-5 | BLOCK | auth | - |
| 구성요소 | 서울 리전 | 국외 처리 리스크 | 판단 |
|---|---|---|---|
| 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) | 가용 | - | 사용 |
온프렘과 비교하고, Claude Code가 사내 표준대로 일하게 만든다
| 항목 | 온프렘 (GPU + 오픈모델) | 5호망 혁신금융 + Bedrock | 연구개발망 + Bedrock |
|---|---|---|---|
| 규제 절차 | 가장 단순 (내부망) | 지정 + 이행점검 (약 1년) | 내부 의결 (수개월) |
| 코딩 품질 | 오픈모델 한계 | Claude 최신 모델 | 동일 |
| 데이터, 운영계 | 제약 적음, 연계 가능 | 필터링 전제, 지정 범위 내 | 실데이터 금지, 연계 불가 |
| 비용 구조 | GPU CAPEX + 전력 + 전문인력 | 사용량 OPEX | 사용량 OPEX |
| 최신성 | 직접 교체 | 모델 변경 간소화 절차 | 자율 |
| 권장 역할 | 고민감 소형 업무, 백업 경로 | 본 트랙 | 대안: 독립 인프라 신규 구축 필요 |
MCP Hub 등록| 통제 | 위치 | 구현 |
|---|---|---|
| 누가 | IdP + AgentCore Identity | AD 그룹 → 역할 |
| 무엇을 (모델) | LLM Gateway + SCP | allowlist |
| 무엇을 (도구) | AgentCore Gateway + Policy | 등록, 인가 |
| 얼마나 | Gateway Quota + Budgets | 3겹 비용 통제 |
| 기록 | Log Archive + SIEM | 감사 추적 |
AgentCore Observability| Code-based: 결정론적, 빠름, 저렴 | LLM-based: 확률적, 느림, 비쌈 | |
|---|---|---|
| 사전 안내 GUIDES | 신규 서비스 세팅 스크립트, 사내 CLI, 프로젝트 템플릿 | CLAUDE.md / AGENTS.md, Skills, 참조 문서 연결 (MCP) |
| 사후 피드백 SENSORS | Linter, 타입 체커, 유닛, 통합 테스트 | AI 코드 리뷰 에이전트, LLM 기반 품질 판정 |
# .claude/settings.json (프로젝트 하네스) { "hooks": { "PostToolUse": [ { "matcher": "Edit|Write|MultiEdit", "hooks": [ { "type": "command", "command": ".claude/hooks/run-tests.sh" } ] } ] } } # run-tests.sh: 실패 → exit 2, stderr가 Claude에게 전달 out=$(python3 -m pytest -q 2>&1) || { echo "$out" >&2; exit 2; } printf '{"systemMessage": "[SENSORS] pytest 통과"}'