Аутентификация встроенных устройств для отправки push-уведомлений с помощью Amazon SNS
Я разрабатываю платформу, на которой большое количество встроенных в облачные устройства устройств будут отправлять push-уведомления в мобильные приложения с помощью Amazon SNS.
Каждое встроенное устройство должно создавать тему SNS и публиковать в этой теме. Пользователи будут регистрироваться в теме и получать эти уведомления.
Мой вопрос: как встроенные устройства должны обрабатывать аутентификацию / авторизацию с помощью AWS, чтобы создавать темы и публиковать уведомления. Вот варианты, которые я рассмотрел до сих пор:
- Создайте одного пользователя IAM, который будет "доступен" всем встроенным устройствам. Не очень хорошая идея: если взломано одно устройство, все они будут взломаны.
- Создайте отдельного пользователя IAM для каждого встроенного устройства. Это может быть вариант, но AWS ограничивает это до 5000
- Настройте промежуточный сервер, который общается с AWS; пользователь IAM будет создан для сервера. Затем сервер генерирует временные учетные данные по требованию для встроенных устройств, и устройства используют их для аутентификации в AWS. Мне это не нравится, потому что оно вводит дополнительную зависимость / единственную точку отказа (промежуточный сервер).
Какие еще варианты у меня есть? Я уверен, что я не первый, кто сталкивается с этой проблемой.
1 ответ
Решение
Вы могли бы сделать что-то вроде этого:
Предварительные условия и настройка:
- Установите Javascript SDK на встроенное устройство (поскольку вы не упомянули ограничения устройства, эта архитектура предполагает, что ваше устройство достаточно для работы с Javascript SDK)
- Создайте "Пул пользователей" в Cognito (через Консоль AWS или API, CLI и т. Д.)
- В рамках начальной настройки устройства зарегистрируйте нового пользователя для каждого устройства, используя уникальные атрибуты, которые соответствуют вашей архитектуре, целевой аудитории приложения и бизнес-модели.
Поток аутентификации:
- Если вы хотите отправить новое сообщение в SNS, происходит следующее:
- Ваше приложение (на встроенном устройстве) запускает безопасную удаленную аутентификацию по паролю с помощью Cognito (конечно, с помощью методов SDK)
- Если запрос аутентификации завершается успешно, Cognito отвечает токеном
- Ваше приложение использует токен и вызывает конечную точку POST, предоставляемую API-шлюзом, и выполняет аутентификацию с помощью
token
полученный на шаге 3 -
token
используется для аутентификации в "Пуле пользователей" на Cognito, чтобы проверить, поступил ли запрос с подлинного устройства - Если запрос аутентификации завершается успешно, API-шлюз вызывает лямбда-функцию, к которой присоединена соответствующая роль IAM, эта роль IAM, по существу, позволяет ему публиковать сообщения в разделах SNS.
- Лямбда-функция публикует сообщение в желаемой теме SNS. Поскольку вы упомянули, что каждое устройство будет публиковать в своей собственной теме SNS, информация о теме SNS может храниться в полях метаданных пользователя в Cognito.