Menyiapkan nama domain khusus untuk titik akhir Gateway
Secara default, titik akhir Gateway disediakan dengan nama domain AWS-managed dalam format. <gateway-id>.gateway.bedrock-agentcore.<region>.amazonaws.com Untuk lingkungan produksi atau untuk menciptakan pengalaman yang lebih ramah pengguna, Anda mungkin ingin menggunakan nama domain khusus untuk titik akhir gateway Anda. Bagian ini memandu Anda melalui pengaturan nama domain khusus menggunakan Amazon CloudFront sebagai proxy terbalik.
Prasyarat
Sebelum Anda mulai, pastikan Anda memiliki:
-
Titik akhir Gateway yang berfungsi
-
Delegasi DNS (jika domain Route 53 Anda harus dapat dijangkau secara publik)
-
AWS CDK diinstal dan dikonfigurasi (jika mengikuti pendekatan CDK)
-
Izin IAM yang sesuai untuk membuat dan mengelola CloudFront distribusi, zona yang dihosting Route 53, dan sertifikat ACM
Ikhtisar solusi
Solusinya melibatkan komponen berikut:
-
Route 53 Hosted Zone: Mengelola catatan DNS untuk domain kustom Anda
-
Sertifikat ACM: Menyediakan SSL/TLS enkripsi untuk domain kustom Anda
-
CloudFront Distribusi: Bertindak sebagai proxy terbalik, meneruskan permintaan dari domain kustom Anda ke titik akhir Gateway
-
Route 53 A Record: Memetakan domain kustom Anda ke CloudFront distribusi
Langkah-langkah berikut akan memandu Anda melalui pengaturan komponen ini menggunakan AWS CDK.
Langkah-langkah implementasi
Langkah 1: Buat zona yang dihosting Route 53
Pertama, buat zona yang dihosting Route 53 untuk domain kustom Anda:
import { RemovalPolicy } from 'aws-cdk-lib'; import { PublicHostedZone } from 'aws-cdk-lib/aws-route53'; const domainName = 'my.example.com'; const hostedZone = new PublicHostedZone(this, 'HostedZone', { zoneName: domainName, }); this.hostedZone.applyRemovalPolicy(RemovalPolicy.RETAIN);
catatan
Kami menerapkan kebijakan penghapusan RETAIN untuk mencegah penghapusan zona yang dihosting secara tidak sengaja selama pembaruan tumpukan atau penghapusan.
Langkah 2: Buat DNS-validated sertifikat
Selanjutnya, buat SSL/TLS sertifikat untuk domain kustom Anda menggunakan AWS Certificate Manager (ACM) dengan validasi DNS:
import { RemovalPolicy } from 'aws-cdk-lib'; import { Certificate, CertificateValidation } from 'aws-cdk-lib/aws-certificatemanager'; const certificate = new Certificate(this, 'SSLCertificate', { domainName: domainName, // route53 hosted zone domain name from step 1 validation: CertificateValidation.fromDns(hostedZone), // route53 hosted zone from step 1 }); this.certificate.applyRemovalPolicy(RemovalPolicy.RETAIN);
Validasi DNS secara otomatis membuat catatan validasi yang diperlukan di zona host Route 53 Anda.
Langkah 3: Buat CloudFront distribusi
Buat CloudFront distribusi untuk bertindak sebagai proxy terbalik untuk titik akhir Gateway Anda:
import { AllowedMethods, CachePolicy, Distribution, OriginProtocolPolicy, ViewerProtocolPolicy } from 'aws-cdk-lib/aws-cloudfront'; import { HttpOrigin } from 'aws-cdk-lib/aws-cloudfront-origins'; const bedrockAgentCoreGatewayHostName = '<mymcpserver>.gateway.bedrock-agentcore.<region>.amazonaws.com' const bedrockAgentCoreGatewayPath = '/mcp' // can also be left undefined, depending on your requirement const distribution = new Distribution(this, 'Distribution', { defaultBehavior: { origin: new HttpOrigin(bedrockAgentCoreGatewayHostName, { protocolPolicy: OriginProtocolPolicy.HTTPS_ONLY, originPath: bedrockAgentCoreGatewayPath, }), viewerProtocolPolicy: ViewerProtocolPolicy.HTTPS_ONLY, cachePolicy: CachePolicy.CACHING_DISABLED, // important since caching is enabled by default and hence is not suitable for a reverse proxy allowedMethods: AllowedMethods.ALLOW_ALL, }, domainNames: [domainName], // route53 hosted zone domain name from step 1 certificate: certificate, // ssl certificate for the route53 domain from step 2 });
penting
Setel cachePolicy: CachePolicy.CACHING_DISABLED untuk memastikan bahwa respons tersebut CloudFront tidak menyimpan cache dari titik akhir Gateway Anda, yang penting untuk interaksi API dinamis.
Ganti <mymcpserver> dengan ID gateway Anda dan <region> dengan AWS Wilayah Anda (mis.,us-east-1).
Langkah 4: Buat catatan Route 53 A
Buat Route 53 Catatan yang mengarahkan domain kustom Anda ke CloudFront distribusi:
import { ARecord, RecordTarget } from 'aws-cdk-lib/aws-route53'; import { CloudFrontTarget } from 'aws-cdk-lib/aws-route53-targets'; const aRecord = new ARecord(this, 'AliasRecord', { zone: hostedZone, // route53 hosted zone from step 1 recordName: domainName, // route53 hosted zone domain name from step 1 target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), // cloudfront distribution from step 3 });
Ini membuat catatan alias yang memetakan domain kustom Anda ke CloudFront distribusi.
Langkah 5: Menyebarkan infrastruktur Anda
Terapkan tumpukan CDK Anda untuk membuat sumber daya:
cdk deploy
Proses penyebaran mungkin memakan waktu, terutama untuk validasi sertifikat dan pembuatan CloudFront distribusi.
Menguji domain kustom Anda
Setelah menerapkan infrastruktur Anda, verifikasi bahwa domain kustom Anda dikonfigurasi dengan benar:
Verifikasi resolusi DNS
Gunakan dig perintah untuk memverifikasi bahwa domain kustom Anda menyelesaikan distribusi: CloudFront
dig my.example.com
Output harus menunjukkan bahwa domain Anda menyelesaikan ke CloudFront alamat IP.
Verifikasi sertifikat SSL
Gunakan curl untuk memverifikasi bahwa sertifikat SSL dikonfigurasi dengan benar:
curl -v https://my.example.com
Output harus menunjukkan jabat tangan SSL yang berhasil tanpa kesalahan sertifikat.
Mengkonfigurasi klien MCP
Setelah domain kustom Anda disiapkan dan diverifikasi, Anda dapat mengonfigurasi klien MCP Anda untuk menggunakannya:
Konfigurasi kursor
Untuk Kursor, perbarui file konfigurasi Anda:
{ "mcpServers": { "my-mcp-server": { "url": "https://my.example.com" } } }
Klien MCP lainnya
Untuk klien MCP yang tidak mendukung HTTP yang dapat dirampingkan secara native:
{ "mcpServers": { "my-mcp-server": { "command": "/path/to/uvx", "args": [ "mcp-proxy", "--transport", "streamablehttp", "https://my.example.com" ] } } }
Pertimbangan tambahan
- Implikasi biaya
-
Menggunakan CloudFront sebagai proxy terbalik menimbulkan biaya tambahan untuk transfer data dan penanganan permintaan. Tinjau model CloudFront penetapan harga untuk memahami implikasi biaya untuk kasus penggunaan spesifik Anda.
- Pertimbangan keamanan
-
Pertimbangkan untuk menerapkan langkah-langkah keamanan tambahan seperti:
-
Aturan WAF untuk melindungi titik akhir Anda dari eksploitasi web umum
-
Geo-restrictions untuk membatasi akses ke wilayah geografis tertentu
-
Header khusus atau penandatanganan permintaan untuk menambahkan lapisan otentikasi tambahan
-
- Pencatatan dan pemantauan
-
Aktifkan log CloudFront akses dan konfigurasikan CloudWatch alarm untuk memantau kesehatan dan kinerja pengaturan domain kustom Anda.
- Perpanjangan sertifikat
-
Sertifikat ACM yang dikeluarkan melalui validasi DNS diperpanjang secara otomatis selama catatan DNS tetap ada. Pastikan Anda tidak menghapus catatan validasi.
- Titik akhir sumber daya yang dilindungi OAuth dengan domain khusus
-
Secara default,
/.well-known/oauth-protected-resourcetitik akhir mengembalikan URL sumber daya yang berisi domain gateway, bukan domain kustom Anda. Hal ini dapat menyebabkan klien OAuth gagal otentikasi saat menggunakan domain khusus.Untuk mengatasi masalah ini, Anda dapat menerapkan fungsi Lambda @Edge yang mencegat respons penemuan OAuth dan menghasilkan respons baru dengan URL domain kustom yang benar. Berikut pendekatannya:
-
Gunakan Lambda @Edge dengan tipe acara ORIGIN_RESPONSE: Buat fungsi yang memicu respons asal untuk mencegat respons titik akhir sumber daya yang dilindungi OAuth.
-
Hasilkan respons baru: Lambda @Edge tidak dapat membaca badan respons asal, jadi alih-alih memodifikasi respons yang ada, hasilkan respons JSON yang sama sekali baru dengan domain khusus.
-
Kaitkan dengan CloudFront perilaku: Konfigurasikan fungsi Lambda @Edge untuk memicu secara khusus untuk pola
/.well-known/oauth-protected-resourcejalur.Setelah menerapkan solusi ini, titik akhir sumber daya yang dilindungi OAuth akan mengembalikan domain kustom yang benar:
curl https://my-custom-domain.com/.well-known/oauth-protected-resource { "authorization_servers": ["https://my-org.okta.com/oauth2/default"], "resource": "https://my-custom-domain.com/mcp" }catatan
Sementara Lambda @Edge memberikan solusi untuk masalah ini, menerapkan domain khusus untuk AgentCore Gateway tanpa dukungan bawaan memerlukan kompleksitas tambahan yang mungkin tidak optimal untuk semua pelanggan. Pertimbangkan pendekatan ini sebagai solusi hingga dukungan asli untuk penemuan OAuth dengan domain khusus tersedia.
-
Pemecahan masalah
- Masalah resolusi DNS
-
Jika domain kustom Anda tidak diselesaikan dengan benar:
-
Verifikasi bahwa catatan A telah dikonfigurasi dengan benar di zona yang dihosting Route 53
-
Periksa apakah server nama domain Anda disetel dengan benar di registrar domain Anda
-
Berikan waktu untuk propagasi DNS (hingga 48 jam dalam beberapa kasus)
-
- Masalah sertifikat SSL
-
Jika Anda mengalami kesalahan sertifikat SSL:
-
Verifikasi bahwa sertifikat diterbitkan dan aktif di konsol ACM
-
Periksa apakah sertifikat terkait dengan CloudFront distribusi Anda dengan benar
-
Pastikan sertifikat mencakup nama domain yang tepat yang Anda gunakan
-
- Masalah konektivitas gateway
-
Jika domain kustom Anda tidak terhubung ke gateway Anda:
-
Verifikasi bahwa domain asal dan jalur dalam CloudFront distribusi Anda sudah benar
-
Periksa apakah titik akhir gateway Anda dapat diakses secara langsung
-
Tinjau log CloudFront distribusi untuk kesalahan apa pun
-
Kesimpulan
Menyiapkan nama domain khusus untuk titik akhir Gateway meningkatkan tampilan profesional aplikasi Anda dan memberikan fleksibilitas dalam mengelola titik akhir API Anda. Dengan mengikuti langkah-langkah yang diuraikan dalam panduan ini, Anda dapat membuat konfigurasi domain kustom yang aman dan andal menggunakan CloudFront sebagai proxy terbalik.
Untuk informasi selengkapnya tentang fitur dan kemampuan Gateway, lihat Amazon Bedrock AgentCore Gateway: Menghubungkan alat dan sumber daya lainnya dengan aman ke Gateway Anda.