API Gateway Authorizer и выход из системы (вопросы производительности и безопасности) - PullRequest
0 голосов
/ 17 декабря 2018

Я использую Cognito, API Gateway и Authorizers.Авторизаторы настроены для кэширования на 5 минут для повышения производительности.Я чувствовал, что это хорошая особенность.

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

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

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

Другая проблема связана с просмотром кода, я больше не могу легко сказать, какая авторизация требуется ... Мне нужно посмотреть, какой авторизатор должен быть подключен (например, CloudFormation), а затем сам лямбда-код.

Есть ли польза от использования Авторизаторов?Или что лучше всего делать с этим на самом деле?

1 Ответ

0 голосов
/ 23 декабря 2018

В целях безопасности я не должен включать кэширование авторизатора

Если у вас есть строгие требования к безопасности (например, как только токен будет признан недействительным, все запросы должны завершиться неудачей), вы будете нужно отключить кеширование авторизатора.См. Этот ответ из https://forums.aws.amazon.com/thread.jspa?messageID=703917:

В настоящее время существует только один TTL для кэша авторизатора, поэтому в представленном сценарии API-шлюз продолжит возвращать ту же самую кэшированную политику (генерируя 200) для TTL кэша независимо от того, может ли быть истек срок действия токена.Вы можете настроить TTL кеша до уровня, который вам удобнее, но он установлен на уровне авторизатора, а не на уровне токенов.

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

Это также означает, что все аутентифицированные API-интерфейсы будут проходить через одну загрузку Lambda-авторизатора ...

.Однако на практике моя команда боролась с холодным запуском Lambda и ENI-приложением гораздо сложнее, чем что-либо еще в плане производительности, поэтому накладные расходы, добавленные нашим авторизатором, оказались незначительными.Это не означает, что снижение производительности не было измеримым, но в конечном итоге это привело к увеличению задержки на порядок миллисекунд по сравнению с размещением кода авторизатора непосредственно в Lambda, компромисс, который имел смысл в нашем приложении.В противоположность этому, холодный запуск лямбды часто может длиться до 30 секунд.

Также с точки зрения кодирования, действительно ли это хорошая идея использовать авторизаторы, которые трудно тестировать от начала до конца?

Во многих приложениях, построенных на сервисе.В ориентированной архитектуре вы будете иметь «сквозные» сценарии, которые пересекают несколько кодовых баз и могут быть протестированы только в развернутой среде.Тесты на этом уровне, очевидно, дороги, поэтому вам следует избегать тестирования функциональности, которое может быть охвачено тестом более низкого уровня (модуль, интеграция и т. Д.).Тем не менее, по-прежнему крайне важно проверить согласованность вашего приложения, и тот факт, что вам понадобятся такие тесты, не обязательно является серьезным препятствием для SOA.

Я мог бы проверить функцию Lambda как единое целое.Но для меня важнее то, что они привязаны к правильным API.В настоящее время я не вижу способа, который позволил бы мне легко это проверить.

Если вы рассматриваете несколько авторизаторов, один из способов проверить, что правильные авторизаторы подключены, состоит в том, чтобы каждый авторизатор передавал отпечаток пальца вниздо конечной точки.Затем вы можете пропинговать свои конечные точки и заставить их вернуть статус проверки работоспособности.

Например,

[ HTTP Request ] -> [ API Gateway ] -> [ Authorizer 1 ] -> [ Lambda 1 ] -> [ HTTP Response ]
                                       Payload:                            Payload:
                                       user identity                       status: ok
                                       authorizer: 1                       authorizer: 1

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

Другая проблема.глядя на код, я больше не могу сказать, какая авторизация требуется легко ... Мне нужно посмотреть, какой авторизатор должен быть подключен (например, CloudFormation), а затем сам код Lambda.

Да, это действительно так, и природа чрезвычайно разрозненной среды, которую было сложно протестировать локально, была одной из самых больших проблем, с которыми столкнулась моя команда при работе с инфраструктурой AWS.Тем не менее, я считаю, что это в основном кривая обучения при работе с пространством AWS.Сообщество разработчиков в целом все еще является относительно новым для многих концепций, которые предоставляет AWS, таких как инфраструктура, как код или микросервисы, поэтому наши инструменты и обучение не хватает в этом пространстве по сравнению с традиционной монолитной разработкой.

Это правильное решение для вашего приложения?Я не могу сказать вам это без глубокого анализа.В более широком сообществе есть множество мнений, которые идут обоими путями, но я хотел бы указать вам на эту статью, особенно для перечисленных ошибок: Микросервисы - пожалуйста, не .Используйте микроуслуги, потому что вы разработали для них надежный сценарий использования, не обязательно потому, что они являются новейшим модным словом в компьютерной науке.

Есть ли польза от использования Авторизаторов?Или что лучше всего использовать на самом деле?

Моя команда использовала авторизаторы для AuthN (через пользовательскую службу аутентификации) и обрабатывала AuthZ на отдельном уровне Lambda (через другую специальную службу аутентификации).Это было чрезвычайно полезно для нашей архитектуры, поскольку позволило нам отделить то, что часто было чрезвычайно сложными объектно-ориентированными правилами безопасности, от простого вопроса идентификации.Ваш вариант использования может отличаться, и я, конечно, не буду утверждать, что знаю лучшие практики.Однако я покажу вам примеры API Gateway Authorizer для получения дополнительных идей о том, как вы можете интегрировать этот сервис в свое приложение.

Удачи.

...