View a markdown version of this page

Gateway를 사용한 헤더 전파 - Amazon Bedrock AgentCore

Gateway를 사용한 헤더 전파

헤더 및 쿼리 파라미터 전파란 무엇입니까?

헤더 전파는 게이트웨이를 통해 수신되는 요청에서 구성된 대상으로 선택적 HTTP 헤더를 체계적으로 전달하고 응답 헤더를 클라이언트로 다시 선택적으로 전달하는 것을 말합니다. 헤더 전파와 마찬가지로 쿼리 파라미터 전파를 사용하면 수신 요청의 URL 쿼리 파라미터를 구성된 대상으로 전달할 수 있습니다. 이 기능은 클라이언트와 대상 간에 컨텍스트, 인증, 추적 및 기타 중요한 정보를 교환해야 하는 사용 사례에 사용할 수 있습니다. 게이트웨이에 대한 호출 도구 호출에 제공되거나 사용자 지정 인터셉터 Lambda에서 전송된 사전 허용 목록에 있는 헤더는 특정 대상으로 전달됩니다.

이 기능은 공동 책임 모델로 작동합니다.

  • AWS 의 책임은 대상에 대해 허용 목록에 있는 헤더 및 쿼리 파라미터를 안전하게 전달하는 것입니다.

  • 사용자의 책임은 대상에 필수적인 전파를 위해 헤더를 신중하게 허용하여 보안 및 기능 요구 사항을 충족하는지 확인하는 것입니다.

헤더 제한

보안을 유지하고 민감한 정보의 노출을 방지하기 위해 다음 헤더는 제한되며 전파를 위해 구성할 수 없습니다.

권한 부여*

Proxy-Authorization

WWW 인증

Accept

Accept-Charset

Accept-Encoding

Accept-Language

Content-Type

Content-Length

Content-Encoding

Content-Language

Content-Location

콘텐츠 범위

Cache-Control

ETag

Expires

If-Match

If-Modified-Since

If-None-Match

If-Range

If-Unmodified-Since

Last-Modified

Pragma

다양한

Connection

Keep-Alive

Proxy-Connection

업그레이드

Host

사용자 에이전트

Referer

From

Range

Accept-Ranges

Transfer-Encoding

TE

트레일러

Server

Date

Location

이후 재시도

Set-Cookie

Cookie

Content-Security-Policy

Content-Security-Policy-Report-Only

Strict-Transport-Security

X-Content-Type-Options

X-Frame-Options

X-XSS-Protection

참조자 정책

권한 정책

Cross-Origin-Embedder-Policy

Cross-Origin-Opener-Policy

Cross-Origin-Resource-Policy

Access-Control-Allow-Origin

Access-Control-Allow-Methods

Access-Control-Allow-Headers

Access-Control-Allow-Credentials

Access-Control-Expose-Headers

Access-Control-Max-Age

Access-Control-Request-Method

Access-Control-Request-Headers

Origin

Accept-CH

Accept-CH-Lifetime

DPR

너비

뷰포트 너비

다운링크

ECT

RTT

저장 데이터

Clear-Site-Data

특성 정책

Expect-CT

Public-Key-Pins

Public-Key-Pins-Report-Only

X-Forwarded-For

X-Forwarded-Host

X-Forwarded-Proto

X-Real-IP

X-Requested-With

X-CSRF-Token

CF-Ray

CF-Connecting-IP

X-Amz-Cf-Id

X-캐시

X-Served-By

:메서드

:경로

:scheme

:authority

:status

링크

Sec-WebSocket-Key

Sec-WebSocket-Accept

Sec-WebSocket-Version

Sec-WebSocket-Protocol

Sec-WebSocket-Extensions

  • 대상 생성 중에는 권한 부여 헤더를 허용 목록에 추가할 수 없습니다. 그러나 인터셉터 Lambda에서 제공하는 경우 대상으로 전달됩니다. 자세한 내용은 인터셉터 Lambda의 헤더 전파를 참조하세요.

중요

위에서 언급한 제한된 헤더 외에도 API 키 및 REST API 스키마에 제공된 헤더는 헤더 전파를 위해 구성할 수 없습니다.

