View a markdown version of this page

Propagación de encabezados con Gateway - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Propagación de encabezados con Gateway

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

La propagación de encabezados se refiere al reenvío sistemático de encabezados HTTP selectivos desde 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 usar en casos de uso en los que sea necesario intercambiar información de contexto, autenticación, rastreo y otra información crítica entre el cliente y los objetivos. Los encabezados incluidos en la lista de permisos predeterminados proporcionados en la llamada de la herramienta de invocación 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 transferir de forma segura los encabezados y parámetros de consulta que hayas incluido en la lista de objetivos permitidos.

  • Es su responsabilidad actuar con cautela y solo incluir en la lista los encabezados de propagación que sean esenciales para los objetivos, asegurándose de que cumplen con 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 que se propaguen:

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íe

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

ETC.

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 API REST no se pueden configurar para la propagación de encabezados.

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

  • Un máximo de 10 encabezados de solicitud, 10 encabezados de respuesta y 10 parámetros de consulta por objetivo para evitar el abuso 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 que se agote la memoria

  • Los valores de los encabezados deben contener únicamente caracteres ASCII imprimibles

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

Configurar la propagación de los parámetros de encabezados y consultas

Puede configurar los parámetros del encabezado y la consulta en el nivel de destino al crear o actualizar los objetivos 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 de allowedRequestHeaders encabezados allowedResponseHeaders añadiendo allowedQueryParameters campos y campos a los de su objetivometadataConfiguration:

{ "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 de encabezados desde el interceptor lambda

Cuando usas lambdas de interceptor personalizadas con tu puerta de enlace, puedes controlar de forma dinámica la propagación de los encabezados al incluir los encabezados en la respuesta de interceptor lambda.

Cómo funciona la propagación de los encabezados del interceptor

Las lambdas de los interceptores pueden influir en la propagación de los encabezados 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 destino que proporciona un token de autorización como Authorization: Bearer client-token el 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 permitidos 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 lo proporciona x-tenant-id: tenant-123 mientras la lambda del interceptor la proporciona, el valor de la lambda del interceptor se reenviará al destino. x-tenant-id: tenant-456 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 objetivo para poder reenviarlos a los destinos.

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

Configure su interceptor lambda para que devuelva los encabezados que deben 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 comunes de la propagación de encabezados de interceptores incluyen:

Obtención de credenciales

Recupere los tokens de corta duración de bóvedas seguras e insértelos como encabezados de autorización para evitar que las credenciales queden expuestas en las aplicaciones de los clientes.

Inyección de contexto

Agregue los identificadores de inquilinos, el contexto de la organización o los atributos de usuario derivados de las solicitudes de los usuarios autenticados 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 cumplimiento o las políticas de seguridad antes de que lleguen al objetivo.

Enrutamiento dinámico

Introduzca sugerencias de enrutamiento, indicadores de funciones o encabezados de A/B prueba basándose en un 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 de interceptores, 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 objetivos permitidos o que hayan sido 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 supervisar la seguridad y el cumplimiento

  • Valide el contenido de los encabezados: 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 objetivo en lugar de hacerlo de forma global. Los diferentes objetivos pueden requerir diferentes encabezados, y la configuración específica del objetivo proporciona un mejor aislamiento de la 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 tenencia múltiple.

Implemente una gestión adecuada de los errores

Gestione los casos en los que falten los encabezados obligatorios o no sean válidos. Considera la posibilidad de no aprobar la solicitud o de proporcionar valores predeterminados.

Supervise el uso del encabezado

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

Pruebe la propagación de encabezados

Verifique 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.