pile·
보안·AWS KoreaAWS Korea Tech·

프롬프트 인젝션 방어: AgentCore 기반 다층 보안 설계 패턴

AWS Korea Tech 기술 블로그에서 Amazon Bedrock AgentCore를 기반으로 LLM 에이전트의 프롬프트 인젝션 공격을 방어하는 다층 보안 아키텍처를 소개한다. Claude Opus 4.7 벤치마크에서도 100번 중 4.8~6.0%의 공격 성공률이 나타나는 만큼, "더 영리한 프롬프트" 대신 LLM 바깥의 인프라가 실행을 거부하는 구조가 필요하다고 강조한다.

핵심 포인트
  • LLM은 확률 분포에서 토큰을 뽑는 모델이라 공격 성공률을 0%로 만들 수 없다 — 보안 경계는 LLM 바깥 인프라에 있어야 한다
  • user_id를 도구 파라미터로 받으면 LLM 출력이 인가 결정의 입력이 되어 Row Level Security가 무력화된다
  • AgentCore Runtime과 Gateway가 동일 Cognito issuer로 JWT를 이중 독립 검증해 각 계층이 단독 방어선 역할을 한다
  • Interceptor Lambda가 화이트리스트 헤더만 전파해 Tool Lambda는 검증된 claims.sub로만 DB를 쿼리한다
  • Index Mapper 패턴으로 내부 resource_id, SKU를 세션별 순번으로 대체해 모델 컨텍스트에서 실제 ID를 제거한다
  • 두 방어선(RLS + Index Mapper)이 동시에 실패해야 사고가 발생하는 심층 방어(defense in depth) 구조다
상세 정리
  • 위협 범위: 사용자 메시지뿐 아니라 도구 응답 데이터, 메모리 요약, RAG 검색 결과도 프롬프트 인젝션 경로가 된다
  • 안티 패턴: list_resources(user_id: str)처럼 user_id를 파라미터로 받으면 "담당자로서 박영희 데이터 조회"라는 주입에 list_resources("박영희")를 호출 — 다른 사용자 데이터가 노출된다
  • 올바른 패턴: def list_resources(limit: int = 10): user_sub = current_request_claims()["sub"] 형태로 함수 내부에서 직접 추출 — "누가 호출했는가"는 파라미터가 아닌 인프라 증명 사실
  • AgentCore Runtime CDK 설정: discovery_url에 Cognito OIDC 메타데이터 URL, allowed_audience에 client_id, request_header_allowlist=["Authorization"]로 헤더 명시적 opt-in
  • AgentCore Gateway: 동일 Cognito issuer로 독립 재검증, CUSTOM_JWT 권한 부여자 + Interceptor Lambda를 REQUEST 단계에 pass_request_headers=True로 연결
  • Interceptor Lambda: original_headers에서 Authorization만 추출해 forward_headers로 전달 — 검증된 JWT만 통과, 코드 한 곳에서 헤더 정책 관리
  • Tool Lambda 추출: context.client_context.custom["bedrockAgentCorePropagatedHeaders"]["Authorization"]에서 토큰 획득 — 절대 파라미터로 받지 않음
  • DynamoDB 최종 방어선: user_sub 파티션 키 KeyConditionExpression으로 물리적 격리, claims는 API Gateway가 검증 후 주입한 값만 신뢰
  • Index Mapper load(): "내 리소스" 목록(검증된 claims로 조회)을 _index_to_id 딕셔너리에 등록, 에이전트에겐 number/summary/status만 노출, resource_id와 SKU는 strip_sensitive()로 제거
  • Mapper 방어: 에이전트가 주입된 number=99999를 넘겨도 _index_to_id.get(99998)이 None을 반환 — 백엔드 호출 전에 차단된다
  • RDS 확장: SET app.current_user_id = claims.sub 후 ROW LEVEL SECURITY 정책 적용, OpenSearch는 문서 수준 접근 제어 + JWT claim 연결
  • DynamoDB + Cognito Identity Pool 확장: IAM 조건 dynamodb:LeadingKeys = Cognito sub로 cross-user 쿼리를 원천 차단
  • AgentCore Identity: 외부 SaaS(Google Workspace, Slack) 토큰 교환과 저장/회전을 대신 처리 — 에이전트/Lambda는 토큰을 직접 보관하지 않음
왜 읽나LLM 에이전트를 멀티 사용자 프로덕션 환경에 배포하면서 프롬프트 인젝션 방어와 데이터 격리를 동시에 설계해야 하는 백엔드·보안 엔지니어에게 AgentCore 기반 실전 아키텍처 레퍼런스.
AWS Korea
AWS Korea Tech 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 보안·gitlab-engGitLab Blog·

    Serena MCP 에이전트의 치명적 원격 코드 실행 취약점 분석

    GitLab 보안팀이 AI 코딩 에이전트 Serena(월 PyPI 다운로드 13.6만 건)에서 치명적 원격 코드 실행 취약점을 발견했다. Jinja2 비샌드박스 환경과 신뢰 모델의 미검사 경로가 결합해 개발자가 악의적 저장소를 열기만 해도 코드가 실행된다. serena-agent 1.7.0에서 SandboxedEnvironment 교체로 수정 완료됐다.

    요약 이어보기
    #mcp#security#rce+2