Безопасные загрузки AWS s3 только для премиум-пользователей?

Я пытаюсь создать приложение с функцией «премиум» для загрузки файлов на s3.

Сейчас пользователи входят в систему, используя OAuth/Cognito. Существует таблица DynamoDB, которая содержит пользовательские данные на основе их идентификатора cognito. Эти пользовательские данные dynamodb указывают, является ли пользователь премиум-пользователем или нет.

У меня есть конечная точка шлюза API, привязанная к лямбда-функции, которая создает предварительно подписанный URL-адрес загрузки s3.

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


person CamHart    schedule 26.08.2016    source источник


Ответы (2)


Создайте пользовательский авторизатор Lambda, который проверяет пользователя. является «премиум» пользователем перед авторизацией запроса к конечной точке шлюза API. Эта функция ищет пользователя в DynamoDB перед авторизацией доступа.

person Mark B    schedule 26.08.2016
comment
Что меня в настоящее время смущает: после аутентификации с помощью cognito токен сеанса является тем же токеном, что и токен авторизации, описанный в документации по указанному вами URL-адресу? - person CamHart; 26.08.2016
comment
Если я использую настраиваемый авторизатор, я теряю принудительную аутентификацию AWS Cognito (и мне приходится создавать ее самостоятельно как часть настраиваемого авторизатора). Я бы предпочел не делать этого, если это возможно. Можете ли вы увидеть какой-либо другой способ обойти это? - person CamHart; 01.09.2016

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

Чтобы получить доступ к Cognito Identity Id, вы должны иметь «Вызывать с учетными данными вызывающего абонента» на странице «Запрос на интеграцию» шлюза API API.

Как только это установлено, и вы вызываете свой API, используя учетные данные из Cognito, лямбда-контекст будет иметь новую структуру «удостоверения», содержащую «cognitoIdentityId» и «cognitoIdentityPoolId».

person Mark Mercurio    schedule 27.08.2016
comment
Я не думаю, что можно включить Invoke с учетными данными вызывающего абонента, когда я использую пользовательский авторизатор. Не могли бы вы предложить мне отказаться от пользовательского авторизатора и просто использовать авторизатор AWS, а затем выполнять премиальный поиск в начале каждого лямбда-вызова? (Это, по сути, то, что делает пользовательский авторизатор, просто он также кэширует результаты). - person CamHart; 29.08.2016