7

Próbuję umieścić Amazon API Gateway przed Load Balancer Application, który równoważy ruch do mojego ECS Cluster, gdzie wszystkie moje mikroserwisy są wdrożone. Motywacją do korzystania z bramy API jest użycie niestandardowego autoryzatora za pośrednictwem funkcji lambda.Amazon API Gateway przed ELB i ECS Cluster

Schemat instalacji

enter image description here

w Amazon słów (https://aws.amazon.com/api-gateway/faqs/): "wnioski pełnomocnika do operacji backend również muszą być publicznie dostępne w Internecie". To zmusza mnie do tego, by ELB stał się publiczny (internetowy), a nie wewnętrzny. Następnie potrzebuję sposobu, aby zapewnić, że bramka API może uzyskać dostęp do ELB poza VPC.

Moim pierwszym pomysłem było użycie certyfikatu klienta w API Gatway, ale ELB nie obsługuje go.

Wszelkie pomysły będą wysoko cenione!

+2

I nie sądzę, że istnieje proste rozwiązanie. Brama API nie jest dla Ciebie lub musisz zrobić trochę więcej. Rozwiązania obejmują umieszczanie HAProxy przed ALB, który zweryfikuje certyfikat klienta. Lub umieść lambda przed ALB, ale to wymaga buforowania całej odpowiedzi, co może spowolnić działanie. Lub jeśli możesz wstrzyknąć tajny nagłówek do żądania z bramy API do ALB. Ten sekret zostanie następnie zweryfikowany w backendach. Nie polecam korzystania z białej listy adresów IP, ponieważ zakresy adresów IP bramy API nie są statyczne i mogą zmieniać błędy. – doorstuck

+0

Dzięki @doorstuck. Chciałbym uniknąć wprowadzania nowych komponentów, takich jak HAProxy. Domyślam się, że ten scenariusz (API Gateway, ELB, ECS Cluster) jest dość powszechny. Czy AWS nie dostarcza do tego rozwiązania z pudełka? –

+0

Bramka interfejsu API jest bardziej dostosowana do usług funkcji Lambda. Po umieszczeniu kontenerów dockera w hostowanych usługach wydaje mi się, że dodaje on zbyt wiele opóźnień i złożoności. Używam innego proxy zamiast API Gateway, ponieważ mimo to korzystam tylko z części proxy bramki API. Użyłem Skippera przez Zalando z sukcesem. Ale jeśli chcesz korzystać z autoryzacji, buforowania w chmurze itd., To być może bramka API nadal jest drogą do zrobienia. – doorstuck

Odpowiedz

1

Obecnie nie ma możliwości umieszczenia bramki API przed prywatnym ELB, więc masz rację, że musi to być internet. Najlepszym sposobem na rozwiązanie tego problemu jest umieszczenie ELB w trybie przechodzenia TCP i zakończenie certyfikatu klienta na końcowych hostach za ELB.

4

Wydaje się, że jest to ogromny brakujący element dla technologii bramy API, biorąc pod uwagę sposób, w jaki jest on popychany. Brak możliwości połączenia się z serwerem wewnętrznym w VPC znacznie ogranicza jego przydatność jako drzwi wejściowe do uwierzytelniania dla dostępu do Internetu. FWIW, w systemie Azure, zarządzanie interfejsem API obsługuje to po wyjęciu z pudełka - może przyjmować żądania z Internetu i wywoływać połączenia bezpośrednio w sieci wirtualnej, która w przeciwnym razie jest blokowana. Jedynym sposobem, który wydaje się możliwy w AWS, jest użycie Lambdas, która dodaje znaczną warstwę złożoności, szczególnie. jeśli potrzebujesz obsługiwać różne protokoły binarne.

2
+1

BTW W końcu wypróbowałem to i tak, działa, ale nie jest to super wygodne - na początek można tylko podłączyć bramkę API do modułu równoważenia obciążenia sieciowego, a nie do mechanizmu równoważenia obciążenia aplikacji, więc jeśli obecnie zewnętrzne ALB-y są konfiguracja, z którą komunikuje się brama, musisz zastąpić ją równoważnikami obciążenia sieci (co oznacza, że ​​tracisz protokół SSL i różne inne opcje, których możesz używać lub nie) lub dodać NLB przed ALB-ami, która może teraz być tylko wewnętrzna. Zmiana istniejącej trasy z "HTTP" na "VPC link" nie jest całkowicie płynna. –

+1

Wszelkie porady dotyczące ustawiania NLB przed ALB? –