View a markdown version of this page

정책 세션 및 자격 증명 전파 - Amazon Bedrock AgentCore

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

정책 세션 및 자격 증명 전파

시간 정책을 사용하면 현재 요청뿐만 아니라 세션 내에서 발생한 과거 이벤트를 기반으로 규칙을 정의할 수 있습니다. 다음과 같은 제약 조건을 적용할 수 있습니다.

  • “세션당 최대 5개의 도구 호출 허용”

  • “이 세션에서 도구 A를 먼저 호출하지 않는 한 도구 B에 대한 액세스 차단”

  • “이 세션에서 민감한 데이터에 액세스한 후 외부 API 호출 거부”

정책 세션은 여러 게이트웨이 호출을 단일 논리적 세션으로 그룹화합니다. 세션은 시간 정책 규칙이 평가되는 경계입니다.

작동 방식

  • 애플리케이션은 헤더를 사용하여 요청에 대한 세션 식별자를 게이트웨이에 전달합니다. x-amzn-bedrock-agentcore-policy-session-id

  • 게이트웨이는 세션을 호출자의 인증된 자격 증명(보안 주체)에 바인딩합니다.

  • 각 간접 호출에서 게이트웨이는 해당 세션에 누적된 작업 기록을 기준으로 시간 정책을 평가합니다.

  • 다중 홉 시나리오(게이트웨이 → 런타임 → 게이트웨이)에서 플랫폼은 서비스 관리형 헤더를 통해 세션 및 호출자 자격 증명을 자동으로 전파합니다X-Amz-Bedrock-AgentCore-Identity-WAT. 에이전트 코드는이 헤더를 관리할 필요가 없습니다. AgentCore는이 헤더를 투명하게 처리합니다.

중요

다중 홉 시나리오는 단일 AWS 계정 및 리전 내에서만 작동합니다. AgentCore는 계정 또는 리전 간 다중 홉 시나리오를 지원하지 않습니다.

정책 세션 ID 전달

게이트웨이에 대한 요청에 x-amzn-bedrock-agentcore-policy-session-id 헤더를 포함합니다. 세션 ID를 생성하여 첫 번째 요청부터 모든 요청에 전송해야 합니다. 게이트웨이는 사용자를 대신하여 세션 ID를 생성하지 않습니다. 값은 세션을 식별하는 문자열이며 UUIDv4를 사용하는 것이 좋습니다. 동일한 세션의 모든 요청과 함께 동일한 ID를 전송합니다.

헤더를 생략하거나 빈 값을 보내면 게이트웨이가 세션을 설정하지 않습니다. 연결된 정책 엔진에 시간 정책이 포함된 경우 세션 ID가 없는 요청은 검증 오류와 함께 실패합니다.

허용되는 형식과 게이트웨이가 이를 검증하는 방법은 헤더 확인 및 비 런타임 배포를 참조하세요.

첫 번째 요청(세션 생성):

curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "x-amzn-bedrock-agentcore-policy-session-id: 12345678-1234-1234-1234-123456789012" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "PaymentTool___transfer_funds", "arguments": { "amount": 500, "recipient": "account-789" } } }'

후속 요청(세션 계속):

curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "x-amzn-bedrock-agentcore-policy-session-id: 12345678-1234-1234-1234-123456789012" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "PaymentTool___transfer_funds", "arguments": { "amount": 600, "recipient": "account-456" } } }'

임시 정책이 각 세션을 1회 전송으로 제한하는 경우 이전 예제에 표시된 두 번째 요청은 거부됩니다.

Python 예제:

import requests import uuid GATEWAY_URL = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp" ACCESS_TOKEN = "YOUR_ACCESS_TOKEN" # Generate or reuse a session ID for the conversation session_id = str(uuid.uuid4()) # for example, "12345678-1234-1234-1234-123456789012" def call_tool(tool_name, arguments, session_id): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {ACCESS_TOKEN}", "x-amzn-bedrock-agentcore-policy-session-id": session_id } payload = { "jsonrpc": "2.0", "id": "request-1", "method": "tools/call", "params": { "name": tool_name, "arguments": arguments } } response = requests.post(GATEWAY_URL, headers=headers, json=payload) return response.json() # First call - allowed result1 = call_tool( "PaymentTool___transfer_funds", {"amount": 500, "recipient": "account-789"}, session_id ) print(result1) # Success # Second call in same session - may be denied by temporal policy result2 = call_tool( "PaymentTool___transfer_funds", {"amount": 600, "recipient": "account-456"}, session_id ) print(result2) # Denied if rate-limit policy applies

