View a markdown version of this page

Propagasi header dengan Gateway - Batuan Dasar Amazon AgentCore

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, penelusuran, dan informasi penting lainnya antara klien dan target. Header yang telah diijinkan sebelumnya yang disediakan dalam panggilan alat pemanggilan 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 meneruskan header dan parameter kueri dengan aman yang telah Anda izinkan untuk target Anda.

  • Tanggung jawab Anda adalah berhati-hati dan hanya mengizinkan header tersebut untuk propagasi yang penting bagi 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

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

asal

Accept-CH

Accept-CH-Lifetime

DPR

Lebar

Viewport-Width

Downlink

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 terdaftar selama pembuatan target. Namun itu akan diteruskan ke target bila disediakan oleh lambda pencegat. Lihat Propagasi header dari interceptor 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 hanya berisi karakter alfanumerik, tanda hubung, dan garis bawah (regex:) ^[a-zA-Z0-9_-]+$

  • Nilai header dibatasi hingga maksimum 4KB untuk mencegah kelelahan memori

  • Nilai header harus berisi hanya karakter ASCII yang dapat dicetak

  • Header yang dimulai dengan X-Amzn- dilarang (kecuali untuk X-Amzn-Bedrock-AgentCore-Runtime-Custom -* header)

Mengkonfigurasi propagasi parameter header dan kueri

Anda dapat mengonfigurasi parameter header dan kueri 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 Anda: 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" ] } }

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 interceptor lambda

Saat menggunakan lambda pencegat khusus dengan gateway Anda, Anda dapat mengontrol propagasi header secara dinamis dengan menyertakan header dalam respons lambda pencegat Anda.

Cara kerja propagasi header interceptor

Interceptor lambda dapat mempengaruhi propagasi header dengan cara berikut:

  • Penggantian header otorisasi: Authorization Header dari respons lambda pencegat secara otomatis disebarkan ke target. Meskipun Authorization header tidak dapat dikonfigurasi dalam daftar izin target, itu akan diteruskan ke target ketika disediakan oleh lambda pencegat.

    Misalnya, jika Anda telah menambahkan penyedia kredensi ke target yang menyediakan token otorisasi seperti Authorization: Bearer client-token dan lambda pencegat yang disediakanAuthorization: Bearer refreshed-token, nilai Bearer refreshed-token dari 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 lebih diutamakan daripada header yang disediakan klien jika terjadi konflik.

    Misalnya, jika Anda mengizinkan header daftar x-tenant-id dalam konfigurasi target, dan permintaan masuk menyediakan x-tenant-id: tenant-123 saat lambda pencegat menyediakanx-tenant-id: tenant-456, nilai tenant-456 dari lambda pencegat akan diteruskan ke target.

  • Validasi keamanan: Semua header yang disediakan lambda tunduk pada aturan validasi yang sama dengan 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 suntikkan sebagai header Otorisasi, mencegah eksposur kredensi dalam aplikasi klien.

Injeksi konteks

Tambahkan pengenal 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

Menyuntikkan petunjuk perutean, flag 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 dalam daftar izin target Anda atau dikembalikan oleh lambda pencegat tepercaya

  • Sanitasi data sensitif: Hapus atau tutupi PII dan informasi sensitif sebelum meneruskan header ke server MCP eksternal

  • Gunakan hak istimewa paling sedikit: 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 kredensi untuk pemantauan dan kepatuhan keamanan

  • 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 khusus 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 overhead pemrosesan.

Gunakan nama header semantik

Pilih nama header deskriptif yang secara jelas menunjukkan tujuannya, seperti x-correlation-id untuk melacak atau x-tenant-id untuk multi-tenancy.

Menerapkan penanganan kesalahan yang tepat

Menangani kasus di mana header yang diperlukan hilang atau tidak valid. Pertimbangkan apakah akan gagal permintaan atau memberikan nilai default.

Memantau penggunaan header

Gunakan fitur observabilitas gateway untuk memantau header mana yang sedang disebarkan dan mengidentifikasi masalah apa pun dengan validasi atau pemrosesan header.

Uji propagasi header

Verifikasi bahwa header disebarkan dengan benar ke target Anda selama pengembangan dan pengujian. Gunakan alat seperti pencatatan permintaan atau titik akhir debugging untuk memvalidasi alur header.