Аутентификация / Cognito SDK не работает после развертывания в AWS Lambda - PullRequest
0 голосов
/ 02 мая 2019

Я интегрировал 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);

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

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

1 Ответ

0 голосов
/ 02 мая 2019

Пара вещей:

  1. Вам не нужно предоставлять ключи API в лямбда-коде.AWS сделает это за вас, учитывая, что ваш код фактически выполняется в защищенной изолированной программной среде.
  2. Ваш пул cognito user фактически имеет общедоступное DNS-имя, поэтому при обращении к нему любого запроса API (даже через AWS SDK),ваш трафик идет через общедоступный интернет.Это означает, что лямбда должна иметь возможность отправлять трафик в публичный интернет.Учитывая, что вы сталкиваетесь с «ошибкой тайм-аута задачи», наиболее распространенным случаем такой ошибки является то, что вы помещаете свою функцию в VPC, но не предоставляете экземпляр / шлюз NAT, правила таблицы маршрутизации и необходимые группы безопасности, чтобы позволить лямбда-серверу взаимодействоватьв публичный интернет.Если вы проверите настройки своей инфраструктуры и в конечном итоге увидите, что ваша лямбда равна в VPC, примите решение, действительно ли она вам нужна.Если вы этого не сделаете, получите его оттуда, и, скорее всего, ваши запросы Cognito будут работать немедленно.Но если вы это сделаете, вам нужно настроить NAT, группы безопасности и записи таблицы маршрутов.
...