创建 IAM 服务角色以允许 Amazon Cognito 为 MFA 发送 SMS 消息

Creating an IAM service role to allow Amazon Cognito to send SMS messages for MFA

我正在尝试设置 Congito 来管理我的用户池并设置 phone 验证。 Unfo运行ately,AWS 文档似乎已经过时了。

根据此文档,我应该会在我的 coginto 页面上看到一个创建 IAM 角色按钮,但它不存在: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html

我猜他们删除了该选项,但我也没有看到手动创建适当角色的方法。 Cognito 未被列为您可以为其创建角色的服务之一。

上图中有一个 Web 标识选项卡,所以我尝试使用它。果然,有一个创建角色的选项,甚至可以为其提供发送 SMS 所需的 SNS 访问权限,但它不是服务角色。生成的 ARN 没有第一个映像具有的 /service-role/ 路径。我想不出任何方法来更改 arn 以包含它,如果我只是尝试在没有它的情况下 运行 我的应用程序,我仍然收到错误消息:

[00:20:30] 注册对象时出错 { [00:20:30] "code": "InvalidSmsRoleTrustRelationshipException", [00:20:30] "message": "Role does not have a trust relationship allowing Cognito to assume the role", [00:20:30] "name": "InvalidSmsRoleTrustRelationshipException", [00:20:30]}

Cognito 现在坏了吗??我确定我遗漏了什么...

我刚刚试了一下,我得到了 "create role" 按钮,但是看看你的 UI 你已经 已经 创建了角色,此时 AWS 将其隐藏,仅显示已创建角色的 arn。

就是说,如果您出于任何原因需要从头开始重新创建它,您可以这样做;但是你必须离开可视化编辑器。将任何内容分配给信任关系页面的最简单方法,然后在创建角色后,select 切换到 Trust Relationships 选项卡,按 编辑信任关系,然后将 json 替换为以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "cognito-idp.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "generate-your-own-uuid-here"
        }
      }
    }
  ]
}

n.b。为了完整起见,角色的内联策略也应该是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:publish"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

要重新填充您删除的 Cognito 角色,您必须使用 aws cli,这在 Web 界面中是不可能的。

aws iam create-role --path /service-role/ --role-name words --assume-role-policy-document file://morewords

如此处回答,您必须使用 CLI 创建带有 --path 标志的服务角色才能获得该前缀。然而,即使在创建之后,它仍然不适用于 Cognito。是的,如果您要调用 cognito-idp get-user-pool-mfa-config --user-pool-id=...

,可以将 ExternalId 值设置为以前的值

但是,即使您更新它以反映完全相同的 ID,它仍然可能不起作用(对我来说不是)。所以这是诀窍。让 AWS Web 控制台为您重新创建角色。只需使用全新的用户池即可。

确保您已删除旧角色。设置一个新的用户池,启用 MFA,在该设置页面的底部,您将看到一个带有按钮 "Create Role" 的输入框,确保该名称是我们以前的名称(甚至不要认为斜线是允许的)反正在这里)。

这将创建 IAM 角色。接下来,您必须编辑它并放回原来的 ExternalId 值。同样,您可以使用 get-user-pool-mfa-config 命令找到它。

请注意,您创建的新池现在会遇到同样的问题。它不允许更改设置,因为它仍然认为角色正在创建过程中。但是,您的旧游泳池会很好。如果您 need/want 和 aws cognito-idp set-user-pool-mfa-config --user-pool-id=xxx --region=xxx--mfa-configuration OFF and/or 只需删除您专门为重新创建已删除角色而创建的临时用户池,您可以发出另一个 CLI 命令以完全禁用此新池的 MFA。