허용되는 헤더에는 추가 검증 규칙이 적용됩니다.

  • 남용을 방지하고 성능을 유지하기 위해 대상당 최대 10개의 요청 헤더, 10개의 응답 헤더 및 10개의 쿼리 파라미터

  • 헤더 이름에는 영숫자, 하이픈 및 밑줄만 포함되어야 합니다(정규식: ^[a-zA-Z0-9_-]+$ ).

  • 헤더 값은 메모리 소진을 방지하기 위해 최대 4KB로 제한됩니다.

  • 헤더 값에는 인쇄 가능한 ASCII 문자만 포함되어야 합니다.

  • 로 시작하는 헤더X-Amzn-는 금지됩니다(X-Amzn-Bedrock-AgentCore-Runtime-Custom-* 헤더 제외).

헤더 및 쿼리 파라미터 전파 구성

게이트웨이 대상을 생성하거나 업데이트할 때 대상 수준에서 헤더 및 쿼리 파라미터를 구성할 수 있습니다. 헤더 및 쿼리 파라미터는 대상별로 지정되므로 각 대상이 필요한 헤더만 수신할 수 있습니다.

대상 수준 구성

대상의에 allowedRequestHeaders , allowedResponseHeadersallowedQueryParameters 필드를 추가하여 헤더 전파를 구성합니다. metadataConfiguration

{ "name": "my-target", "description": "my target description", "credentialProviderConfigurations": [{ "credentialProviderType": "OAUTH", "credentialProvider": { "oauthCredentialProvider": { "providerArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:credential-provider/example", "scopes": [] } } }], "targetConfiguration": { "mcp": { "mcpServer": { "endpoint": "https://example.com/mcp" } } }, "metadataConfiguration": { "allowedRequestHeaders": [ "request-header" ], "allowedResponseHeaders": [ "response-header" ], "allowedQueryParameters": [ "query-param" ] } }

Python SDK 사용:

import boto3 # Initialize the client client = boto3.client('bedrock-agentcore', region_name='us-west-2') # Create target with header propagation response = client.create_gateway_target( gatewayId='gateway-123', name='mcp-target-with-headers', description='MCP target with header propagation', targetConfiguration={ 'mcp': { 'mcpServer': { 'endpoint': 'https://example.com/mcp' } } }, metadataConfiguration={ 'allowedRequestHeaders': ['x-correlation-id', 'x-tenant-id'], 'allowedResponseHeaders': ['x-rate-limit-remaining'], 'allowedQueryParameters': ['version'] } )

인터셉터 Lambda에서 헤더 전파

게이트웨이와 함께 사용자 지정 인터셉터 Lambda를 사용하는 경우 인터셉터 Lambda 응답에 헤더를 포함하여 헤더 전파를 동적으로 제어할 수 있습니다.

인터셉터 헤더 전파 작동 방식

인터셉터 람다는 다음과 같은 방식으로 헤더 전파에 영향을 미칠 수 있습니다.

  • 권한 부여 헤더 재정의: 인터셉터 Lambda 응답의 Authorization 헤더가 대상에 자동으로 전파됩니다. Authorization 헤더는 대상의 허용 목록에 구성할 수 없지만 인터셉터 Lambda에서 제공하면 대상에 전달됩니다.

    예를 들어와 같은 권한 부여 토큰을 제공하는 자격 증명 공급자를 대상에 추가Authorization: Bearer client-token하고 인터셉터 lambda가 Authorization: Bearer refreshed-token를 제공하는 경우 인터셉터 lambdaBearer refreshed-token의 값이 대상으로 전달됩니다.

  • 사용자 지정 헤더 삽입: 인터셉터 Lambda 응답의 추가 헤더가 구성된 대상 헤더 허용 목록과 병합됩니다.

  • 헤더 우선 순위: 충돌 시 인터셉터 Lambda 제공 헤더가 클라이언트 제공 헤더보다 우선합니다.

    예를 들어 대상 구성x-tenant-id에서 허용 목록 헤더를 허용하고 인터셉터 Lambda가 x-tenant-id: tenant-456를 제공하는 x-tenant-id: tenant-123 동안 수신 요청이를 제공하는 경우 인터셉터 Lambdatenant-456의 값이 대상으로 전달됩니다.

  • 보안 검증: 모든 Lambda 제공 헤더에는 구성된 헤더와 동일한 검증 규칙이 적용됩니다. 권한 부여 헤더를 제외하고 대상 생성 중에 다른 모든 헤더를 허용 목록에 추가해야 대상에 전달할 수 있습니다.

