wake-up-neo.com

Amazon API Gateway vor ELB und ECS Cluster

Ich versuche, ein Amazon API-Gateway vor einen Application Load Balancer zu stellen, der den Datenverkehr zu meinem ECS-Cluster ausgleicht, in dem alle meine Mikrodienste bereitgestellt werden. Die Motivation für die Verwendung des API-Gateways ist die Verwendung eines benutzerdefinierten Autorisierungsprogramms über eine Lambda-Funktion.

Systemdiagramm

 enter image description here

In Amazon-Wörtern ( https://aws.Amazon.com/api-gateway/faqs/ ): "Proxy-Anfragen an Back-End-Vorgänge müssen auch im Internet öffentlich zugänglich sein". Dies zwingt mich dazu, die ELB an die Öffentlichkeit zu stellen (Internetverbindung) anstatt intern. Dann brauche ich eine Möglichkeit, sicherzustellen, dass only das API-Gateway außerhalb der VPC auf die ELB zugreifen kann.

Meine erste Idee war, ein Client-Zertifikat in der API-Gatway zu verwenden, aber die ELB scheint dies nicht zu unterstützen.

Alle Ideen wären sehr dankbar!

Dies scheint ein riesiges Fehlteil für die API-Gateway-Technologie zu sein. Wenn Sie in der VPC keinen internen Server anrufen können, ist die Verwendung als Authentifizierungseingang für den Internetzugriff stark eingeschränkt. FWIW: In Azure unterstützt API Management dies sofort - es kann Anforderungen von annehmen Internet und Anrufe direkt in Ihr virtuelles Netzwerk einleiten, das ansonsten durch eine Firewall geschützt ist .. Die einzige Möglichkeit, die unter AWS möglich zu sein scheint, ist die Verwendung von Lambdas, was eine erhebliche Komplexitätsebene verursacht, insbesondere. wenn Sie verschiedene binäre Protokolle unterstützen müssen.

7
Dylan Nicholson
4
Dylan Nicholson

Derzeit gibt es keine Möglichkeit, das API-Gateway vor der privaten ELB zu stellen. Sie haben also Recht, dass es mit dem Internet verbunden sein muss. Die beste Lösung für Ihren Fall, die ich mir vorstellen kann, wäre, ELB in den Durchlaufmodus TCP zu setzen und das Client-Zertifikat auf Ihren Endhosts hinter der ELB zu beenden. 

1

Wir haben uns entschieden, einen Header zu verwenden, um zu überprüfen, ob der gesamte Datenverkehr durch API Gateway kommt. Wir speichern ein Geheimnis in den Umgebungsvariablen unserer Apps und teilen dem API Gateway mit, dass es bei der Erstellung der API eingefügt werden soll. Dann überprüfen Sie den Schlüssel in unserer App.

Folgendes tun wir dafür:

In unserem Basiscontroller überprüfen wir den Schlüssel (hinter dem Gateway befindet sich nur eine REST - API):

string ApiGatewayPassthroughHeader = context.HttpContext.Request.Headers["ApiGatewayPassthroughHeader"];

if (ApiGatewayPassthroughHeader != Environment.GetEnvironmentVariable("ApiGatewayPassthroughHeader"))
{
    throw new error;
}

In unserer Swagger-Datei (wir verwenden swagger.json als Quelle für unsere APIs)

"x-Amazon-apigateway-integration": {
    "type": "http_proxy",
    "uri": "https://${stageVariables.url}/path/to/resource",
    "httpMethod": "post",
    "requestParameters": {
      "integration.request.header.ApiGatewayPassthroughHeader": "${ApiGatewayPassthroughHeader}"
    }
  },

In unserer Docker-Compose-Datei (wir verwenden Docker, das gleiche kann jedoch in jeder Einstellungsdatei verwendet werden)

services:
  example:
      environment:
        - ApiGatewayPassthroughHeader=9708cc2d-2d42-example-8526-4586b1bcc74d

Bei der Erstellung nehmen wir das Geheimnis aus unserer Einstellungsdatei und ersetzen es in der Datei swagger.json. Auf diese Weise können wir den Schlüssel in unserer Einstellungsdatei drehen und das API-Gateway wird aktualisiert, um den Schlüssel zu verwenden, nach dem die App sucht.

1
Cale

Dies ist möglich, wenn Sie VPC Link und Network Load Balancer verwenden.

Bitte werfen Sie einen Blick auf diesen Beitrag: https://adrianhesketh.com/2017/12/15/aws-api-gateway-to-ecs-via-vpc-link/

TL; DR

  1. Erstellen Sie einen internen Netzwerklastenausgleich, der mit Ihrer Zielgruppe verbunden ist. (Instanzen in einer VPC)
  2. Erstellen Sie in der API-Gateway-Konsole eine VPC-Verknüpfung und verknüpfen Sie sie mit der obigen NLB
  3. Erstellen Sie einen API-Gateway-Endpunkt, wählen Sie "VPC Link-Integration" und geben Sie Ihre interne NLB-URL als "Endpunkt-URL" an.

Hoffentlich hilft das!

0
user7455457

Es ist jetzt möglich, einen Authorizer direkt vor dem ECS zu Application Load Balancer (ALB) hinzuzufügen.

Dies kann direkt in den Regeln eines Listeners konfiguriert werden. In diesem Blogeintrag finden Sie Details:

https://aws.Amazon.com/de/blogs/aws/built-in-authentication-in-alb/

0
Erik P