我试图调用自定义消息函数通过 SendGrid 发送电子邮件,它工作得很好,但我没有办法阻止 AWS 通过他们的电子邮件发送。我试图将其设置messageAction
为“抑制”,但出现了另一个问题。messageAction
由于仅适用于 adminCreateUser 功能,因此不支持自助注册。我错过了什么还是我没有正确地做到这一点?
3 回答
自定义发件人 Lambda 触发器是使用 3rd 方通知服务提供商的方式。
目前缺少 Cognito 文档(缺少步骤,从示例复制后必须修复 Lambda 代码,没有关于如何使用 CloudFormation 部署的说明,...)。
步骤的高级概述:
- 创建对称 KMS 密钥。
- 创建一个 Lambda 函数。授予 Lambda
kms:Decrypt
对密钥的权限。将密钥 ARN 作为环境变量传递。 - 创建用户池和用户池客户端。对于池,配置
LambdaConfig
提供 Lambda 和 KMS 密钥 ARN。 - 在代码中,使用 env 变量中传递的密钥解密通知代码。
- 使用第 3 方(例如 Twilio Sendgrid)API 发送通知代码。
工具(截至 2021 年 3 月):
- Cognito 控制台不支持新触发器
- AWS CLI 支持新触发器
- CloudFormation 文档说不支持触发器,但实际上它可以工作
- Terraform 尚不支持设置新触发器(有一种解决方法)
我在博客中介绍了使用 CloudFormation 和 Terraform 设置自定义电子邮件 Lambda 触发器的过程:使用 3rd party ESP 发送 AWS Cognito 电子邮件。
似乎现在 Cognito 开始支持这一点。
Cognito 提供两个 Lambda 触发器CustomEmailSender
并CustomSMSSender
启用第三方电子邮件和 SMS 通知。1
Cognito 最近开始支持允许用户通过第三方发送电子邮件。您必须通过 lambda 执行此操作,因此步骤如下:
创建一个 lambda,它将调用您的电子邮件提供商以发送电子邮件/传递数据
向您创建的 lambda 函数角色授予 kinesis 权限
创建对称 KMS 密钥
将 lambda 函数角色添加到用户键列表
在 lambda 中添加 KEY_ID 和 KEY_ALIAS 作为环境变量
授予 lambda 函数使用 cli 调用 cognito 的权限
aws lambda add-permission --function-name YOURLAMBDAARN --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
设置你的 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 设置,如果以前使用过,则赋予角色)并保存这些更改