View a markdown version of this page

Propagazione delle intestazioni con Gateway - Amazon Bedrock AgentCore

Propagazione delle intestazioni con Gateway

Cos'è la propagazione dei parametri di intestazione e query

La propagazione delle intestazioni si riferisce all'inoltro sistematico di intestazioni HTTP selettive dalle richieste in entrata attraverso il gateway a destinazioni configurate e all'inoltro selettivo delle intestazioni di risposta al client. Analogamente alla propagazione delle intestazioni, la propagazione dei parametri di query consente l'inoltro dei parametri di query URL dalle richieste in entrata alle destinazioni configurate. Questa funzionalità può essere utilizzata nei casi d'uso in cui è necessario scambiare contesto, autenticazione, tracciamento e altre informazioni critiche tra client e destinazioni. Le intestazioni pre-consentite, fornite nella chiamata dello strumento di invoke a gateway o inviate da Custom Interceptor lambda, verranno inoltrate ai target specifici.

Questa funzionalità funziona come un modello di responsabilità condivisa:

  • AWS la responsabilità è passare in modo sicuro le intestazioni e i parametri di interrogazione che avete consentito per i vostri obiettivi.

  • È responsabilità dell'utente prestare attenzione e consentire la propagazione solo delle intestazioni essenziali per gli obiettivi, garantendo che soddisfino i requisiti di sicurezza e funzionali.

Restrizioni relative all'intestazione

Per mantenere la sicurezza e prevenire l'esposizione di informazioni riservate, le seguenti intestazioni sono limitate e non possono essere configurate per la propagazione:

Autorizzazione*

Proxy-Authorization

WWW-Authenticate

Accettare

Accept-Charset

Accept-Encoding

Accept-Language

Content-Type

Content-Length

Content-Encoding

Content-Language

Content-Location

Content-Range

Cache-Control

ETag

Scade

If-Match

If-Modified-Since

If-None-Match

If-Range

If-Unmodified-Since

Last-Modified

Pragma

Variare

Connessione

Keep-Alive

Proxy-Connection

Upgrade

Host

User-Agent

Referente

Da

Intervallo

Accept-Ranges

Transfer-Encoding

TE

Trailer

Server

Data

Location (Ubicazione)

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

Origin

Accept-CH

Accept-CH-Lifetime

DPR

Larghezza

Viewport-Width

Downlink

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

:metodo

:percorso

:schema

: autorità

: stato

Link

Sec-WebSocket-Key

Sec-WebSocket-Accept

Sec-WebSocket-Version

Sec-WebSocket-Protocol

Sec-WebSocket-Extensions

  • L'intestazione di autorizzazione non può essere inserita nell'elenco consentito durante la creazione del target. Tuttavia verrà inoltrato al bersaglio quando fornito da un intercettore lambda. Vedi Header propagation from interceptor lambda per i dettagli.

Importante

Oltre alle intestazioni con restrizioni menzionate sopra, le intestazioni fornite nelle chiavi API e nello schema dell'API REST non possono essere configurate per la propagazione delle intestazioni.

Alle intestazioni consentite si applicano regole di convalida aggiuntive:

  • Massimo 10 intestazioni di richiesta, 10 intestazioni di risposta e 10 parametri di query per destinazione per prevenire abusi e mantenere le prestazioni

  • I nomi delle intestazioni devono contenere solo caratteri alfanumerici, trattini e caratteri di sottolineatura (regex:) ^[a-zA-Z0-9_-]+$

  • I valori delle intestazioni sono limitati a un massimo di 4 KB per evitare l'esaurimento della memoria

  • I valori dell'intestazione devono contenere solo caratteri ASCII stampabili

  • Le intestazioni che iniziano con X-Amzn- sono proibite (ad eccezione delle intestazioni -*) X-Amzn-Bedrock-AgentCore-Runtime-Custom

Configurazione della propagazione dei parametri di intestazione e query

È possibile configurare i parametri di intestazione e query a livello di destinazione durante la creazione o l'aggiornamento delle destinazioni del gateway. Le intestazioni e i parametri di query vengono specificati per destinazione, assicurando che ogni destinazione riceva solo le intestazioni necessarie.

Target-level configurazione

Configura la propagazione dell'intestazione aggiungendo allowedRequestHeaders allowedQueryParameters campi e a quelli del tuo target: allowedResponseHeaders 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" ] } }

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

Propagazione dell'intestazione dall'interceptor lambda

Quando si utilizzano interceptor lambda personalizzati con il gateway, è possibile controllare dinamicamente la propagazione delle intestazioni includendo le intestazioni nella risposta lambda dell'interceptor.

Come funziona la propagazione degli interceptor header

