View a markdown version of this page

Propagación de encabezados con Gateway - Amazon Bedrock AgentCore

Propagación de encabezados con Gateway

¿Qué es la propagación de encabezados y parámetros de consulta

La propagación de encabezados se refiere al reenvío sistemático de los encabezados HTTP selectivos de las solicitudes entrantes a través de la puerta de enlace a los destinos configurados, y al reenvío selectivo de los encabezados de respuesta al cliente. Al igual que la propagación de encabezados, la propagación de parámetros de consulta permite reenviar los parámetros de consulta de URL de las solicitudes entrantes a los destinos configurados. Esta función se puede utilizar en casos de uso en los que es necesario intercambiar información de contexto, autenticación, rastreo y otra información crítica entre el cliente y el destino. Los encabezados prepermitidos incluidos en la herramienta de invocación, llamada a la puerta de enlace o enviados desde el interceptor lambda personalizado, se reenviarán a los objetivos específicos.

Esta función funciona como un modelo de responsabilidad compartida:

  • AWS la responsabilidad consiste en transmitir de forma segura los encabezados y los parámetros de consulta que ha incluido en la lista de permitidos para sus objetivos.

  • Su responsabilidad es actuar con cautela y incluir en la lista únicamente aquellos encabezados de propagación que sean esenciales para los objetivos, asegurándose de que cumplen sus requisitos funcionales y de seguridad.

Restricciones de encabezado

Para mantener la seguridad y evitar la exposición de información confidencial, los siguientes encabezados están restringidos y no se pueden configurar para su propagación:

Autorización*

Proxy-Authorization

WWW-Authenticate

Aceptar

Accept-Charset

Accept-Encoding

Accept-Language

Content-Type

Content-Length

Content-Encoding

Content-Language

Content-Location

Content-Range

Cache-Control

ETag

Expires

If-Match

If-Modified-Since

If-None-Match

If-Range

If-Unmodified-Since

Last-Modified

Pragma

Varía

Connection

Keep-Alive

Proxy-Connection

Upgrade

Host

User-Agent

Referer

De

Range

Accept-Ranges

Transfer-Encoding

TE

Trailer

Server

Date

Ubicación

Retry-After

Set-Cookie

Cookie

Content-Security-Policy

Content-Security-Policy-Report-Only

Strict-Transport-Security

X-Content-Type-Options

X-Frame-Options

X-XSS-Protection

Referrer-Policy

Permissions-Policy

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

Origen

Accept-CH

Accept-CH-Lifetime

DPR

Ancho

Viewport-Width

Enlace de bajada

ECT

RTT

Save-Data

Clear-Site-Data

Feature-Policy

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-Cache

X-Served-By

:método

:ruta

:esquema

: autoridad

:estado

Link

Sec-WebSocket-Key

Sec-WebSocket-Accept

Sec-WebSocket-Version

Sec-WebSocket-Protocol

Sec-WebSocket-Extensions

  • El encabezado de autorización no se puede incluir en la lista de permitidos durante la creación del destino. Sin embargo, se reenviará al objetivo cuando lo proporcione un interceptor lambda. Consulte Propagación de encabezados desde el interceptor lambda para obtener más información.

importante

Además de los encabezados restringidos mencionados anteriormente, los encabezados proporcionados en las claves de API y el esquema de la API REST no se pueden configurar para la propagación de encabezados.

Se aplican reglas de validación adicionales a los encabezados permitidos:

  • Máximo de 10 encabezados de solicitud, 10 encabezados de respuesta y 10 parámetros de consulta por objetivo para evitar abusos y mantener el rendimiento

  • Los nombres de los encabezados deben contener únicamente caracteres alfanuméricos, guiones y guiones bajos (expresión regular:) ^[a-zA-Z0-9_-]+$

  • Los valores de los encabezados están limitados a un máximo de 4 KB para evitar el agotamiento de la memoria

  • Los valores del encabezado deben contener únicamente caracteres ASCII imprimibles

  • X-Amzn-Se prohíben los encabezados que comiencen por (excepto los encabezados -*) X-Amzn-Bedrock-AgentCore-Runtime-Custom

Configuración de la propagación de encabezados y parámetros de consulta

Puede configurar los parámetros de cabecera y consulta en el nivel de destino al crear o actualizar los destinos de la puerta de enlace. Los encabezados y los parámetros de consulta se especifican por destino, lo que garantiza que cada destino reciba solo los encabezados que necesita.

Target-level configuración

Configure la propagación del encabezado añadiendo allowedRequestHeaders y allowedQueryParameters campos a los de su objetivometadataConfiguration: allowedResponseHeaders

{ "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" ] } }

Uso del SDK de Python:

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'] } )

Propagación del encabezado desde el interceptor lambda

Al utilizar lambdas interceptoras personalizadas con su puerta de enlace, puede controlar dinámicamente la propagación de los encabezados al incluir los encabezados en la respuesta lambda del interceptor.

Cómo funciona la propagación de los encabezados de los interceptores

