본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 25. 01:12

AWS MCP Server를 사용하여 AI 에이전트와 인간의 IAM 권한을 분리해 보기

요약

AWS MCP Server GA에 따라 도입된 IAM 컨텍스트 키를 활용하여 AI 에이전트와 인간의 권한을 분리하는 방법을 다룹니다. aws:ViaAWSMCPService와 aws:CalledViaAWSMCP 키를 통해 에이전트의 권한을 세밀하게 제어하고 보안 리스크를 관리하는 가이드를 제공합니다.

핵심 포인트

  • AWS MCP Server GA로 IAM 컨텍스트 키 지원 시작
  • aws:ViaAWSMCPService를 통한 MCP 경유 여부 판정
  • IAM 정책을 이용한 에이전트와 인간의 권한 분리
  • CloudTrail 로그를 통한 조작 주체 구분 가능

도입

배경

  • 2026년 5월 6일, AWS MCP Server가 일반 제공(GA, General Availability)을 시작했습니다.
  • AWS MCP Server를 이용함으로써, Claude Code 등의 AI 에이전트가 기존의 IAM 인증 정보를 사용하여 AWS 서비스에 직접 액세스할 수 있게 되었습니다.
  • 한편, "에이전트에게 AWS 액세스를 허용한다 = 인간과 동등한 권한을 부여한다"라는 상황은 보안상의 리스크가 될 수 있습니다. 에이전트가 의도치 않게 중요 리소스를 변경하거나 삭제하는 시나리오는 피하고 싶을 것입니다.
  • GA에 따라 IAM 컨텍스트 키(Context Key)
    aws:ViaAWSMCPService

/
aws:CalledViaAWSMCP

가 도입되었습니다. 이를 통해 "사람에 의한 조작"과 "AI 에이전트를 경유한 조작"을 IAM 정책(Policy) 레벨에서 명확하게 분리할 수 있게 되었습니다.

본 기사의 목적

  • AWS MCP Server가 IAM 요청에 어떻게 관여하는지를 인가 플로우(Authorization Flow) 관점에서 정리합니다.
  • 두 가지 IAM 컨텍스트 키(aws:ViaAWSMCPService / aws:CalledViaAWSMCP)의 차이점과 활용 방법을 해설합니다.
  • 이러한 컨텍스트 키를 IAM 정책에 설정함으로써, 사람에 의한 직접 조작과 AI 에이전트를 경유한 조작의 부여 권한을 명확하게 분리할 수 있음을 핸즈온(Hands-on)을 통해 확인합니다.
  • 동시에, CloudTrail 로그상에서도 양자를 구분하여 확인할 수 있음을 확인합니다.

대상 독자

  • AWS MCP Server 이용을 검토 중인 엔지니어 및 보안 담당자
  • AWS IAM의 기본 지식(정책 구조, 컨텍스트 키 개념)을 전제로 합니다.

AWS MCP Server 개요

AWS MCP Server는 AWS가 제공하는 매니지드(Managed) MCP 서버입니다. AI 에이전트는 이 MCP 서버를 이용함으로써 AWS API 오퍼레이션을 실행하거나, 최신 AWS 문서 정보를 취득할 수 있습니다. 참고로 문서 취득에는 인증이 필요하지 않습니다.

GA를 통해 IAM 컨텍스트 키를 지원하게 되었습니다. 이를 통해 표준 IAM 정책으로 세밀한 액세스 제어를 표현할 수 있습니다.

과제: 에이전트에게 부여할 권한을 어떻게 제한할 것인가

AWS MCP Server는 사용자의 기존 IAM 정책을 기반으로 동작합니다. 즉, AdministratorAccess를 가진 개발자가 AWS MCP Server를 사용하면, 에이전트도 동등한 조작이 가능합니다.

이는 다음과 같은 문제로 이어질 수 있습니다.

  • 에이전트가 실수로 운영(Production) 리소스를 변경하거나 삭제함
  • 예상치 못한 고비용 리소스가 생성됨
  • CloudTrail 상에서 "사람의 직접 조작"과 "에이전트를 경유한 조작"을 구분할 수 없음

이 문제를 해결하는 것이 모든 AWS 매니지드 MCP 서버 경유 요청에 자동으로 부여되는 두 가지 IAM 컨텍스트 키입니다.

두 가지 IAM 컨텍스트 키

AWS MCP Server는 S3, Lambda 등의 AWS 서비스로 요청을 전달할 때, 다음과 같은 두 가지 글로벌 컨텍스트 키를 자동으로 부여합니다.

