2017-11-28 9 views
2

Ich möchte API-Gateway-Anforderungen an einen Container in einem ECS-Cluster weitergeben. Da das API-Gateway nicht in einer Sicherheitsgruppe platziert werden kann, muss ich den Dienst über einen ALB-Lastenausgleich im Internet bereitstellen. Um zu überprüfen, dass der Dienst nur Traffic von API GW verarbeitet, möchte ich client certificates verwenden.API-Gateway-Clientzertifikat in ELB überprüfen

Gibt es eine Möglichkeit, ELB das API-Gateway-Clientzertifikat für mich zu überprüfen und die SSL-Verbindung zu beenden, bevor die Anfrage an mein HTTP-Backend übergeben wird?

Wenn ELB das Zertifikat nicht überprüfen kann, scheint es mir, dass ich den Proxy auf einen TCP-Proxy "herabstufen" und den SSL-Handshake in meinem Dienst durchführen muss. Dazu muss ich jedoch das Zertifikat aus dem Dienst bereitstellen. Dies ist ein Problem, da ich von AWS bereitgestellte SSL-Zertifikate verwende und den privaten Schlüssel nicht habe. Also müsste ich nicht nur den SSL-Handshake neu erstellen, sondern auch mein SSL-Zertifikat von woanders beziehen, ist das korrekt?

In der Hoffnung, es gibt einen Weg mit geringem Aufwand, um die Vertrauensstellung zwischen API-Gateway und einem ECS-Dienst hinter einem ALB einzurichten.

+0

Entschuldigung für die verwirrende Verwendung von Abkürzungen - ich verwende 'AWS :: ElasticLoadBalancingV2 :: LoadBalancer', nicht die alte. Dies ist, was ich als "ELB" bezeichne, was ich denke, sollte besser "ALB" sein? –

Antwort

0

Leider unterstützt ELB nicht die Validierung des Client-Zertifikats für Sie. Sie können eine SSL-Terminierung für Ihren Dienst implementieren und den ELB im TCP-Modus verwenden (oder den neueren NLB verwenden). Sie benötigen den privaten Schlüssel des Clientzertifikats nicht. Sie fügen einfach den öffentlichen Schlüssel/das Zertifikat Ihrer vertrauenswürdigen Zertifizierungsstelle auf dem Dienst hinzu, sodass der Dienst nur dem API GW-Clientzertifikat vertraut.

+0

Jack, wissen Sie, ob AWS PrivateLink hier angewendet werden kann, um Vertrauen aufzubauen? Außerdem gibt es eine weitere Frage zur Vertrauensstellung (obwohl nicht mit Zertifikaten verbunden): Gibt es eine Möglichkeit, das Integrations-Backend auf http zu konfigurieren, das auf EC2 gehostet wird, das in VPC gesperrt ist (ohne öffentliche IP-Adresse)? – Nicholas

+0

Der private Schlüssel, über den ich spreche, ist für das SSL-Zertifikat, nicht das Client-Zertifikat. Um das Zertifikat zu verifizieren, muss ich den Datenverkehr über einen NLB leiten, aber dann muss der Dienst ein SSL-Zertifikat bereitstellen, richtig? Und ich kann das von AWS bereitgestellte nicht verwenden, das wir derzeit verwenden, um SSL auf dem ALB zu beenden, da ich seinen privaten Schlüssel nicht abrufen kann. Vielleicht (hoffentlich) verstehe ich etwas falsch? –

+0

Ah. Wie Sie vielleicht gesehen haben, ist VPC Link jetzt in API GW verfügbar, mit dem Sie Ihre Back-End-Verbindung ohne Client-Authentifizierungs-SSL sichern können. –