Las lambdas interceptoras pueden influir en la propagación de las cabeceras de las siguientes maneras:

  • Anulación del encabezado de autorización: el Authorization encabezado de la respuesta lambda del interceptor se propaga automáticamente al objetivo. Si bien el Authorization encabezado no se puede configurar en la lista de permitidos del objetivo, se reenviará al objetivo cuando lo proporcione un interceptor lambda.

    Por ejemplo, si ha agregado un proveedor de credenciales al objetivo que proporciona un token de autorización similar Authorization: Bearer client-token al que proporciona el interceptor lambdaAuthorization: Bearer refreshed-token, el valor Bearer refreshed-token del interceptor lambda se reenviará al objetivo.

  • Inyección de encabezados personalizada: los encabezados adicionales de la respuesta lambda del interceptor se combinan con la lista de encabezados de destino configurada.

  • Prioridad de encabezados: los encabezados proporcionados por Interceptor Lambda tienen prioridad sobre los encabezados proporcionados por el cliente en caso de conflictos.

    Por ejemplo, si permites el encabezado de la lista x-tenant-id en la configuración de destino y la solicitud entrante se mantiene x-tenant-id: tenant-123 mientras que el interceptor lambda lo hace, el valor del interceptor lambda se reenviará al x-tenant-id: tenant-456 objetivo. tenant-456

  • Validación de seguridad: todos los encabezados proporcionados por Lambda están sujetos a las mismas reglas de validación que los encabezados configurados. A excepción del encabezado de autorización, todos los demás encabezados deben figurar en la lista de permitidos durante la creación del destino para que se reenvíen a los destinos.

Implementación de la propagación de encabezados en los interceptores

Configura tu interceptor lambda para que devuelva los encabezados que deberían propagarse al objetivo:

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'] } } }

Los casos de uso más comunes para la propagación de encabezados de interceptores incluyen:

Obtención de credenciales

Recupere los tokens de corta duración de los almacenes seguros e insértelos como encabezados de autorización, lo que evita que las credenciales queden expuestas en las aplicaciones cliente.

Inyección de contexto

Añada identificadores de inquilinos, contexto organizativo o atributos de usuario derivados de las afirmaciones de los usuarios autenticadas en lugar de confiar en los valores proporcionados por el cliente.

Transformación de encabezados

Transforme o desinfecte los encabezados en función de la lógica empresarial, los requisitos de conformidad o las políticas de seguridad antes de que alcancen el objetivo.

Enrutamiento dinámico

Inserte sugerencias de enrutamiento, indicadores de características o encabezados de A/B prueba en función del análisis en tiempo real de los atributos del usuario o del estado del sistema.

Consideraciones de seguridad

Al implementar la propagación de encabezados con lambdas interceptoras, siga estas prácticas recomendadas de seguridad:

  • Valide las fuentes de los encabezados: propague únicamente los encabezados que estén configurados explícitamente en su lista de destino permitidos o devueltos por lambdas de interceptores confiables

  • Desinfecte los datos confidenciales: elimine o oculte la PII y la información confidencial antes de reenviar los encabezados a servidores MCP externos

  • Utilice el mínimo privilegio: configure las funciones de IAM de interceptor lambda con los permisos mínimos necesarios para la obtención de credenciales y la recuperación del contexto

  • Implemente el registro de auditorías: registre las transformaciones de los encabezados y las actividades de obtención de credenciales para la supervisión de la seguridad y el cumplimiento

  • Valide el contenido del encabezado: asegúrese de que los encabezados generados por Lambda cumplan las mismas reglas de validación que los encabezados configurados

Prácticas recomendadas

Siga estas prácticas recomendadas al implementar la propagación de encabezados:

Utilice una configuración específica para el objetivo

Configure los encabezados por destino en lugar de hacerlo de forma global. Los diferentes destinos pueden requerir encabezados diferentes, y la configuración específica del objetivo proporciona un mejor aislamiento de seguridad.

Minimice el recuento de encabez

Propague únicamente los encabezados que realmente necesite el objetivo. Los encabezados excesivos aumentan el tamaño de la solicitud y la sobrecarga de procesamiento.

Usa nombres de encabezados semánticos

Elija nombres de encabezado descriptivos que indiquen claramente su propósito, por ejemplo, para el rastreo o x-correlation-id x-tenant-id para la multitenencia.

Implemente un manejo de errores adecuado

Gestione los casos en los que los encabezados obligatorios faltan o no son válidos. Considera si deseas rechazar la solicitud o proporcionar los valores predeterminados.

Supervise el uso del encabezado

Utilice las funciones de observabilidad de la pasarela para controlar qué encabezados se están propagando e identificar cualquier problema con la validación o el procesamiento de los encabezados.

Pruebe la propagación de los encabezados

Compruebe que los encabezados se propaguen correctamente a sus objetivos durante el desarrollo y las pruebas. Usa herramientas como el registro de solicitudes o la depuración de puntos finales para validar el flujo de encabezados.