세션 수명 주기

속성 값

만들기

세션 ID를 사용하여 첫 번째 요청에 암시적임

유휴 제한 시간

마지막 활동으로부터 24시간

명시적 종료

지원되지 않음, 세션은 자연스럽게 만료됩니다.

최대 수명

유휴 제한 시간으로 바인딩됨

다중 홉 시나리오에서의 자격 증명 전파

에이전트 아키텍처에서는 요청이 여러 AgentCore 프리미티브를 통과하는 경우가 많습니다.

User -> Gateway1 -> Runtime (agent) -> Gateway1 (tool call) -> Target

임시 정책이 이러한 홉에서 작동하려면 세션 자격 증명을 보존해야 합니다. AgentCore는 워크로드 자격 증명 체인(WIC)을 사용하여 이를 자동으로 처리합니다.

  • 오리진 게이트웨이: 게이트웨이는 sessionId 및 (원본 호출자의 자격 증명)를 포함하는 워크로드 액세스 토큰callerPrincipal(WAT)을 민트합니다.

  • 게이트웨이 → 런타임: WAT가 내부 X-Amz-Bedrock-AgentCore-Identity-WAT 헤더를 통해 전달됩니다.

  • 런타임 → 게이트웨이(도구 호출): 런타임은 인바운드 WAT를 새 WAT(체인 확장)와 교환하여 sessionId 및를 자동으로 보존합니다callerPrincipal. 확장 WAT는 아웃바운드 요청에 찍혀 있습니다.

  • 수신 게이트웨이: 동일한 세션에 대해 임시 정책을 평가하여 연속성을 유지합니다.

이것이 의미하는 바는 다음과 같습니다.

  • 게이트웨이x-amzn-bedrock-agentcore-policy-session-id에 대한 초기 요청만 전달하면 됩니다. 플랫폼은 모든 다운스트림 홉에 대한 전파를 처리합니다.

  • 에이전트 코드는 헤더를 읽거나 수정하거나 전달할 필요가 없습니다. X-Amz-Bedrock-AgentCore-Identity-WAT 이는 AgentCore 인프라(런타임, 게이트웨이 및 AgentCore 자격 증명 서비스)에서 관리합니다.

  • 세션 ID는 WAT 내에서 주행하며 중개자가 스푸핑하거나 변조할 수 없습니다.

End-to-end 흐름:

User            Gateway1            Runtime            Gateway1            Target
 |  POST /mcp      |                   |                   |                  |
 |  + session-id X |                   |                   |                  |
 |  + Authorization|                   |                   |                  |
 |---------------->|                   |                   |                  |
 |                 | mint WAT1         |                   |                  |
 |                 | (sid=X, cpn=user) |                   |                  |
 |                 |  forward + WAT1   |                   |                  |
 |                 |------------------>|                   |                  |
 |                 |                   |exchange WAT1->WAT2|                  |
 |                 |                   | (sid=X preserved) |                  |
 |                 |                   | tool call + WAT2  |                  |
 |                 |                   |------------------>|                  |
 |                 |                   |                   | evaluate temporal|
 |                 |                   |                   | policy, session X|
 |                 |                   |                   |  forward         |
 |                 |                   |                   |----------------->|

중요 고려 사항

  • 세션 IDs는 고객 관리형입니다. 새 세션을 생성할 시기와 기존 세션을 계속할 시기를 선택합니다. 새 세션 ID는 새로운 시간 정책 평가 경계를 의미합니다.

  • X-Amz-Bedrock-AgentCore-Identity-WAT 헤더는 내부 헤더입니다. 에이전트 코드에서이 헤더를 설정, 수정 또는 제거하지 마십시오. AgentCore는 처음부터 끝까지 이를 관리합니다.

  • 다중 게이트웨이 시나리오(Gateway1 → 런타임 → Gateway2): 세션 상태는 WAT를 통해 자동으로 전파됩니다. Gateway2는 동일한 세션 ID를 사용하여 자체 임시 정책을 평가합니다.

  • authorizerType=NONE 게이트웨이는 호출자당 세션 격리를 제공하지 않습니다. 인증이 구성되지 않은 경우 게이트웨이에는 세션을 바인딩할 호출자 자격 증명이 없습니다. 동일한 세션 ID를 제공하는 모든 호출자는 단일 시간 정책 이벤트 스트림을 공유합니다. 한 호출자의 작업은 다른 호출자의 속도 제한 또는 시퀀싱 제약 조건에 포함됩니다. 인증되지 않은 게이트웨이에 대한 임시 정책은 권장 사항일 뿐입니다. 글로벌 제한(예: "세션당이 도구에 대한 총 100건의 호출")을 적용할 수 있지만 개별 호출자를 구분하거나 격리할 수는 없습니다. 발신자별 격리의 경우 CUSTOM_JWT 또는 AWS_IAM 인증을 사용하여 게이트웨이를 구성합니다.

