1 Вопрос: Аутентификация / Cognito SDK не работает после развертывания в AWS Lambda

вопрос создан в Thu, May 2, 2019 12:00 AM

Я интегрировал AWS Cognito User Pools в свое приложение, как описано в этой статье: http://snevsky.com/blog/dotnet-core-authentication-aws-cognito , используя следующие пакеты: AWSSDK.Core и AWSSDK.CognitoIdentityProvider . р>

В моей среде разработки это работает хорошо: я могу позвонить по номеру AdminInitiateAuthAsync для аутентификации пользователя и позвонить по номеру SignUpAsync, чтобы создать нового пользователя. Другие методы тоже хорошо работают - в моей среде dev .

Однако, когда я развертываю свой код в Lambda, он не работает. В частности, он висит на этой строке:

var response = await cognito.AdminInitiateAuthAsync(request);

В конце концов, я получаю сообщение об ошибке в CloudWatch, говоря Task timed out. Однако, это не говорит мне, почему. Исходя из моего прошлого опыта работы с Lambda и AWS, я предполагаю, что это проблема с разрешениями между Lambda и Cognito, но это только предположение.

Несколько вещей, которые я пробовал:

  1. Как указано в статье, я добавил два параметра среды dev : AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Однако Lambda не позволит вам установить эти конкретные ключи в качестве переменных среды. Итак, в качестве теста я попытался установить их явно в своем коде:
var credentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
var region = RegionEndpoint.GetBySystemName("myRegionId");
var cognito = new AmazonCognitoIdentityProviderClient(credentials, region);

  1. Я добавил права администратора для роли Lambda Execution.

Любая помощь приветствуется.

    
0
1 ответ                              1                         

Пара вещей:

  1. Вам не нужно предоставлять ключи API в лямбда-коде. AWS сделает это за вас, учитывая, что ваш код работает в защищенной песочнице.
  2. Ваш пул cognito фактически имеет общедоступное DNS-имя, поэтому при обращении к нему любого API-запроса (даже через AWS SDK) ваш трафик проходит через общедоступный Интернет. Это означает, что лямбда должна иметь возможность отправлять трафик в публичный интернет. Учитывая, что вы сталкиваетесь с «ошибкой тайм-аута задачи», наиболее распространенным случаем такой ошибки является то, что вы помещаете свою функцию в VPC, но не предоставляете экземпляр /шлюз NAT, правила таблицы маршрутизации и необходимые группы безопасности, чтобы позволить лямбда-серверу взаимодействовать в публичный интернет. Если вы проверите настройки своей инфраструктуры и в конечном итоге увидите, что ваша лямбда находится в VPC, примите решение, действительно ли она вам нужна. Если вы этого не сделаете, получите его оттуда, и, скорее всего, ваши запросы Cognito будут работать немедленно. Но если вы это сделаете, вам нужно настроить NAT, группы безопасности и записи таблицы маршрутов.
0
2019-05-02 20: 47: 13Z
  1. Спасибо! Это сработало. Теперь мне просто нужно решить, хочу ли я платить за NAT (лямбда внутри VPC) или сделать мою БД общедоступной (лямбда вне VPC).
    2019-05-03 14: 34: 35Z
источник размещен Вот