12

我试图调用自定义消息函数通过 SendGrid 发送电子邮件,它工作得很好,但我没有办法阻止 AWS 通过他们的电子邮件发送。我试图将其设置messageAction为“抑制”,但出现了另一个问题。messageAction由于仅适用于 adminCreateUser 功能,因此不支持自助注册。我错过了什么还是我没有正确地做到这一点?

4

3 回答 3

9

自定义发件人 Lambda 触发器是使用 3rd 方通知服务提供商的方式。

目前缺少 Cognito 文档(缺少步骤,从示例复制后必须修复 Lambda 代码,没有关于如何使用 CloudFormation 部署的说明,...)。

步骤的高级概述:

  1. 创建对称 KMS 密钥。
  2. 创建一个 Lambda 函数。授予 Lambdakms:Decrypt对密钥的权限。将密钥 ARN 作为环境变量传递。
  3. 创建用户池和用户池客户端。对于池,配置LambdaConfig提供 Lambda 和 KMS 密钥 ARN。
  4. 在代码中,使用 env 变量中传递的密钥解密通知代码。
  5. 使用第 3 方(例如 Twilio Sendgrid)API 发送通知代码。

工具(截至 2021 年 3 月):

  • Cognito 控制台不支持新触发器
  • AWS CLI 支持新触发器
  • CloudFormation 文档说不支持触发器,但实际上它可以工作
  • Terraform 尚不支持设置新触发器(有一种解决方法)

我在博客中介绍了使用 CloudFormation 和 Terraform 设置自定义电子邮件 Lambda 触发器的过程:使用 3rd party ESP 发送 AWS Cognito 电子邮件

于 2021-03-10T02:56:05.840 回答
4

似乎现在 Cognito 开始支持这一点。

Cognito 提供两个 Lambda 触发器CustomEmailSenderCustomSMSSender启用第三方电子邮件和 SMS 通知。1


1 来自 AWS Cognito 文档的来源

于 2021-01-07T11:22:13.420 回答
0

Cognito 最近开始支持允许用户通过第三方发送电子邮件。您必须通过 lambda 执行此操作,因此步骤如下:

  1. 创建一个 lambda,它将调用您的电子邮件提供商以发送电子邮件/传递数据

  2. 向您创建的 lambda 函数角色授予 kinesis 权限

  3. 创建对称 KMS 密钥

  4. 将 lambda 函数角色添加到用户键列表

  5. 在 lambda 中添加 KEY_ID 和 KEY_ALIAS 作为环境变量

  6. 授予 lambda 函数使用 cli 调用 cognito 的权限

    aws lambda add-permission --function-name YOURLAMBDAARN --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com

  7. 设置你的 cognito 这将重置 cognito 设置,所以先看看启用了什么

    aws cognito-idp update-user-pool --user-pool-id yourpoolid --lambda-config PreSignUp="oranyofyourtriggers",CustomEmailSender="{LambdaVersion="V1_0",LambdaArn="yourlambdaarn"}",KMSKeyID="yourkeyarn "

上面的命令将重置 cognito,因此如果以前使用过任何触发器,现在必须在 MFA 和验证中设置所有触发器,在哪些属性中验证选择电子邮件(以及 sms 设置,如果以前使用过,则赋予角色)并保存这些更改

于 2021-04-14T06:41:06.680 回答