Отправка сообщений SNS в конечную точку шлюза Api с аутентификацией AWS_IAM

  1. Я создал тему в соцсети
  2. Я создал конечную точку шлюза API, которая вызывает лямбда-функцию.
  3. Я создал подписку HTTPS на тему, которая указывает на конечную точку шлюза API.

Проблема: все работает нормально, когда AUTH = none, но когда я включил AUTH = AWS_IAM, ни подписка, ни сообщения не доставляются на мою лямбду. Они также не будут отображаться в журналах облачного наблюдения Lambda OR Gateway, как это обычно бывает с ошибками аутентификации.

Вопросов:

  • Какой идентификатор доставляется конечной точкой HTTPS в AWS_IAM, поэтому он не позволяет этого (моей первой мыслью было ретранслировать токен плакатов SNS, но это, похоже, не так)
  • Я не мог найти способ связать конечную точку HTTPS с каким-либо удостоверением, есть ли способ?
  • Есть много информации о доставке SNS в SQS или шлюз в SNS, но я не могу найти никакой информации о достижении того, что я пытаюсь сделать.
  • Есть ли способ отладки проблем с аутентификацией AWS_IAM? Документация Я видел советы «проверить привилегии», чем я занимался много часов, но у меня больше нет идей.

Буду рад услышать от вас любые идеи, спасибо.


person shd    schedule 22.11.2016    source источник
comment
Как вы подписали конечную точку шлюза API на тему SNS ... Я прочитал документы (docs.aws.amazon.com/sns/latest/dg/), но мало что понял.   -  person Kostas Demiris    schedule 17.01.2017
comment
Точно так же вы отправляете свои сообщения на любую конечную точку HTTPS. Вам просто нужно добавить дополнительный код для подтверждения подписки на основе event.Type, затем вам нужно запустить GET event.SubscribeURL. Извините за отсутствие вашего комментария.   -  person shd    schedule 05.07.2017


Ответы (3)


Как вы, возможно, видели в документации, SNS может выполнять только базовую / дайджест-аутентификацию http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html

В документации есть раздел о проверке действительности сообщения, но это код, который вам придется написать самостоятельно или поднять из одного из SNS SDK на бэкэнде. К сожалению, на самом деле нет никакого способа заставить SNS подписать запрос с помощью AWS SigV4.

person jackko    schedule 05.12.2016

Почему бы вам не позволить функции Lambda подписаться непосредственно на тему SNS (без прохождения через API-шлюз)?

Это должно быть просто: https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html.

person Digitalkapitaen    schedule 24.11.2016
comment
Это определенно правильный подход, идея заключалась в том, чтобы api только для отдыха был открыт для любого типа клиента (не обязательно осведомленного о aws). К сожалению, на данном этапе я не могу изменить этот дизайн. - person shd; 25.11.2016
comment
Прочитав документацию по SNS еще раз: docs.aws.amazon.com/ sns / latest / dg / SendMessageToHttp.html Я серьезно сомневаюсь, что SNS может отправлять проверенные IAM запросы HTTPS POST на конечные точки шлюза API. Документы говорят только о базовой и дайджест-аутентификации, но IAM - это нечто иное. Другой указатель заключается в том, что невозможно настроить принципала для POST-сообщений SNS. (Кроме того, прохождение через шлюз API требует дополнительных затрат, которые не нужны, если клиент / издатель - это SNS.) - person Digitalkapitaen; 25.11.2016

Вот полная ссылка, которая поможет вам решить вашу проблему с аутентификацией. https://aws.amazon.com/premiumsupport/knowledge-center/iam-authentication-api-gateway/

Если это проблема «Проверить права», значит, ваш пользователь IAM не имеет достаточного доступа к ресурсам для внесения каких-либо изменений.

person Patrick R    schedule 25.11.2016
comment
Я видел, что эта ссылка и другие части моего API работают нормально. Единственная проблема заключается в том, что подписка SNS HTTPS не пересылает учетные данные пользователя, отправившего сообщение SNS. Другими словами, я не знаю, кто мой пользователь, или как мне назначить пользователя для подписки HTTPS. - person shd; 25.11.2016