【问题标题】:Configure Cognito to send emails through third party such as SendGrid the proper way配置 Cognito 以正确方式通过 SendGrid 等第三方发送电子邮件
【发布时间】:2020-03-21 04:46:46
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services amazon-cognito amazon-cognito-triggers


    【解决方案1】:

    Cognito 最近开始支持允许用户发送emails via third party。您必须通过 lambda 执行此操作,因此步骤如下:

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

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

    3. 创建对称 KMS 密钥

    4. 将lambda函数角色添加到key的用户列表中

    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 设置,所以先看看启用了什么

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

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

    【讨论】:

      【解决方案2】:

      Custom Sender Lambda Triggers 是使用 3rd 方通知服务提供者的方式。

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

      步骤概述:

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

      工具(截至 2021 年 3 月):

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

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

      【讨论】:

      • 感谢您写下这篇文章,AWS 似乎希望我们这些天来众包 cognito 的文档
      【解决方案3】:

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

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


      1Source from AWS Cognito docs

      【讨论】:

      • @10Repsaysgetvaccinated 这是一个答案。据说现在支持了。该链接仅供参考。
      • @Scratte 我还是不喜欢这个答案....我的编辑好吗?
      猜你喜欢
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多