SDKs에서 세션 ID 사용

Gateway 요청에서 사용자 지정 헤더를 지원하는 모든 클라이언트를 통해 정책 세션 ID를 전달할 수 있습니다. 다음 예제에서는 MCP Python SDK 및 Strands 에이전트를 사용할 때 이를 포함하는 방법을 보여줍니다.

동일한 논리적 세션의 모든 호출에서 동일한 세션 ID 값을 사용합니다. 새 대화가 시작되면 새 세션 ID를 생성합니다.

MCP 클라이언트(Python SDK):

스트리밍 가능한 HTTP 전송과 함께 MCP Python SDK를 사용하는 경우 연결 헤더에 세션 ID를 포함합니다.

from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client import asyncio SESSION_ID = "12345678-1234-1234-1234-123456789012" async def call_with_session(gateway_url, token, tool_name, arguments): headers = { "Authorization": f"Bearer {token}", "x-amzn-bedrock-agentcore-policy-session-id": SESSION_ID } async with streamablehttp_client(url=gateway_url, headers=headers) as (read, write, _): async with ClientSession(read, write) as session: await session.initialize() result = await session.call_tool(name=tool_name, arguments=arguments) return result result = asyncio.run(call_with_session( "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp", "YOUR_TOKEN", "PaymentTool___transfer_funds", {"amount": 500, "recipient": "account-789"} ))

Strands 에이전트:

AgentCore Gateway와 함께 Strands Agents를 도구 소스로 사용하는 경우 MCP 클라이언트 전송 헤더에 세션 ID를 전달합니다. 세션 중에 에이전트가 수행하는 모든 도구 호출은 동일한 세션을 전달하며 시간 정책은 전체 기록을 평가합니다.

from strands.tools.mcp.mcp_client import MCPClient from mcp.client.streamable_http import streamablehttp_client SESSION_ID = "12345678-1234-1234-1234-123456789012" def create_transport(mcp_url, access_token): return streamablehttp_client( mcp_url, headers={ "Authorization": f"Bearer {access_token}", "x-amzn-bedrock-agentcore-policy-session-id": SESSION_ID } ) mcp_client = MCPClient(lambda: create_transport(gateway_url, token)) with mcp_client: result = mcp_client.call_tool_sync( tool_use_id="tool-1", name="PaymentTool___transfer_funds", arguments={"amount": 500, "recipient": "account-789"} )

실제 고객 사용 사례

다음 시나리오는 임시 정책이 에이전트 애플리케이션의 일반적인 보안 및 규정 준수 문제를 해결하는 방법을 보여줍니다.

금융 서비스 - 전송 속도 제한

핀테크 애플리케이션을 사용하면 최종 사용자가 대화형 에이전트를 통해 은행 송금을 시작할 수 있습니다. 임시 정책이 없으면 손상되거나 반복되는 에이전트가 단일 세션에서 무제한 전송을 실행할 수 있습니다. 세션 범위 속도 제한을 사용하면 게이트웨이는 세션당 최대 전송 수를 적용합니다.

User: "Transfer $500 to Alice"      -> Allowed (1 of 3)
User: "Transfer $200 to Bob"        -> Allowed (2 of 3)
User: "Transfer $1000 to Charlie"   -> Allowed (3 of 3)
User: "Transfer $50 to Dave"        -> DENIED by temporal policy

각 사용자 세션은 고유한 세션 ID를 사용합니다. 새 세션 ID가 새 평가 경계를 생성하기 때문에 새 세션이 시작될 때 속도 제한이 재설정됩니다.

의료 - 에스컬레이션 제어

