Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Propagasi header dengan Gateway
Apa itu propagasi parameter header dan query
Propagasi header mengacu pada penerusan sistematis header HTTP selektif dari permintaan masuk melalui gateway Anda ke target yang dikonfigurasi, dan penerusan selektif header respons kembali ke klien. Mirip dengan propagasi header, propagasi parameter kueri memungkinkan penerusan parameter kueri URL dari permintaan masuk ke target yang dikonfigurasi. Fitur ini dapat digunakan untuk kasus penggunaan di mana Anda perlu bertukar konteks, otentikasi, pelacakan, dan informasi penting lainnya antara klien dan target. Header pra-diizinkan yang disediakan dalam panggilan alat invoke ke gateway atau dikirim dari lambda pencegat khusus, akan diteruskan ke target tertentu.
Fitur ini beroperasi sebagai model tanggung jawab bersama:
-
AWS tanggung jawab adalah dengan aman meneruskan header dan parameter kueri yang telah Anda izinkan untuk target Anda.
-
Tanggung jawab Anda adalah untuk berhati-hati dan hanya mengizinkan daftar header untuk propagasi yang penting untuk target, memastikan mereka memenuhi persyaratan keamanan dan fungsional Anda.
Pembatasan header
Untuk menjaga keamanan dan mencegah paparan informasi sensitif, header berikut dibatasi dan tidak dapat dikonfigurasi untuk propagasi:
|
Otorisasi* |
|
Proxy-Authorization |
|
WWW-Authenticate |
|
Menerima |
|
Accept-Charset |
|
Accept-Encoding |
|
Accept-Language |
|
Content-Type |
|
Content-Length |
|
Content-Encoding |
|
Content-Language |
|
Content-Location |
|
Content-Range |
|
Cache-Control |
|
ETag |
|
Kedaluwarsa |
|
If-Match |
|
If-Modified-Since |
|
If-None-Match |
|
If-Range |
|
If-Unmodified-Since |
|
Last-Modified |
|
Pragma |
|
Bervariasi |
|
Koneksi |
|
Keep-Alive |
|
Proxy-Connection |
|
Peningkatan |
|
Host |
|
User-Agent |
|
Perujuk |
|
Dari |
|
Kisaran |
|
Accept-Ranges |
|
Transfer-Encoding |
|
TE |
|
Trailer |
|
Server |
|
Date |
|
Lokasi |
|
Retry-After |
|
Set-Cookie |
|
Kue |
|
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 |
|
asal |
|
Accept-CH |
|
Accept-CH-Lifetime |
|
DPR |
|
Lebar |
|
Viewport-Width |
|
Tautan turun |
|
DLL |
|
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 |
|
:metode |
|
:jalur |
|
:skema |
|
:otoritas |
|
:status |
|
Tautan |
|
Sec-WebSocket-Key |
|
Sec-WebSocket-Accept |
|
Sec-WebSocket-Version |
|
Sec-WebSocket-Protocol |
|
Sec-WebSocket-Extensions |
-
Header otorisasi tidak dapat diizinkan masuk daftar selama pembuatan target. Namun itu akan diteruskan ke target ketika disediakan oleh pencegat lambda. Lihat propag asi header dari pencegat lambda untuk detailnya.
penting
Selain header terbatas yang disebutkan di atas, header yang disediakan dalam kunci API dan skema REST API tidak dapat dikonfigurasi untuk propagasi header.
Aturan validasi tambahan berlaku untuk header yang diizinkan:
-
Maksimal 10 header permintaan, 10 header respons, dan 10 parameter kueri per target untuk mencegah penyalahgunaan dan mempertahankan kinerja
-
Nama header harus berisi hanya karakter alfanumerik, tanda hubung, dan garis bawah (regex:)
^[a-zA-Z0-9_-]+$ -
Nilai header dibatasi hingga maksimum 4KB untuk mencegah kehabisan memori
-
Nilai header harus berisi hanya karakter ASCII yang dapat dicetak
-
Header yang dimulai dengan
X-Amzn-dilarang (kecuali untuk header X-Amzn-Bedrock-AgentCore-Runtime-Custom -*)
Mengkonfigurasi propagasi parameter header dan query
Anda dapat mengonfigurasi parameter header dan query pada tingkat target saat membuat atau memperbarui target gateway. Header dan parameter kueri ditentukan per target, memastikan bahwa setiap target hanya menerima header yang dibutuhkannya.
Target-level konfigurasi
Konfigurasikan propagasi header dengan menambahkan allowedRequestHeadersallowedResponseHeaders,, dan allowedQueryParameters bidang ke target AndametadataConfiguration:
{ "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" ] } }
Menggunakan Python SDK:
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'] } )
Propagasi header dari pencegat lambda
Saat menggunakan lambda pencegat khusus dengan gateway Anda, Anda dapat mengontrol propagasi header secara dinamis dengan memasukkan header dalam respons lambda pencegat Anda.
Cara kerja propagasi header pencegat
Interceptor lambda dapat mempengaruhi propagasi header dengan cara berikut:
-
Penggantian header otorisasi:
AuthorizationHeader dari respons lambda pencegat secara otomatis disebarkan ke target. MeskipunAuthorizationheader tidak dapat dikonfigurasi dalam daftar izin target, itu akan diteruskan ke target ketika disediakan oleh lambda pencegat.Misalnya, jika Anda telah menambahkan penyedia kredensia ke target yang menyediakan token otorisasi seperti
Authorization: Bearer client-tokendan pencegat lambda menyediakanAuthorization: Bearer refreshed-token, nilaiBearer refreshed-tokendari lambda pencegat akan diteruskan ke target. -
Injeksi header khusus: Header tambahan dari respons lambda pencegat digabungkan dengan daftar izin header target yang dikonfigurasi.
-
Prioritas header: Header yang disediakan Interceptor lambda diutamakan daripada header yang disediakan klien jika terjadi konflik.
Misalnya, jika Anda allowlist header
x-tenant-iddalam konfigurasi target, dan permintaan masuk menyediakanx-tenant-id: tenant-123sementara lambda pencegat menyediakanx-tenant-id: tenant-456, nilaitenant-456dari lambda pencegat akan diteruskan ke target. -
Validasi keamanan: Semua header yang disediakan lambda tunduk pada aturan validasi yang sama seperti header yang dikonfigurasi. Kecuali untuk header Otorisasi, semua header lainnya harus diizinkan terdaftar selama pembuatan target agar dapat diteruskan ke target.
Menerapkan propagasi header di pencegat
Konfigurasikan lambda pencegat Anda untuk mengembalikan header yang harus disebarkan ke target:
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'] } } }
Kasus penggunaan umum untuk propagasi header pencegat meliputi:
- Pengambilan kredensi
-
Ambil token berumur pendek dari brankas aman dan masukkan sebagai header Otorisasi, mencegah paparan kredenSIAL dalam aplikasi klien.
- Injeksi konteks
-
Tambahkan pengidentifikasi penyewa, konteks organisasi, atau atribut pengguna yang berasal dari klaim pengguna yang diautentikasi daripada mempercayai nilai yang disediakan klien.
- Transformasi header
-
Mengubah atau membersihkan header berdasarkan logika bisnis, persyaratan kepatuhan, atau kebijakan keamanan sebelum mencapai target.
- Perutean dinamis
-
Suntikkan petunjuk perutean, tanda fitur, atau header A/B pengujian berdasarkan analisis real-time atribut pengguna atau status sistem.
Pertimbangan keamanan
Saat menerapkan propagasi header dengan lambda pencegat, ikuti praktik terbaik keamanan berikut:
-
Validasi sumber header: Hanya menyebarkan header yang secara eksplisit dikonfigurasi di daftar izin target Anda atau dikembalikan oleh lambda pencegat tepercaya
-
Membersihkan data sensitif: H apus atau tutupi PII dan informasi sensitif sebelum meneruskan header ke server MCP eksternal
-
Gunakan hak istimewa terkecil: Konfigurasikan peran IAM lambda pencegat dengan izin minimal yang diperlukan untuk pengambilan kredensi dan pengambilan konteks
-
Menerapkan pencatatan audit: Transformasi header log dan aktivitas pengambilan kredenSIAL untuk pemantauan keamanan dan kepatuhan
-
Validasi konten header: Pastikan header yang dihasilkan lambda memenuhi aturan validasi yang sama dengan header yang dikonfigurasi
Praktik terbaik
Ikuti praktik terbaik ini saat menerapkan propagasi header:
- Gunakan konfigurasi khusus target
-
Konfigurasikan header per target, bukan secara global. Target yang berbeda mungkin memerlukan header yang berbeda, dan konfigurasi spesifik target memberikan isolasi keamanan yang lebih baik.
- Minimalkan jumlah header
-
Hanya menyebarkan header yang benar-benar dibutuhkan oleh target. Header yang berlebihan meningkatkan ukuran permintaan dan biaya pemrosesan.
- Gunakan nama header semantik
-
Pilih nama header deskriptif yang jelas menunjukkan tujuannya, seperti
x-correlation-iduntuk penelusuran ataux-tenant-iduntuk multi-tenancy. - Menerapkan penanganan kesalahan yang tepat
-
Tangani kasus di mana header yang diperlukan hilang atau tidak valid. Pertimbangkan apakah akan gagal dalam permintaan atau memberikan nilai default.
- Memantau penggunaan header
-
Gunakan fitur observabilitas gateway untuk memantau header mana yang disebarkan dan mengidentifikasi masalah dengan validasi atau pemrosesan header.
- Uji propagasi header
-
Pastikan header disebarkan dengan benar ke target Anda selama pengembangan dan pengujian. Gunakan alat seperti log permintaan atau titik akhir debugging untuk memvalidasi aliran header.