7

J'essaie de placer une passerelle API Amazon 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 pour utiliser la passerelle API est d'utiliser un autorisateur personnalisé via une fonction lambda.Amazon API Gateway en face d'ELB et ECS Cluster

Schéma du système

enter image description here

En termes Amazon (https://aws.amazon.com/api-gateway/faqs/): "demandes de procuration aux opérations de back-end doivent également être accessibles au public sur Internet". Cela me force à rendre l'ELB public (internet-facing) au lieu d'interne. Ensuite, j'ai besoin d'un moyen de m'assurer que seulement 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 l'ELB ne semble pas le supporter.

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

+2

Je ne pense pas qu'il y ait une solution facile. API Gateway n'est pas pour vous ou vous devez en faire un peu plus. Les solutions incluent mettre HAProxy avant l'ALB qui vérifiera le certificat de client. Ou mettez un lambda avant l'ALB mais cela exigera que toute la réponse soit tamponnée, ce qui pourrait ralentir les choses. Ou si vous pouvez ensuite injecter un en-tête secret à la demande de API Gateway à l'ALB. Ce secret sera ensuite vérifié dans les backends. Je ne recommanderais pas la liste blanche IP, car les plages d'adresses IP de la passerelle API ne sont pas statiques et peuvent modifier un élément de rupture. – doorstuck

+0

Merci @doorstuck. Je voudrais éviter d'incorporer de nouveaux composants comme le HAProxy. Je suppose que ce scénario (API Gateway, ELB, ECS Cluster) est assez commun. AWS ne fournit-il pas une solution prête à l'emploi? –

+0

API Gateway est plus adaptée aux services de la fonction Lambda. Lorsqu'on les place devant des conteneurs docker avec des services hébergés, j'ai l'impression que cela ajoute trop de latence et de complexité. J'utilise un autre proxy à la place de API Gateway puisque je n'utilise que la partie proxy d'API Gateway. J'ai utilisé Skipper par Zalando avec succès. Mais si vous voulez utiliser des autorisateurs, la mise en cache cloudfront, etc., alors API Gateway est toujours la solution. – doorstuck

Répondre

1

Actuellement, il n'y a pas de mettre API Gateway devant un ELB privé, alors vous avez raison de dire qu'il doit faire face à Internet. La meilleure solution de contournement pour votre cas serait de mettre ELB en mode de passage TCP et de terminer le certificat client sur vos hôtes finaux derrière l'ELB.

4

Cela semble être une énorme pièce manquante pour la technologie de passerelle API, compte tenu de la façon dont il est poussé. Ne pas être en mesure d'appeler dans un serveur orienté vers l'intérieur dans le VPC restreint sévèrement son utilité en tant que front d'authentification pour l'accès à Internet. FWIW, dans Azure, API Management le prend en charge dès sa sortie de l'emballage: il peut accepter les requêtes provenant d'Internet et appeler directement votre réseau virtuel qui est par ailleurs protégé par un pare-feu. La seule façon dont cela semble possible sous AWS est d'utiliser Lambdas, ce qui ajoute une couche significative de complexité, esp. si vous avez besoin de prendre en charge différents protocoles binaires.

2
+1

BTW Je l'ai finalement essayé et oui ça marche mais ce n'est pas super pratique - pour commencer vous pouvez seulement avoir une passerelle API qui parle à un équilibreur de charge réseau plutôt qu'un équilibreur de charge d'application, donc si vous avez des ALB externes configurer la passerelle, vous devez soit les remplacer par des équilibreurs de charge réseau (ce qui signifie que vous perdez votre terminaison SSL, ainsi que diverses autres options que vous pouvez ou ne pouvez pas utiliser) ou ajouter un NLB devant les ALB, qui peut maintenant être interne seulement. La modification d'un itinéraire existant de "HTTP" à "VPC link" n'est pas entièrement transparente. –

+1

Des conseils sur la façon de configurer un NLB devant un ALB? –