Аутентификация встроенных устройств для отправки push-уведомлений с помощью Amazon SNS

Я разрабатываю платформу, на которой большое количество встроенных в облачные устройства устройств будут отправлять push-уведомления в мобильные приложения с помощью Amazon SNS.

Каждое встроенное устройство должно создавать тему SNS и публиковать в этой теме. Пользователи будут регистрироваться в теме и получать эти уведомления.

Мой вопрос: как встроенные устройства должны обрабатывать аутентификацию / авторизацию с помощью AWS, чтобы создавать темы и публиковать уведомления. Вот варианты, которые я рассмотрел до сих пор:

  • Создайте одного пользователя IAM, который будет "доступен" всем встроенным устройствам. Не очень хорошая идея: если взломано одно устройство, все они будут взломаны.
  • Создайте отдельного пользователя IAM для каждого встроенного устройства. Это может быть вариант, но AWS ограничивает это до 5000
  • Настройте промежуточный сервер, который общается с AWS; пользователь IAM будет создан для сервера. Затем сервер генерирует временные учетные данные по требованию для встроенных устройств, и устройства используют их для аутентификации в AWS. Мне это не нравится, потому что оно вводит дополнительную зависимость / единственную точку отказа (промежуточный сервер).

Какие еще варианты у меня есть? Я уверен, что я не первый, кто сталкивается с этой проблемой.

1 ответ

Решение

Вы могли бы сделать что-то вроде этого:

Предварительные условия и настройка:

  1. Установите Javascript SDK на встроенное устройство (поскольку вы не упомянули ограничения устройства, эта архитектура предполагает, что ваше устройство достаточно для работы с Javascript SDK)
  2. Создайте "Пул пользователей" в Cognito (через Консоль AWS или API, CLI и т. Д.)
  3. В рамках начальной настройки устройства зарегистрируйте нового пользователя для каждого устройства, используя уникальные атрибуты, которые соответствуют вашей архитектуре, целевой аудитории приложения и бизнес-модели.

Поток аутентификации:

  1. Если вы хотите отправить новое сообщение в SNS, происходит следующее:
  2. Ваше приложение (на встроенном устройстве) запускает безопасную удаленную аутентификацию по паролю с помощью Cognito (конечно, с помощью методов SDK)
  3. Если запрос аутентификации завершается успешно, Cognito отвечает токеном
  4. Ваше приложение использует токен и вызывает конечную точку POST, предоставляемую API-шлюзом, и выполняет аутентификацию с помощью token полученный на шаге 3
  5. token используется для аутентификации в "Пуле пользователей" на Cognito, чтобы проверить, поступил ли запрос с подлинного устройства
  6. Если запрос аутентификации завершается успешно, API-шлюз вызывает лямбда-функцию, к которой присоединена соответствующая роль IAM, эта роль IAM, по существу, позволяет ему публиковать сообщения в разделах SNS.
  7. Лямбда-функция публикует сообщение в желаемой теме SNS. Поскольку вы упомянули, что каждое устройство будет публиковать в своей собственной теме SNS, информация о теме SNS может храниться в полях метаданных пользователя в Cognito.
Другие вопросы по тегам