컨텍스트 키타입용도
aws:ViaAWSMCPServiceBooleantrue / falseAWS 매니지드 MCP 서버 경유 여부 판정
aws:CalledViaAWSMCPString (단일 값)MCP 서버의 서비스 프린시펄(Service Principal) 이름특정 MCP 서버를 지정한 제어

aws:ViaAWSMCPService — 모든 MCP 경유 요청을 대상으로 함

Boolean 키입니다. AWS 매니지드 MCP 서버 중 어느 하나라도 경유한 요청에 대해 true가 설정됩니다. MCP 경유 여부라는 입도(Granularity)로 일괄 제어하고 싶을 때 사용합니다.

aws:CalledViaAWSMCP — 특정 MCP 서버로 한정

문자열(String) 키입니다. 요청을 전달한 MCP 서버의 서비스 주체(Service Principal) 이름을 보유합니다. 여러 개의 AWS 관리형 MCP 서버를 구분하여 사용하는 환경에서, 서버마다 서로 다른 액세스 제어(Access Control)를 구현하고 싶을 때 활용할 수 있습니다.

포인트: 세밀한 제어가 필요한 경우에는 aws:ViaAWSMCPService (일괄 제어)와 aws:CalledViaAWSMCP (서버 개별 제어)를 조합하여 설계하는 것을 권장합니다.

핸즈온

컨텍스트 키(Context Key)를 통한 권한 제어와 CloudTrail 로그를 통한 작업 구분을 실제로 확인합니다.

전제 조건

  • AWS CLI가 설치 및 설정되어 있을 것
  • Claude Code가 설치되어 있을 것
  • uv가 설치되어 있을 것 (AWS MCP Server의 프록시 실행에 사용)

검증 환경 구성

이번에는 다음과 같은 구성으로 핸즈온을 진행합니다.

  • IAM 사용자에게 S3에 대한 모든 작업을 허용하는 정책을 어태치(Attach)
  • 단, AWS MCP Server를 경유하는 경우 (aws:ViaAWSMCPService: true)에는 S3의 변경 계열 작업 (s3:CreateBucket 등)을 Deny
  • CLI 직접 작업으로는 S3 버킷 생성이 가능하지만, Claude Code + MCP 경유 시에는 조회만 가능하다는 것을 확인

Step 1: IAM 사용자 및 정책 생성

1-1. MCP 경유의 S3 변경 계열 작업을 Deny 하는 정책 생성

aws:ViaAWSMCPService를 조건으로, S3의 쓰기 계열 작업을 모두 Deny 합니다.

aws iam create-policy \
--policy-name DenyS3MutationViaMCPPolicy \
--policy-document '{
...

포인트: DenyAllow보다 우선됩니다. AWS 관리형 정책인 AmazonS3FullAccess를 변경하지 않고, Deny 정책을 추가하는 것만으로 MCP 경유 시에만 제어할 수 있습니다.

1-2. IAM 사용자 생성 및 정책 어태치

S3에 대한 모든 작업 허용에는 AWS 관리형 정책인 AmazonS3FullAccess를 사용합니다.

# IAM 사용자 생성
aws iam create-user --user-name mcp-handson-user
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
...

발급된 AccessKeyIdSecretAccessKey를 기록해 둡니다.

1-3. AWS CLI 프로필 설정

aws configure --profile mcp-handson
# AWS Access Key ID: <위에서 취득한 AccessKeyId>
# AWS Secret Access Key: <위에서 취득한 SecretAccessKey>
...

Step 2: CLI 직접 작업으로 S3 버킷 생성이 가능한지 확인

먼저, CLI에서 직접 S3 버킷을 생성할 수 있는지 확인합니다.

aws s3api create-bucket \
--profile mcp-handson \
--bucket mcp-handson-bucket-${RANDOM} \
...

다음과 같은 응답이 반환되면 생성에 성공한 것입니다.

{
"Location": "http://mcp-handson-bucket-XXXXX.s3.amazonaws.com/"
}

CLI (aws:ViaAWSMCPService가 부여되지 않는 직접 작업)에서는 AmazonS3FullAccess의 Allow가 그대로 적용되어 버킷을 생성할 수 있었습니다.

다음 단계에서 사용하기 위해, 생성한 버킷은 일단 삭제해 둡니다.

aws s3api delete-bucket \
--profile mcp-handson \
--bucket <생성한 버킷 이름>
...