의료 에이전트는 환자 레코드에 액세스하고 외부 알림 시스템에 메시지를 보낼 수도 있습니다. 시간 정책은 환자 데이터에 액세스한 후에는 세션의 나머지 기간 동안 외부 API 호출이 허용되지 않도록 강제합니다. 이렇게 하면 에이전트의 프롬프트가 세션 중간에 조작되더라도 데이터 유출을 방지할 수 있습니다.

Agent: calls PatientRecords___read_chart      -> Allowed
Agent: calls ExternalAPI___send_notification  -> DENIED (sensitive data was accessed in this session)

제약 조건은 도구 자체에 없습니다. send_notification는 환자 데이터에 액세스하지 않는 세션에서 허용됩니다. 이 정책은이 특정 세션의 앞부분에서 발생한 일을 고려합니다.

DevOps - 시퀀싱 제약 조건

배포 에이전트는 필수 시퀀스를 따라야 합니다. 배포를 진행하기 전에 테스트를 통과해야 합니다. 시간 정책은가 동일한 세션에서 호출RunTests된 후에만 호출할 Deploy 수 있는를 적용합니다.

Agent: calls Deploy___to_production   -> DENIED (RunTests not yet called in this session)
Agent: calls RunTests___execute       -> Allowed
Agent: calls Deploy___to_production   -> Allowed (RunTests was called earlier in this session)

이렇게 하면 에이전트에 메시지가 표시되는 방식이나 이를 제어하는 오케스트레이션 프레임워크에 관계없이 배포 시퀀스가 보장됩니다.

다중 테넌트 SaaS - 사용자당 예산 적용

SaaS 플랫폼은 공유 애플리케이션 자격 증명(OBO(CUSTOM_JWTOn-Behalf-Of) 흐름을 통한 사용자당 sub 클레임 포함) 뒤에 있는 여러 최종 사용자를 위한 AI 에이전트를 호스팅합니다. 각 사용자의 세션은 고유한 세션 ID를 받습니다. 게이트웨이는 세션을 세션 ID와 인증된 보안 주체 모두에 바인딩하기 때문에 다른 사용자의 세션이 자동으로 격리됩니다. 시간 정책은 모든 트래픽이 동일한 애플리케이션 자격 증명을 통해 도착하더라도 사용자별로 독립적으로 평가되는 "세션당 최대 100 USD의 도구 호출"을 적용합니다.

세션 범위 선택: 광범위한 세션과 좁은 세션

제공하는 세션 ID에 따라 시간 정책의 평가 경계가 결정됩니다. 올바른 범위를 선택하면 보안과 사용성 모두에 영향을 미칩니다.

전략 세션 ID 패턴 장점 단점

대화당(권장)

사용자당 새 UUID 대화

자연 경계, 대화 간 속도 제한 재설정, 명확한 사용자 멘탈 모델

에이전트는 새로운 제한을 위해 새 세션을 시작해야 합니다.

사용자당(광의)

사용자당 안정적인 ID(예: 사용자 ID의 해시)

정책은 모든 대화에 적용되며 일일 예산 적용에 유용합니다.

제한은 TTL(24시간) 내에서 재설정되지 않습니다. 관련 없는 작업 간에 공유됩니다.

요청당(협의)

요청당 새 UUID

모든 요청은 독립적입니다.

임시 정책이 효과적으로 비활성화됨 - 평가할 기록 없음

작업당

논리적 작업당 UUID(예: "이 순서 처리")

특정 워크플로로 범위가 지정된 정책, 다단계 에이전트 작업에 적합

애플리케이션이 작업을 관리해야 함 → 세션 ID 매핑

지침:

  • 대화별로 시작합니다. 이는 대부분의 대화형 에이전트 사용 사례에서 자연스럽게 일치합니다.

  • 대화 간 적용이 필요한 경우 사용자당를 사용합니다(예: "대화 수에 관계없이 하루에 10회 이하의 전송").

  • 의도적으로 시간 정책 평가를 수행하지 않으려는 경우가 아니면 요청당를 사용하지 마세요.

  • 지나치게 광범위한 세션(예: 모든 사용자에 대해 하나의 세션 ID)을 피합니다. 이렇게 하면 모든 호출자의 작업이 단일 이벤트 스트림으로 집계되고 사용자당 속도 제한이 의미가 없습니다.

헤더 확인 및 비 런타임 배포

