7

Я пытаюсь установить API-интерфейс Amazon API перед балансировщиком нагрузки приложений, который балансирует трафик в моем кластере ECS, где развернуты все мои микросервисы. Мотивация использования шлюза API заключается в использовании пользовательского авторизатора с помощью лямбда-функции.API-интерфейс Amazon API перед кластером ELB и ECS

Схема системы

enter image description here

В амазонских словах (https://aws.amazon.com/api-gateway/faqs/): "запросов через прокси-сервер серверной операцию также должны быть доступны для общественности в Интернете". Это заставляет меня сделать публичный ELB (интернет-ориентированный) вместо внутреннего. Затем мне нужно, чтобы только API-шлюз имел доступ к ELB вне VPC.

Моя первая идея заключалась в использовании сертификата клиента в API Gatway, но ELB, похоже, не поддерживает его.

Любые идеи были бы высоко оценены!

+2

Я не думаю, что есть простое решение. Либо шлюз API не для вас, либо вам нужно сделать немного больше. Решения включают размещение HAProxy перед ALB, который будет проверять сертификат клиента. Или поставьте лямбду перед ALB, но это потребует, чтобы весь ответ буферизировался, возможно, замедляя работу. Или если вы затем можете ввести секретный заголовок в запрос от шлюза API к ALB. Затем этот секрет будет проверен в бэкэндах. Я бы не рекомендовал использовать белый список IP-адресов, поскольку диапазоны IP для шлюза API не являются статическими и могут изменять информацию о перерыве. – doorstuck

+0

Спасибо @doorstuck. Я хотел бы избежать включения новых компонентов, таких как HAProxy. Я предполагаю, что этот сценарий (API Gateway, ELB, ECS Cluster) довольно распространен. Разве AWS не предоставляет для этого решение? –

+0

API Gateway более приспособлен для обслуживания функций Lambda. Когда вы ставите перед контейнерами докеров с размещенными службами, я чувствую, что он добавляет слишком много латентности и сложности. Я использую другой прокси вместо шлюза API, поскольку я все равно использую прокси-часть API-шлюза. Я успешно использовал Skipper by Zalando. Но если вы хотите использовать авторизаторы, кеширование на основе облаков и т. Д., То, возможно, API Gateway по-прежнему подходит. – doorstuck

ответ

1

В настоящее время нет никакого шлюза API Gateway перед частным ELB, поэтому вы правы, что он должен быть обращен к интернету. Лучшим обходным решением для вашего дела, о котором я могу думать, было бы включение ELB в режим прохождения через TCP и завершение клиентского сертификата на ваших конечных хостах за ELB.

4

Это, кажется, огромный недостающий элемент для технологии шлюза API, учитывая то, как он толкается. Невозможность вызова на внутренний сервер в VPC серьезно ограничивает его полезность в качестве входной двери аутентификации для доступа в Интернет. FWIW, в Azure, API Management поддерживает это из коробки - он может принимать запросы из Интернета и звонить напрямую в вашу виртуальную сеть, которая в противном случае отключена. Единственный способ, который, по-видимому, возможен при использовании AWS, заключается в использовании Lambdas, который добавляет значительный уровень сложности, особенно. если вам нужно поддерживать различные бинарные протоколы.

2
+1

BTW Я в конце концов попробовал это, и да, это действительно работает, но это вряд ли супер удобно - для начала вы можете говорить только о шлюзе API с сетевым балансиром нагрузки, а не балансировщике нагрузки приложения, поэтому, если вы в настоящее время являетесь внешними ALB настройте, чтобы шлюз разговаривал, вам нужно либо заменить их сетевыми балансирами нагрузки (что означает, что вы потеряете завершение SSL, так и различные другие варианты, которые вы можете использовать или не использовать) или добавить NLB перед ALB, который теперь может быть только внутренним. Кроме того, изменение существующего маршрута от «HTTP» до «VPC link» не является полностью плавным. –

+1

Любые советы о том, как настроить NLB перед ALB? –

 Смежные вопросы

  • Нет связанных вопросов^_^