Gli interceptor lambda possono influenzare la propagazione dell'intestazione nei seguenti modi:

  • Sovrascrittura dell'intestazione di autorizzazione: l'Authorizationintestazione della risposta lambda dell'interceptor viene propagata automaticamente alla destinazione. Sebbene l'Authorizationintestazione non possa essere configurata nella lista consentita del target, verrà inoltrata alla destinazione quando fornita da un interceptor lambda.

    Ad esempio, se hai aggiunto un fornitore di credenziali alla destinazione che fornisce un token di autorizzazione simile Authorization: Bearer client-token a quello fornito dall'interceptor lambdaAuthorization: Bearer refreshed-token, il valore dell'interceptor lambda verrà inoltrato alla destinazione. Bearer refreshed-token

  • Iniezione di intestazione personalizzata: le intestazioni aggiuntive della risposta lambda dell'interceptor vengono unite alla lista degli intestazioni di destinazione configurata.

  • Precedenza delle intestazioni: le intestazioni fornite da Interceptor lambda hanno la precedenza sulle intestazioni fornite dal client in caso di conflitti.

    Ad esempio, se si abilita l'intestazione allowlist nella configurazione di destinazione e la richiesta x-tenant-id in entrata fornisce ciò che fornisce x-tenant-id: tenant-123 l'interceptor lambda, il valore dell'interceptor lambda verrà inoltrato alla destinazione. x-tenant-id: tenant-456 tenant-456

  • Convalida di sicurezza: tutte le intestazioni fornite da lambda sono soggette alle stesse regole di convalida delle intestazioni configurate. Ad eccezione dell'intestazione Authorization, tutte le altre intestazioni devono essere elencate nell'elenco consentito durante la creazione del target affinché vengano inoltrate alle destinazioni.

Implementazione della propagazione delle intestazioni negli intercettori

Configura il tuo interceptor lambda per restituire le intestazioni che devono essere propagate al bersaglio:

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

I casi d'uso più comuni per la propagazione degli interceptor header includono:

Recupero delle credenziali

Recupera token di breve durata da archivi sicuri e inseriscili come intestazioni di autorizzazione, evitando l'esposizione delle credenziali nelle applicazioni client.

Iniezione di contesto

Aggiungi identificatori del tenant, contesto organizzativo o attributi utente derivati da dichiarazioni utente autenticate anziché affidarti ai valori forniti dal cliente.

Trasformazione dell'intestazione

Trasforma o ripulisci le intestazioni in base alla logica aziendale, ai requisiti di conformità o alle politiche di sicurezza prima che raggiungano l'obiettivo.

Routing dinamico

Inserisci suggerimenti di routing, flag di funzionalità o intestazioni di A/B test in base all'analisi in tempo reale degli attributi dell'utente o dello stato del sistema.

Considerazioni relative alla sicurezza

Quando implementi la propagazione delle intestazioni con interceptor lambda, segui queste best practice di sicurezza:

  • Convalida le fonti delle intestazioni: propaga solo le intestazioni che sono configurate in modo esplicito nella lista consentita di destinazione o restituite da trusted interceptor lambda

  • Disinfetta i dati sensibili: rimuovi o maschera le PII e le informazioni sensibili prima di inoltrare le intestazioni a server MCP esterni

  • Usa il privilegio minimo: configura i ruoli IAM lambda di Interceptor con le autorizzazioni minime richieste per il recupero delle credenziali e il recupero del contesto

  • Implementa la registrazione degli audit: registra le trasformazioni degli header e le attività di recupero delle credenziali per il monitoraggio della sicurezza e la conformità

  • Convalida il contenuto delle intestazioni: assicurati che le intestazioni generate da lambda soddisfino le stesse regole di convalida delle intestazioni configurate

Best practice

Segui queste best practice quando implementi la propagazione delle intestazioni:

Usa una configurazione specifica per la destinazione

Configura le intestazioni per target anziché globalmente. Target diversi possono richiedere intestazioni diverse e la configurazione specifica della destinazione offre un migliore isolamento di sicurezza.

Ridurre al minimo il numero di intestazioni

Propaga solo le intestazioni effettivamente necessarie al target. Un numero eccessivo di intestazioni aumenta la dimensione della richiesta e il sovraccarico di elaborazione.

Usa nomi di intestazione semantici

Scegli nomi di intestazione descrittivi che ne indichino chiaramente lo scopo, ad esempio x-correlation-id per la tracciabilità o la multi-tenancy. x-tenant-id

Implementa una corretta gestione degli errori

Gestisci i casi in cui le intestazioni richieste sono mancanti o non valide. Valuta se non superare la richiesta o fornire valori predefiniti.

Monitora l'utilizzo dell'intestazione

Utilizza le funzionalità di osservabilità del gateway per monitorare quali intestazioni vengono propagate e identificare eventuali problemi relativi alla convalida o all'elaborazione delle intestazioni.

Prova la propagazione delle intestazioni

Verifica che le intestazioni vengano propagate correttamente ai tuoi obiettivi durante lo sviluppo e il test. Utilizza strumenti come la registrazione delle richieste o il debug degli endpoint per convalidare il flusso di intestazione.