인터셉터에서 헤더 전파 구현

대상에 전파해야 하는 헤더를 반환하도록 인터셉터 Lambda를 구성합니다.

import json import boto3 def lambda_handler(event, context): # Extract request context request_context = event.get('requestContext', {}) user_identity = request_context.get('identity', {}) # Fetch credentials from secure store (example) credentials_client = boto3.client('secretsmanager') secret = credentials_client.get_secret_value( SecretId=f"mcp-credentials/{user_identity.get('userId')}" ) credentials = json.loads(secret['SecretString']) # Return response with headers to propagate return { "interceptorOutputVersion": "1.0", "mcp": { "transformedGatewayRequest": { "headers": { # Authorization header will be propagated automatically "Authorization": f"Bearer {credentials['access_token']}", # Custom headers (must be in target allowlist) "x-tenant-id": user_identity.get('tenantId'), "x-correlation-id": request_context.get('requestId') }, "body": event['mcp']['gatewayRequest']['body'] } } }

인터셉터 헤더 전파의 일반적인 사용 사례는 다음과 같습니다.

자격 증명 가져오기

보안 볼트에서 수명이 짧은 토큰을 검색하고 권한 부여 헤더로 삽입하여 클라이언트 애플리케이션에서 자격 증명 노출을 방지합니다.

컨텍스트 삽입

클라이언트가 제공한 값을 신뢰하는 대신 인증된 사용자 클레임에서 파생된 테넌트 식별자, 조직 컨텍스트 또는 사용자 속성을 추가합니다.

헤더 변환

비즈니스 로직, 규정 준수 요구 사항 또는 보안 정책을 기반으로 헤더가 대상에 도달하기 전에 헤더를 변환하거나 삭제합니다.

동적 라우팅

사용자 속성 또는 시스템 상태에 대한 실시간 분석을 기반으로 라우팅 힌트, 기능 플래그 또는 A/B 테스트 헤더를 주입합니다.

보안 고려 사항

인터셉터 Lambda를 사용하여 헤더 전파를 구현할 때는 다음 보안 모범 사례를 따르세요.

  • 헤더 소스 검증: 대상 허용 목록에 명시적으로 구성되거나 신뢰할 수 있는 인터셉터 Lambda가 반환하는 헤더만 전파합니다.

  • 민감한 데이터 삭제: 헤더를 외부 MCP 서버로 전달하기 전에 PII 및 민감한 정보를 제거하거나 마스킹합니다.

  • 최소 권한 사용: 자격 증명 가져오기 및 컨텍스트 검색에 필요한 최소 권한으로 인터셉터 Lambda IAM 역할 구성

  • 감사 로깅 구현: 보안 모니터링 및 규정 준수를 위한 로그 헤더 변환 및 자격 증명 가져오기 활동

  • 헤더 콘텐츠 검증: Lambda 생성 헤더가 구성된 헤더와 동일한 검증 규칙을 충족하는지 확인합니다.

모범 사례

헤더 전파를 구현할 때는 다음 모범 사례를 따르세요.

대상별 구성 사용

전역적으로가 아닌 대상별로 헤더를 구성합니다. 대상마다 다른 헤더가 필요할 수 있으며 대상별 구성은 더 나은 보안 격리를 제공합니다.

헤더 수 최소화

대상에 실제로 필요한 헤더만 전파합니다. 과도한 헤더는 요청 크기와 처리 오버헤드를 높입니다.

의미 체계 헤더 이름 사용

추적 또는 x-tenant-id 다중 테넌시x-correlation-id와 같이 목적을 명확하게 나타내는 설명이 포함된 헤더 이름을 선택합니다.

적절한 오류 처리 구현

필수 헤더가 누락되거나 유효하지 않은 사례를 처리합니다. 요청에 실패할지 아니면 기본값을 제공할지 고려합니다.

헤더 사용량 모니터링

게이트웨이 관찰성 기능을 사용하여 전파 중인 헤더를 모니터링하고 헤더 검증 또는 처리 문제를 식별합니다.

테스트 헤더 전파

개발 및 테스트 중에 헤더가 대상에 올바르게 전파되는지 확인합니다. 요청 로깅 또는 엔드포인트 디버깅과 같은 도구를 사용하여 헤더 흐름을 검증합니다.