Я попытался вызвать функцию настраиваемого сообщения для отправки электронных писем через SendGrid, хорошо, что это сработало, но у меня нет способа остановить AWS от отправки через их электронные письма. Я попытался установить messageAction
на ПОДДЕРЖАНИЕ, но возникла другая проблема. Такой поддержки саморегистрации нет, поскольку messageAction
предназначен только для функции adminCreateUser. Я что-то пропустил или делаю это неправильно?
Настройте Cognito для правильной отправки электронных писем через третьих лиц, например SendGrid.
Ответы (4)
Пользовательские лямбда-триггеры отправителя - это способ использовать сторонних поставщиков услуг уведомлений.
Документы Cognito на данный момент отсутствуют (шаги отсутствуют, лямбда-код необходимо исправить после копирования из примера, нет инструкций по развертыванию с помощью CloudFormation, ...).
Общий обзор шагов:
- Создайте симметричный ключ KMS.
- Создайте лямбда-функцию. Предоставьте Lambda разрешение
kms:Decrypt
ключу. Передайте ключ ARN в качестве переменной среды. - Создайте пул пользователей и клиента пула пользователей. Для пула настройте
LambdaConfig
предоставление Lambda и KMS Key ARN. - В коде расшифруйте код уведомления, используя ключ, переданный в переменных env.
- Отправьте код уведомления с помощью стороннего API (например, Twilio Sendgrid).
Инструменты (по состоянию на март 2021 г.):
- Cognito Console не поддерживает новые триггеры
- AWS CLI поддерживает новые триггеры
- В документации CloudFormation говорится, что триггеры не поддерживаются, но на самом деле это работает.
- Terraform пока не поддерживает установку новых триггеров (есть обходной путь)
Я писал в блоге о процессе настройки настраиваемого лямбда-триггера электронной почты с помощью CloudFormation и Terraform: Отправляйте электронные письма AWS Cognito с помощью сторонних ESP.
Похоже, что сейчас Cognito начинает это поддерживать.
Cognito предоставляет два лямбда-триггера CustomEmailSender
и CustomSMSSender
для включения сторонних уведомлений по электронной почте и SMS. 1
1 Источник из документов AWS Cognito
Cognito в настоящее время не поддерживает отправку электронных писем с использованием сторонних сервисов. Вы не можете запретить отправку электронной почты для различных сценариев, таких как регистрация пользователя или забытый пароль, чистым способом.
Cognito недавно начал поддержку, позволяющую пользователям отправлять электронные письма через третьих лиц. Вам нужно будет сделать это с помощью лямбды, поэтому вот шаги:
Создайте лямбду, которая будет звонить вашему провайдеру электронной почты, чтобы отправить электронное письмо / передать данные.
Предоставьте разрешения kinesis созданной вами роли лямбда-функции
Создайте симметричный ключ KMS
Добавить роль лямбда-функции в список ключей пользователей
Добавьте KEY_ID и KEY_ALIAS в лямбда, предпочтительно в качестве переменной env
Разрешить лямбда-функции вызывать когнитивное мышление с помощью cli
aws lambda add-permission --function-name YOURLAMBDAARN --statement-id CognitoLambdaInvokeAccess --action lambda: InvokeFunction --principal cognito-idp.amazonaws.com
Настройте когнито Это сбросит настройки когнито, поэтому сначала посмотрите, что было включено
aws cognito-idp update-user-pool --user-pool-id yourpoolid --lambda-config PreSignUp = oranyofyourtriggers, CustomEmailSender = {LambdaVersion = V1_0, LambdaArn = yourlambdaarn}, KMSKeyID = yourkeyarn
приведенная выше команда сбросила бы когнито, поэтому все триггеры, если они использовались ранее, должны быть установлены сейчас в MFA и проверках, в каких атрибутах для проверки выбрать адрес электронной почты (и настройки sms и дать роль, если это использовалось ранее) и сохраните эти изменения