View a markdown version of this page

Menyiapkan nama domain khusus untuk titik akhir Gateway - Batuan Dasar Amazon AgentCore

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-resource titik 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-resource jalur.

    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.