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
Authorizationencabezado de la respuesta lambda del interceptor se propaga automáticamente al objetivo. Si bien elAuthorizationencabezado 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-tokenal que proporciona el interceptor lambdaAuthorization: Bearer refreshed-token, el valorBearer refreshed-tokendel 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-iden la configuración de destino y la solicitud entrante se mantienex-tenant-id: tenant-123mientras que el interceptor lambda lo hace, el valor del interceptor lambda se reenviará alx-tenant-id: tenant-456objetivo.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-idx-tenant-idpara 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.