AWS Bedrock에서 Claude Code 실행하기: IAM, SCP 및 대부분의 팀이 잘못 이해하는 거버넌스 모델
요약
본 가이드는 AWS Bedrock에서 Claude Code를 엔터프라이즈 환경에 배포하는 복잡한 거버넌스 모델을 다룹니다. 단순한 환경 변수 설정만으로는 부족하며, IAM 정책 최적화, SCP 활용, 그리고 모델 접근 프로비저닝 전략 등 여러 계층의 고려가 필수적입니다. 특히, 적절한 권한 범위 제한과 프롬프트 캐싱을 통해 비용 효율성을 극대화하는 방법을 제시합니다.
핵심 포인트
- IAM은 최소 필수 권한만 부여하고 `Resource: *`를 피해야 합니다.
- SCP는 조직 전체의 거버넌스를 관리하며, IAM과 함께 3중 보안 모델을 구축할 수 있습니다.
- 모델 접근은 사전에 요청하여 프로비저닝 지연으로 인한 배포 차단을 방지해야 합니다.
- 프롬프트 캐싱을 활용하면 장시간 세션에서 입력 비용을 크게 절감할 수 있습니다.
iqraa.tech의 허가로 교차 게시됨 — 전체 가이드에는 완전한 IAM 정책, SCP 예제 및 300명 엔지니어 배포 사례 연구가 포함되어 있습니다.
Claude Code는 Bedrock 모드를 가지고 있습니다. 대부분의 사람들은 단일 환경 변수인 CLAUDE_CODE_USE_BEDROCK=1을 통해 이 사실을 알게 되고, 이것이 전부라고 가정합니다. 그렇지 않습니다. 이 환경 변수는 전원 스위치일 뿐이며, IAM 정책, 리전 전략, 그리고 이를 둘러싼 거버넌스 계층이야말로 거의 모든 엔터프라이즈 배포가 실제로 막히는 지점입니다.
아래에서 배포 과정을 처음부터 끝까지 설명합니다. 이는 단순히
IAM 정책 (최소 필수 권한, bedrock:* 아님)
{
"Version": "2012-10-17",
"Statement": [
...
사람들이 자주 실수하는 두 가지 세부 사항:
InvokeModelWithResponseStream은InvokeModel과는 별도의 권한입니다. 이것을 놓치면 Claude Code는 일회성 호출(one-shot invocation)로 폴백됩니다. 여전히 작동하지만, 느리게 느껴지고 스트리밍 세션이 실패합니다.- Bedrock invoke 작업에 절대
Resource: "*"를 부여하지 마세요. Bedrock은 또한 Llama, Mistral, Nova 및 자체 비용/보안 프로필을 가진 마켓플레이스 모델들을 호스팅합니다. 권한 범위를anthropic.claude-*ARN으로만 제한하여, 유출된 자격 증명의 피해 범위가 Anthropic 모델로만 국한되도록 하세요.
아무도 예상하지 못하는 문제점: 모델 접근 프로비저닝
새 AWS 계정에는 Claude 모델이 기본적으로 활성화되어 있지 않습니다. Bedrock 콘솔에서 모델별, 리전별로 명시적으로 액세스를 요청해야 하며, 승인에는 콘솔이 암시하는 것과 달리 몇 분에서 몇 시간까지 걸릴 수 있습니다. 오늘 Sonnet만 사용하더라도 Haiku, Sonnet, 그리고 Opus에 대한 액세스를 미리 요청하여, 향후 모델 전환 시 배포 도중에 여러 시간의 프로비저닝 지연으로 인해 차단되는 일이 없도록 하세요.
SCP: 실제 거버넌스 계층
IAM은 역할이 _무엇을 할 수 있는지_를 제어하는 반면, SCP는 조직 전체 AWS 계정이 무엇을 할 수 있는지를 제어합니다:
{
"Version": "2012-10-17",
"Statement": [
...
여기에 IAM 권한 경계(permission boundary)와 위의 인라인 호출 정책을 결합하면, 이미 IAM과 KMS를 위해 사용하는 세 가지 계층의 성숙한 샵 모델을 얻게 됩니다: SCP가 조직을 관리하고, 권한 경계가 개발자가 생성할 수 있는 것을 관리하며, 인라인 정책이 Claude Code 자체가 호출할 수 있는 것을 관리합니다.
실제로 숫자를 움직이는 비용 레버
헤드라인당 토큰 요율은 상한선일 뿐이며, 실제로 지불하게 될 금액은 아닙니다:
- 프롬프트 캐싱 (Prompt caching) — 캐시된 토큰은 일반 입력 요율의 약 10%로 청구됩니다. 안정적인
CLAUDE.md파일(동적 타임스탬프/빌드 ID 없음)을 사용하면 캐시 적중률이 높아지며, 이만으로도 장시간 세션에서 유효 입력 비용을 일상적으로 80-90% 절감할 수 있습니다. - 모델 라우팅 (Model routing) — Haiku의 입력 비용은 M 토큰당 $0.80인 반면, Opus는 M 토큰당 $15입니다. 30일 후 실제 모델 혼합 비율을 검토하세요. Opus가 과도하게 사용된다는 것은 보통
CLAUDE.md가 Sonnet에게 충분한 구조를 제공하지 못하거나, 개발자가 기본 설정을 수동으로 재정의했음을 의미합니다. - CI에서
--max-budget-usd설정 — 하드 캡(hard cap)이 없다면, 실패한 파이프라인 내에서 통제 불능 상태가 된 에이전트 루프가 초기 도입 단계에서 가장 흔하게 비용 초과를 유발하는 원인입니다. $5/파이프라인은 일상적인 작업에 합리적인 기본값입니다.
인증 (Auth): 이미 가지고 있는 자격 증명 체인을 사용하세요
Bedrock에서 실행되는 Claude Code는 표준 AWS SDK 자격 증명 체인을 따릅니다. 별도의 사용자 지정 인증을 구축할 필요가 없습니다. 개발자 워크스테이션용 AWS SSO (aws sso login, 단기 자격 증명, 단일 해지 지점), CI/CD를 위한 OIDC 페더레이션 (GitHub Actions/GitLab/Jenkins 모두 지원하며 정적 비밀 키가 필요 없음), EC2/ECS의 인스턴스/작업 역할(instance/task roles)을 사용합니다. 만약 장기 액세스 키에 의존하고 있다면, 수동으로 처리하지 말고 Secrets Manager와 로테이터 Lambda를 통해 분기별로 순환시키세요.
가장 많은 지원 티켓을 생성하는 다섯 가지 실패 모드
- 모델 접근 요청 누락 (몇 시간 동안 실행 차단)
- 잘못된 모델 ID 형식 — 직접(direct) vs. 교차 리전(cross-region) vs. 단일 리전 Bedrock ID
InvokeModelWithResponseStream누락- Bedrock 호출 액션에 대한 와일드카드 IAM 리소스
- SCP 지역 고정화 부재 — 아무것도 막지 않으면 개발자는 의도하지 않은 리전에서 호출할 것입니다.
전체 상세 내용은 다음 링크를 참고하세요: Claude Code AWS Bedrock: Enterprise Setup Guide
IAM/SCP 세부 사항에 대한 질문은 댓글에서 기꺼이 답변드리겠습니다. 저도 이러한 배포를 몇 번 설정해 본 경험이 있는데, 모델 접근 지연(model-access delay) 때문에 처음에는 모두 당황하더라고요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기