web-dev-qa-db-fra.com

Amazon API Gateway devant le cluster ELB et ECS

J'essaie de placer Amazon API Gateway devant un équilibreur de charge d'application, qui équilibre le trafic vers mon cluster ECS, où tous mes microservices sont déployés. La motivation d'utiliser l'API Gateway est d'utiliser un autoriseur personnalisé via une fonction lambda.

Diagramme système

 enter image description here

En mots Amazon ( https://aws.Amazon.com/api-gateway/faqs/ ): "Les demandes de proxy pour les opérations d'arrière-plan doivent également être accessibles au public sur Internet". Cela m'oblige à rendre l'ELB public (face à Internet) au lieu d'interne. Ensuite, j'ai besoin d'un moyen de m'assurer que uniquement la passerelle API est capable d'accéder à l'ELB en dehors du VPC.

Ma première idée était d’utiliser un certificat client dans l’API Gatway, mais le ELB ne semble pas le prendre en charge.

Toutes les idées seraient très appréciées!

15

Cela semble être une énorme pièce manquante pour la technologie de passerelle API, compte tenu de la façon dont elle a été poussée. L'impossibilité d'appeler un serveur interne du VPC restreint considérablement son utilité en tant qu'authentification d'entrée pour l'accès à Internet. Internet et appelez directement sur votre réseau virtuel qui est par ailleurs désactivé par un pare-feu . La seule façon dont cela semble possible sous AWS est d'utiliser Lambdas, ce qui ajoute une couche importante de complexité, en particulier. si vous avez besoin de supporter différents protocoles binaires.

7
Dylan Nicholson
4
Dylan Nicholson

À l'heure actuelle, il n'est pas possible de placer l'API Gateway devant un ELB privé. Vous avez donc raison de dire qu'il doit être connecté à Internet. La meilleure solution de contournement pour votre cas que je peux imaginer serait de mettre ELB en mode de transit TCP et de mettre fin au certificat client sur vos hôtes d'extrémité derrière l'ELB. 

1
Vitalii Budkevych

Nous avons décidé d’utiliser un en-tête pour vérifier que tout le trafic provient de l’API Gateway. Nous enregistrons un secret dans les variables d'environnement de nos applications et demandons à la passerelle API de l'inclure lors de la création de l'API. Ensuite, vérifiez cette clé dans notre application.

Voici ce que nous faisons pour cela:

Dans notre contrôleur de base, nous vérifions la clé (nous avons juste une API REST derrière la passerelle):

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

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

Dans notre fichier swagger (nous utilisons swagger.json comme source de nos API)

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

Dans notre fichier de composition de docker (nous utilisons docker, mais la même chose peut être utilisée dans n’importe quel fichier de paramètres)

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

Au moment de la construction, nous extrayons le secret de notre fichier de paramètres et le remplaçons dans le fichier swagger.json. De cette manière, nous pouvons faire pivoter la clé dans notre fichier de paramètres et la passerelle d’API se mettra à jour pour utiliser la clé recherchée par l’application.

1
Cale

Cela est possible si vous utilisez VPC Link et Network Load Balancer.

S'il vous plaît jeter un oeil à ce post: https://adrianhesketh.com/2017/12/15/aws-api-gateway-to-ecs-via-vpc-link/

TL; DR

  1. Créer un équilibreur de charge réseau interne connecté à votre groupe cible (Instances dans un VPC)
  2. Dans la console API Gateway, créez un lien VPC et reliez-le à NLB ci-dessus.
  3. Créez un noeud final API Gateway, choisissez "Intégration du lien VPC" et spécifiez votre URL interne NLB comme "URL du noeud final".

J'espère que cela pourra aider!

0
user7455457

Il est maintenant possible d'ajouter un autoriseur directement à Application Load Balancer (ALB) devant ECS.

Ceci peut être configuré directement dans les règles d'un écouteur. Voir ce blog pour plus de détails:

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

0
Erik P