Einrichtung benutzerdefinierter Domainnamen für Gateway-Endpunkte
Standardmäßig werden Gateway-Endpunkte mit einem AWS-verwalteten Domänennamen im folgenden Format bereitgestellt. <gateway-id>.gateway.bedrock-agentcore.<region>.amazonaws.com Für Produktionsumgebungen oder um ein benutzerfreundlicheres Erlebnis zu schaffen, möchten Sie möglicherweise einen benutzerdefinierten Domainnamen für Ihren Gateway-Endpunkt verwenden. Dieser Abschnitt führt Sie durch die Einrichtung eines benutzerdefinierten Domainnamens mit Amazon CloudFront als Reverse-Proxy.
Voraussetzungen
Stellen Sie vor Beginn sicher, dass Sie über Folgendes verfügen:
-
Ein funktionierender Gateway-Endpunkt
-
DNS-Delegierung (wenn Ihre Route 53 53-Domain öffentlich erreichbar sein muss)
-
AWS CDK wurde installiert und konfiguriert (wenn Sie dem CDK-Ansatz folgen)
-
Entsprechende IAM-Berechtigungen zum Erstellen und Verwalten von CloudFront Verteilungen, Route 53 53-Hosting-Zonen und ACM-Zertifikaten
Übersicht über die Lösung
Die Lösung umfasst die folgenden Komponenten:
-
Route 53 Hosted Zone: Verwaltet DNS-Einträge für Ihre benutzerdefinierte Domain
-
ACM-Zertifikat: Bietet SSL/TLS Verschlüsselung für Ihre benutzerdefinierte Domain
-
CloudFront Verteilung: Fungiert als Reverse-Proxy und leitet Anfragen von Ihrer benutzerdefinierten Domain an den Gateway-Endpunkt weiter
-
Route 53 A Record: Ordnet Ihre benutzerdefinierte Domain der CloudFront Distribution zu
Die folgenden Schritte führen Sie durch die Einrichtung dieser Komponenten mithilfe von AWS CDK.
Implementierungsschritte
Schritt 1: Erstellen Sie eine Route 53 53-Hosting-Zone
Erstellen Sie zunächst eine Route 53 53-Hosting-Zone für Ihre benutzerdefinierte Domain:
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);
Anmerkung
Wir wenden eine Entfernungsrichtlinie von RETAIN an, um ein versehentliches Löschen der gehosteten Zone bei Stack-Updates oder beim Löschen zu verhindern.
Schritt 2: Erstellen Sie ein DNS-validated Zertifikat
Erstellen Sie als Nächstes mithilfe des SSL/TLS Certificate Manager (ACM) mit DNS-Validierung ein AWS Zertifikat für Ihre benutzerdefinierte Domain:
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);
Die DNS-Validierung erstellt automatisch die erforderlichen Validierungsdatensätze in Ihrer Route 53 53-Hosting-Zone.
Schritt 3: Erstellen Sie eine CloudFront Distribution
Erstellen Sie eine CloudFront Verteilung, die als Reverse-Proxy für Ihren Gateway-Endpunkt fungiert:
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 });
Wichtig
Stellen cachePolicy: CachePolicy.CACHING_DISABLED Sie sicher, dass Antworten von Ihrem Gateway-Endpunkt CloudFront nicht zwischengespeichert werden, was für dynamische API-Interaktionen wichtig ist.
<mymcpserver>Ersetzen Sie es durch Ihre Gateway-ID und <region> durch Ihre AWS Region (z. B.us-east-1).
Schritt 4: Erstellen Sie einen Route 53 A-Datensatz
Erstellen Sie einen Route 53 A-Datensatz, der Ihre benutzerdefinierte Domain auf die CloudFront Verteilung verweist:
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 });
Dadurch wird ein Alias-Datensatz erstellt, der Ihre benutzerdefinierte Domain der CloudFront Distribution zuordnet.
Schritt 5: Stellen Sie Ihre Infrastruktur bereit
Stellen Sie Ihren CDK-Stack bereit, um die Ressourcen zu erstellen:
cdk deploy
Der Bereitstellungsprozess kann einige Zeit in Anspruch nehmen, insbesondere für die Zertifikatsvalidierung und die Erstellung der CloudFront Verteilung.
Testen Sie Ihre benutzerdefinierte Domain
Stellen Sie nach der Bereitstellung Ihrer Infrastruktur sicher, dass Ihre benutzerdefinierte Domain ordnungsgemäß konfiguriert ist:
Überprüfen Sie die DNS-Auflösung
Verwenden Sie den dig Befehl, um zu überprüfen, ob Ihre benutzerdefinierte Domain in die CloudFront Distribution aufgelöst wird:
dig my.example.com
Die Ausgabe sollte zeigen, dass Ihre Domain in die IP-Adressen aufgelöst CloudFront wird.
Überprüfen Sie das SSL-Zertifikat
Verwenden Sie diese Option, curl um zu überprüfen, ob das SSL-Zertifikat ordnungsgemäß konfiguriert ist:
curl -v https://my.example.com
Die Ausgabe sollte einen erfolgreichen SSL-Handshake ohne Zertifikatsfehler anzeigen.
Konfiguration von MCP-Clients
Sobald Ihre benutzerdefinierte Domain eingerichtet und verifiziert ist, können Sie Ihre MCP-Clients so konfigurieren, dass sie sie verwenden:
Cursor-Konfiguration
Aktualisieren Sie für Cursor Ihre Konfigurationsdatei:
{ "mcpServers": { "my-mcp-server": { "url": "https://my.example.com" } } }
Andere MCP-Clients
Für MCP-Clients, die streambares HTTP nicht nativ unterstützen:
{ "mcpServers": { "my-mcp-server": { "command": "/path/to/uvx", "args": [ "mcp-proxy", "--transport", "streamablehttp", "https://my.example.com" ] } } }
Weitere Überlegungen
- Auswirkungen auf die Kosten
-
Die Verwendung CloudFront als Reverse-Proxy verursacht zusätzliche Kosten für die Datenübertragung und die Bearbeitung von Anfragen. Machen Sie sich mit dem CloudFront Preismodell vertraut, um die Auswirkungen auf die Kosten für Ihren speziellen Anwendungsfall zu verstehen.
- Überlegungen zur Sicherheit
-
Erwägen Sie die Implementierung zusätzlicher Sicherheitsmaßnahmen wie:
-
WAF-Regeln zum Schutz Ihres Endpunkts vor gängigen Web-Exploits
-
Geo-restrictions um den Zugriff auf bestimmte geografische Regionen zu beschränken
-
Benutzerdefinierte Header oder Anforderungssignierung, um eine zusätzliche Authentifizierungsebene hinzuzufügen
-
- Überwachung und Protokollierung
-
Aktivieren Sie CloudFront Zugriffsprotokolle und konfigurieren Sie CloudWatch Alarme, um den Zustand und die Leistung Ihres benutzerdefinierten Domain-Setups zu überwachen.
- Erneuerung des Zertifikats
-
Im Rahmen der DNS-Validierung ausgestellte ACM-Zertifikate werden automatisch erneuert, solange die DNS-Einträge bestehen bleiben. Stellen Sie sicher, dass Sie die Validierungsdatensätze nicht löschen.
- OAuth-geschützter Ressourcenendpunkt mit benutzerdefinierten Domänen
-
Standardmäßig gibt der
/.well-known/oauth-protected-resourceEndpunkt eine Ressourcen-URL zurück, die die Gateway-Domäne anstelle Ihrer benutzerdefinierten Domain enthält. Dies kann dazu führen, dass bei OAuth-Clients die Authentifizierung fehlschlägt, wenn sie benutzerdefinierte Domänen verwenden.Um dieses Problem zu beheben, können Sie eine Lambda @Edge -Funktion implementieren, die die OAuth-Discovery-Antwort abfängt und eine neue Antwort mit der richtigen benutzerdefinierten Domain-URL generiert. Hier ist der Ansatz:
-
Verwenden Sie Lambda @Edge mit dem Ereignistyp ORIGIN_RESPONSE: Erstellen Sie eine Funktion, die bei Ursprungsantworten ausgelöst wird, um die Antwort des OAuth-geschützten Ressourcenendpunkts abzufangen.
-
Generieren Sie eine neue Antwort: Lambda @Edge kann die ursprünglichen Antworttexte nicht lesen. Generieren Sie daher eine völlig neue JSON-Antwort mit der benutzerdefinierten Domain, anstatt die bestehende Antwort zu ändern.
-
Mit CloudFront Verhalten verknüpfen: Konfigurieren Sie die Lambda @Edge -Funktion so, dass sie speziell für das
/.well-known/oauth-protected-resourcePfadmuster ausgelöst wird.Nach der Implementierung dieser Lösung gibt der Endpunkt für geschützte OAuth-Ressourcen die richtige benutzerdefinierte Domäne zurück:
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" }Anmerkung
Lambda @Edge bietet zwar eine Lösung für dieses Problem, die Implementierung benutzerdefinierter Domänen für AgentCore Gateway ohne integrierten Support erfordert jedoch zusätzliche Komplexität, die möglicherweise nicht für alle Kunden optimal ist. Betrachten Sie diesen Ansatz als Problemumgehung, bis native Unterstützung für OAuth-Discovery mit benutzerdefinierten Domänen verfügbar wird.
-
Fehlerbehebung
- Probleme mit der DNS-Auflösung
-
Wenn Ihre benutzerdefinierte Domain nicht korrekt aufgelöst wird:
-
Stellen Sie sicher, dass der A-Eintrag in Ihrer von Route 53 gehosteten Zone korrekt konfiguriert ist
-
Vergewissern Sie sich, dass die Nameserver Ihrer Domain bei Ihrem Domain-Registrar korrekt eingerichtet sind
-
Planen Sie Zeit für die DNS-Weitergabe ein (in einigen Fällen bis zu 48 Stunden)
-
- Probleme mit dem SSL-Zertifikat
-
Wenn Sie auf Fehler beim SSL-Zertifikat stoßen:
-
Stellen Sie sicher, dass das Zertifikat ausgestellt wurde und in der ACM-Konsole aktiv ist
-
Vergewissern Sie sich, dass das Zertifikat korrekt mit Ihrer CloudFront Distribution verknüpft ist
-
Stellen Sie sicher, dass das Zertifikat genau den Domainnamen abdeckt, den Sie verwenden
-
- Probleme mit der Gateway-Konnektivität
-
Wenn Ihre benutzerdefinierte Domain keine Verbindung zu Ihrem Gateway herstellt:
-
Stellen Sie sicher, dass die Ursprungsdomain und der Pfad in Ihrer CloudFront Distribution korrekt sind
-
Vergewissern Sie sich, dass Ihr Gateway-Endpunkt direkt zugänglich ist
-
Überprüfen Sie die CloudFront Verteilungsprotokolle auf Fehler
-
Schlussfolgerung
Die Einrichtung eines benutzerdefinierten Domainnamens für Ihren Gateway-Endpunkt verbessert das professionelle Erscheinungsbild Ihrer Anwendung und bietet Flexibilität bei der Verwaltung Ihrer API-Endpunkte. Wenn Sie die in diesem Handbuch beschriebenen Schritte befolgen, können Sie eine sichere und zuverlässige benutzerdefinierte Domänenkonfiguration CloudFront als Reverse-Proxy erstellen.
Weitere Informationen zu den Funktionen und Fähigkeiten von Gateway finden Sie unter Amazon Bedrock AgentCore Gateway: Sicheres Verbinden von Tools und anderen Ressourcen mit Ihrem Gateway.