게이트웨이가 세션 ID를 확인하는 방법

게이트웨이는 x-amzn-bedrock-agentcore-policy-session-id 헤더를 수신하면 다음 검증을 수행합니다.

  • 형식 확인: 값은 영숫자와 하이픈()만 포함하는 1~128자여야 합니다[A-Za-z0-9-]. 형식이 잘못되었거나 크기가 큰 값은 HTTP 400에서 거부됩니다. 헤더는이 점검을 통과하지 않고는 사용되거나 반영되지 않습니다.

  • 보안 주체 바인딩: 인증된 게이트웨이(CUSTOM_JWT 또는 AWS_IAM)에서 게이트웨이는 세션을 호출자의 인증된 자격 증명에 바인딩합니다. 동일한 세션 ID를 제공하는 서로 다른 두 호출자는 격리된 세션을 받습니다. 자격 증명은 세션 키의 일부입니다.

  • 암시적 생성: 세션을 사전 등록할 필요가 없습니다. 지정된 세션 ID가 있는 첫 번째 요청은 암시적으로 세션을 생성합니다. 별도의 "세션 생성" API 직접 호출은 필요하지 않습니다.

게이트웨이를 직접 호출하는 경우( AgentCore 런타임 제외)

애플리케이션이 게이트웨이 URL에 HTTP 요청을 하는 백엔드 서비스와 같은 게이트웨이 엔드포인트를 직접 호출하면 세션 ID를 직접 관리할 수 있습니다.

  • 각 논리적 대화를 시작할 때 세션 ID( 권장uuid4)를 생성합니다.

  • 해당 대화의 모든 요청에 HTTP 헤더x-amzn-bedrock-agentcore-policy-session-id: <your-session-id>로를 포함합니다.

  • 후속 요청이 동일한 세션을 참조하도록 대화 기간 동안 세션 ID 클라이언트 측에 저장합니다.

추가 구성, 권한 또는 API 호출은 필요하지 않습니다. 게이트웨이는 처음 사용할 때 세션을 생성하고 24시간 동안 사용하지 않으면 세션을 만료시킵니다.

요청이 AgentCore 런타임을 통해 흐르는 경우

호출이 사용자 → 게이트웨이 → 런타임(에이전트) → 게이트웨이(도구 호출) 경로를 통과하는 경우 초기 요청 시 세션 ID만 첫 번째 게이트웨이에 전달하면 됩니다. 플랫폼은 워크로드 액세스 토큰(WAT) 내에 세션 ID를 포함하고 모든 다운스트림 홉을 통해 자동으로 전파합니다. 에이전트 코드는 세션 ID를 읽거나 저장하거나 전달할 필요가 없습니다. 수신 게이트웨이에 투명하게 도착합니다.

워크로드 액세스 토큰(WAT) 정보

워크로드 액세스 토큰은 AgentCore 서비스 간에 흐를 때 요청의 자격 증명 컨텍스트를 전달하는 AWS서명된 불투명 토큰입니다. 시간 정책이 활성화되면 WAT에 다음이 포함됩니다.

  • 세션 ID - 다중 홉 요청의 모든 홉을 동일한 시간 정책 세션에 연결합니다.

  • 호출자 보안 주체 - 다운스트림 게이트웨이가 세션을 올바르게 바인딩할 수 있도록 원래 호출자의 자격 증명을 보존합니다.

  • 워크로드 체인 - 요청이 통과한 정렬된 AgentCore 서비스 목록입니다(예: [Gateway, Runtime, Gateway]).

WAT는 수명이 짧고(15분 TTL), AgentCore Identity 서비스가 암호화 방식으로 서명하며, 모든 참가자에게 불투명합니다. 호출자 또는 중개자가 위조, 변조 또는 디코딩할 수 없습니다.

WAT와 직접 상호 작용하지 않습니다. 이는 플랫폼에서 전적으로 관리하는 내부 X-Amz-Bedrock-AgentCore-Identity-WAT 헤더에서 전달됩니다. 이 설명은 세션 연속성이 홉 간에 작동하는 방식을 이해하기 위해 제공됩니다. WAT와 관련하여 조치를 취할 필요가 없습니다.

워크로드 ID 및 액세스 토큰에 대한 자세한 내용은 워크로드 액세스 토큰 가져오기 및 워크로드 ID 이해를 참조하세요.