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-tokena 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-idin entrata fornisce ciò che forniscex-tenant-id: tenant-123l'interceptor lambda, il valore dell'interceptor lambda verrà inoltrato alla destinazione.x-tenant-id: tenant-456tenant-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-idper 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.