使用Terraform为AWS Cognito用户池设置帐户恢复偏好设置

7

为了实现基础设施即代码,我已经通过 Terraform 使用有用的aws_cognito_user_pool 资源配置了 AWS Cognito 用户池。

但是,在MFA和验证部分下面,似乎找不到帐户恢复偏好的参数/配置映射。

如果没有说明,它似乎是我的默认选择:

(不推荐) 如果有电话,否则电子邮件,并且如果用户同时将其用于 MFA,则允许用户通过电话重置密码。


目标

我想将此设置为仅电子邮件,如下图中红色矩形所示:

aws cognito user pool settings

请问有人知道我需要使用哪个 Terraform 参数来实现这一点吗? 在文档记录的aws_cognito_user_pool资源中,似乎没有任何选项与此相对应。

4个回答

5

经过一年的时间,由于新引入了 account_recovery_setting 设置,我现在可以回答自己的问题了。这个设置是 aws_cognito_user_pool 资源的一部分。

例如,要将账户恢复偏好设置为仅限电子邮件,我们可以执行以下操作:

resource "aws_cognito_user_pool" "mypool" {
  name = "mypool"

  account_recovery_setting {
    recovery_mechanism {
      name     = "verified_email"
      priority = 1
    }
  }
}

自从AWS提供程序的版本v3.19.0,此功能已经可用,并作为合并的PR的一部分。


4

你好,Peter,我正在使用CloudFormation模板创建Cognito配置。

稍作修改并将其转换为YAML格式后,我们可以将恢复设置设置为仅电子邮件选项。请查看下面的代码片段。

UserPool:
    Type: "AWS::Cognito::UserPool"
    Properties:
      UserPoolName: "test-pool"
      UsernameAttributes: [email]
      AccountRecoverySetting:
        RecoveryMechanisms:
          - Name: "verified_email"
            Priority: 1
      AutoVerifiedAttributes:
        - email

这对我来说似乎是有效的:)

注意:尝试将其他选项 "admin_only" 添加到其中时,AWS 生成错误 Invalid account recovery setting parameter. Account Recovery Setting cannot use admin_only setting with any other recovery mechanisms.


1
嘿@DHEERAJ。为了我的理解:你的意思是说你已经成功使用了aws_cloudformation_stack资源吗?如果是这样,你能否提供一个更完整的片段呢? - Peter J Langley
嗨@Peter J Langley,资源:UserPool:Type:“AWS :: Cognito :: UserPool”Properties:UserPoolName:“test”UsernameAttributes:[email]AccountRecoverySetting:RecoveryMechanisms:Name:“verified_email”Priority:1AutoVerifiedAttributes:-emailVerificationMessageTemplate:DefaultEmailOption:CONFIRM_WITH_LINKEmailVerificationSubject:SubjectEmailVerificationMessage:verifyemail {####}Schema:-Name:emailAttributeDataType:StringMutable:falseRequired:trueMfaConfiguration:“OFF”UserPoolTags:Tag:“x”,,UserPoolClient:Type:“AWS :: Cognito :: UserPoolClient”Properties:ClientName:“x”GenerateSecret:falseUserPoolId:!RefUserPool - DHEERAJ

2
Terraform目前还不支持此功能。 但是你可以使用本地执行代替:
resource "null_resource" "setup_account_recovery_settings" {
  triggers = {
    version = "${var.version_local_exec_account_recovery_settings}"
  }

  provisioner "local-exec" {
    command = "aws cognito-idp update-user-pool --user-pool-id ${aws_cognito_user_pool.userpool.id} --account-recovery-setting 'RecoveryMechanisms=[{Priority=1,Name=verified_email},{Priority=2,Name=verified_phone_number}]' --region ${var.region}"
  }
}

但这将抹掉您的整个配置。相反,您可以提供完整的json配置,但为什么使用terraform呢?


2
Terraform目前还不支持它。我认为这可能是情况。我不想使用这个本地执行的逃生口。我现在已经在GitHub上提出了这个功能请求的问题(https://github.com/terraform-providers/terraform-provider-aws/issues/11220)。 - Peter J Langley
1
我可以知道如何设置选项“无 - 用户必须联系管理员重置密码”吗? - CdVr
Terraform AWS提供程序现在支持此功能:请参见此处的答案 - Peter J Langley

0
根据David的想法,如果您想启用“仅电子邮件”选项,则应设置

--account-recovery-setting 'RecoveryMechanisms=[{Priority=1,Name=verified_email}]'

敬礼,


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接