Amazon-API-Gateway vor der ELB-und ECS-Cluster
Ich versuche einen Amazon-API-Gateway vor der Application Load Balancer, die Salden traffic auf meinem ECS-Cluster, wo alle meine microservices bereitgestellt werden. Die motivation zur Nutzung der API-Gateway für die Verwendung eines benutzerdefinierten Vollmachtgeber durch eine lambda-Funktion.
System Diagramm
In Amazon Wörter (https://aws.amazon.com/api-gateway/faqs/): "Proxy-Anfragen an backend-Operationen müssen auch öffentlich über das Internet zugänglich". Dies zwingt mich zu machen, die ELB öffentliche (internet-facing) anstatt von internal. Dann brauche ich einen Weg, um sicherzustellen, dass nur der API-Gateway ist in der Lage, den Zugriff auf die ELB außerhalb der VPC.
Meine erste Idee war die Verwendung eines Client-Zertifikat in die API-Gatway, aber der ELB nicht scheinen, um es zu unterstützen.
Irgendwelche Ideen würde sehr geschätzt!
- Ich glaube nicht, dass es eine einfache Lösung. Entweder API-Gateway ist nicht für Sie, oder Sie haben etwas mehr zu tun. Lösungen zählen die Inbetriebnahme von HAProxy vor der ALB, der überprüfen Sie die client-Zertifikat. Oder eine lambda vor dem ALB aber, die verlangen, dass die gesamte Antwort gepuffert werden, eventuell zu einer Verlangsamung führen. Oder wenn Sie dann Spritzen, ein Geheimnis-header, um die Anforderung von API-Gateway auf der ALB. Dieses Geheimnis wird dann verifiziert werden in den backends. Ich würde nicht empfehlen, IP-whitelisting, da die IP-Bereiche für das API-Gateway sind nicht statisch und verändern kann brechen Zeug.
- Danke @doorstuck. Ich möchte vermeiden, die Integration neuer Komponenten wie der HAProxy. Ich denke, dieses Szenario (API-Gateway, ELB, ECS-Cluster) ist durchaus üblich. Nicht AWS stellen eine out-of-the-box-Lösung?
- API-Gateway ist mehr zugeschnitten auf die Lambda-Funktion-Dienste. Wenn vor der docker-Container mit hosted services habe ich das Gefühl, es fügt zu viel Latenz und Komplexität. Ich verwenden Sie einen anderen proxy anstelle von API-Gateway, da ich nur den proxy-Teil des API-Gateway sowieso. Ich benutzte Skipper durch Zalando-mit Erfolg. Aber wenn Sie verwenden möchten authorizers, cloudfront-caching, etc, dann vielleicht-API-Gateway ist noch immer der Weg zu gehen.
- Danke. Ich erstellte ein lambda-proxy-Anfragen, die in meiner VPC, aber ich wusste nicht wie dieser Ansatz, denn er fügt Latenz und Komplexität. Ich landete ersetzen der Amazon-API-Gateway, indem Sie die Open-Source-TyK.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies scheint eine riesige fehlende Stück für das API-gateway-Technologie, aufgrund der Art wie es geschoben ist. Nicht in der Lage, um in eine interne verbundenen server in VPC stark schränkt seine Nützlichkeit als ein Authentifizierungs-front-Tür für den Zugang zum internet.
FWIW, in der Azure API-Verwaltung unterstützt diese aus der box - Sie können die Annahme von Anfragen aus dem internet und rufen Sie direkt in Ihren virtuellen Netzwerk, die sonst abgeschirmt.
Der einzige Weg, dies möglich zu sein scheint unter AWS ist mit Lambdas, die fügt eine erhebliche Schicht von Komplexität, insb. wenn Sie benötigen support der verschiedenen binäre Protokolle.
Sieht aus wie diese Unterstützung wurde nun Hinzugefügt. Getestet noch nicht, YMMV:
https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/
Entschieden wir uns für einen header zu überprüfen, um sicherzustellen, dass der gesamte Verkehr kommt durch API-Gateway. Wir speichern ein Geheimnis in unseren apps Umgebungsvariablen und sagen Sie den API-Gateway zu injizieren, dass wenn wir es schaffen, die API. Dann prüfen Sie, dass der Schlüssel in unserer app.
Hier ist, was wir tun, für diese:
In unserem Basis-controller überprüfen wir die Schlüssel (wir müssen nur eine REST-API hinter dem gateway):
In unseren Fors-Datei (wir sind mit swagger.json als die Quelle unserer APIs)
In unserem docker compose-Datei (wir verwenden das Andockfenster, aber das gleiche könnte verwendet werden, in der Einstellungen-Datei)
Zur build-Zeit, wir nehmen das Geheimnis aus unseren Einstellungen-Datei und ersetzen Sie es in der Fors.json-Datei. Auf diese Weise können wir drehen den Schlüssel in unseren Einstellungen, Datei-und API-gateway aktualisiert den Schlüssel verwenden, die app-sucht.
Derzeit gibt es keine put-API-Gateway vor privaten ELB, so hast du Recht, dass es mit dem internet verbunden ist. Die beste Problemumgehung für Ihren Fall, ich kann mir denken, wäre ELB in TCP-pass-through-Modus und beenden-client-Zertifikat auf dem end-hosts hinter dem ELB.
Ist es nun möglich, ein Vollmachtgeber direkt an Application Load Balancer (ALB) vor ECS.
Diese können so konfiguriert werden, direkt in die Regeln der Zuhörer. Dieser blog-post für weitere details:
https://aws.amazon.com/de/blogs/aws/built-in-authentication-in-alb/
Ist es möglich, wenn man VPC-Link-und Netzwerk-Load-Balancer.
Bitte haben Sie einen Blick auf diese post:
https://adrianhesketh.com/2017/12/15/aws-api-gateway-to-ecs-via-vpc-link/
TL;DR
(instances in einer VPC)
Hoffe, das hilft!