Step 3: Claude Code 등의 AI 에이전트에 대한 AWS MCP Server 설정

Claude Code를 예로 들어, mcp-handson 프로파일을 사용하도록 AWS MCP Server를 설정합니다.

claude mcp add-json aws-mcp --scope user \
'{"command":"uvx","args":["mcp-proxy-for-aws@latest","https://aws-mcp.us-east-1.api.aws/mcp","--metadata","AWS_REGION=ap-northeast-1","--profile","mcp-handson"]}'

설정 후, Claude Code를 실행하고 /mcp 명령어로 aws-mcpconnected 상태인지 확인하십시오.

Step 4: MCP를 통한 S3 버킷 생성이 거부되는지 확인

Claude Code 상에서 다음과 같이 지시합니다.

ap-northeast-1에 mcp-handson-bucket이라는 이름의 S3 버킷을 생성해 주세요.

Claude Code가 call_aws 도구(s3:CreateBucket)를 호출하려고 하면, IAM 사용자 mcp-handson-user에 s3:CreateBucket에 대한 명시적 거부(Explicit Deny) 정책이 설정되어 있어 버킷을 생성할 수 없습니다.와 같은 에러가 반환됩니다.

DenyS3MutationViaMCPPolicy의 Deny가 발동하여, MCP를 통한 S3 버킷 생성이 거부되었습니다.

Step 5: MCP를 통한 S3 참조가 가능한지 확인

이어서 참조 계열 작업을 시도합니다. Claude Code 상에서 다음과 같이 지시합니다.

S3 버킷 목록을 가져와 주세요.

s3:ListAllMyBuckets는 Deny 대상이 아니므로, 정상적으로 응답이 반환됩니다.

총 X개의 S3 버킷이 존재합니다. 주요 항목을 카테고리별로 정리합니다:

Step 6: CloudTrail에서 작업을 구분하여 확인하기

AWS Management Console의 CloudTrail "이벤트 기록(Event history)"에서 해당 이벤트 레코드를 확인하면, MCP를 통한 작업에는 userAgent 필드에 aws-mcp가 기록되어 있습니다. MCP를 통한 CreateBucket 호출이 AccessDenied로 기록되어 있는 것을 확인할 수 있습니다. userAgent 필드를 확인함으로써, 해당 요청이 AWS MCP Server를 통한 것이었는지 사후에 특정할 수 있습니다.

핸즈온 요약

aws:ViaAWSMCPService 컨텍스트 키(Context Key)를 사용한 Deny 정책을 통해, 동일한 IAM 사용자라도 "사람의 직접 조작"과 "AI 에이전트를 통한 조작"의 권한을 명확하게 분리할 수 있음을 확인했습니다. 또한 CloudTrail 로그의 userAgent 필드를 사용하여 두 작업의 조작을 사후에 구분하여 쿼리하는 것도 가능합니다.

마치며

AWS MCP Server의 GA(General Availability)와 함께 도입된 IAM 컨텍스트 키는 AI 코딩 에이전트의 보안 거버넌스 측면에서 큰 진전이라고 생각합니다. 기존에는 "에이전트용 별도 IAM Role을 준비하는" 운영적인 대응이 필요했던 반면, 기존 정책에 Condition 블록을 추가하는 것만으로 선언적으로 제어할 수 있다는 점이 실용적인 측면에서 큰 발전입니다.

특히 aws:ViaAWSMCPService(일괄 제어)와 aws:CalledViaAWSMCP(서버 개별 제어)를 구분하여 사용할 수 있는 설계는, 향후 여러 AWS 관리형 MCP 서버가 늘어날 것을 고려했을 때도 확장성이 높은 구조라고 생각합니다.

우선 Deny 정책으로 변경 계열 작업을 차단하는 최소 구성부터 시작하여, CloudTrail 로그로 실제 작업을 관찰하며 단계적으로 튜닝해 나가는 접근 방식이 현실적이지 않을까 합니다.

참고

  • AWS MCP Server의 일반 제공 시작 | Amazon Web Services 블로그
  • Managed AWS MCP Servers를 위한 IAM 이해하기 | AWS Security Blog
  • Model Context Protocol을 사용하여 AWS 리소스에 대한 안전한 AI 에이전트 액세스 패턴 구축하기 | AWS Security Blog
  • AWS MCP Server 사용자 가이드 | Agent Toolkit for AWS
  • AWS MCP Server가 IAM과 작동하는 방식 | Agent Toolkit for AWS

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0