2016-08-26 3 views
0

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

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

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

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

ответ

0

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

+0

Что я в настоящее время запутано: после аутентификации с помощью cognito, является токеном сеанса тот же токен, что и «токен авторизации», описанный в документации по указанному вами URL-адресу? – CamHart

+0

Если я использую Пользовательский авторизатор, я теряю полномочия AWS Cognito auth (и я должен сам это сделать как часть Custom Authorizer). Я бы предпочел не делать этого, если это возможно. Можете ли вы увидеть другой способ? – CamHart

0

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

Чтобы получить доступ к идентификатору идентификатора Cognito, вы должны иметь «Invoke with credentials» на странице «Запрос интеграции» API-интерфейса API-интерфейса API.

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

+0

Я не думаю, что можно включить «Invoke with credentials», когда я использую Custom Authorizer. Не могли бы вы предложить отказаться от пользовательского автозапуска и просто использовать авторизатор AWS, а затем выполнить «премиальный» поиск в начале каждого лямбда-вызова? (Это то, что делает пользовательский авторизатор, просто он кэширует результаты тоже). – CamHart

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