Как использовать как сервис-сервис, так и аутентификацию Cognito для API Gateway - PullRequest
1 голос
/ 19 сентября 2019

У меня есть доступ к RESTful API через AWS API Gateway.Я хочу, чтобы оба пользователя (аутентифицированные с помощью Cognito) И других (внутренних) служб могли вызывать API.Существует множество документов о том, как это сделать, но не о том, как сделать оба .

Я пытался использовать неопознанные федеративные удостоверения Cognito для авторизации сервисов .Я также использовал пулы пользователей Cognito для аутентификации людей .Однако API Gateway допускает только одного авторизатора (в данном случае AWS_IAM или авторизатор Cognito).Однако я не вижу способа сделать и то и другое.

Я думаю, что мне понадобится собственный Lambda-авторизатор, но у меня много проблем с поиском точной информации о том, как написать авторизатор с использованием IAM или Cognito.

Конечно, мы не можем быть первыми, кто хочет, чтобы и сервисы, и люди имели доступ к API.Недостаток документации об этом заставляет меня поверить, что я либо упускаю что-то до боли очевидное, либо что это тот случай использования, которого лучше избегать (в таком случае, что такое наилучшая практика?).

Есть лилюбой способ сделать оба?Есть ли пример лямбда-авторизатора, который может указать мне правильное направление?Есть ли что-то встроенное, что я упускаю?

Мы отвергли идею «притворяться», что пользователь Cognito - это человек, тогда как на самом деле это услуга, как нам кажетсязлоупотребление пулами пользователей Cognito и федерацией удостоверений.Аналогичным образом, обратное, когда пользователь Cognito объединен в роли роли IAM, совместно используемой как пользователями, так и службами, выглядит как злоупотребление аутентификацией пользователя.

Есть ли канонический способ сделать это?Если нет, то существует ли документация о том, как написать собственный Lambda-авторизатор, который бы выполнял обе задачи?

1 Ответ

1 голос
/ 20 сентября 2019

Краткий ответ: вам (вероятно) не нужно использовать API-шлюз в обоих случаях.

API-шлюз, как следует из названия, - это просто шлюз.Он принимает запрос (часто HTTP) и перенаправляет его в другое место (функция Lambda, экземпляр EC2, другая служба AWS или другая конечная точка HTTP).Это замечательно, если вам нужны пользователи , у которых нет связанной роли IAM для доступа к службам AWS.

Пользователи, прошедшие проверку подлинности через Cognito, имеют связанную роль IAM через связанный пул идентификации Cognito.Просто дайте им доступ к сервисам AWS таким образом, не нужно проходить через API Gateway.

Сервисам AWS, которым необходим доступ к другим сервисам AWS, не нужно проходить через API-шлюз, им нужно дать разрешение через свою роль IAM.

Если по какой-то причине вы должны использовать APIВ качестве шлюза для ваших пользователей и ваших служб создайте два шлюза API, которые указывают на одни и те же ресурсы и используют разные методы аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...