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

时间:2018-10-28 18:44:55

标签: amazon-web-services amazon-cognito amazon-sns aws-iam amazon-iam

我正在尝试设置Congito来管理我的用户池和设置电话验证。不幸的是,AWS文档似乎已过时。

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

Cognito page

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

enter image description here

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

[00:20:30]错误注册对象{ [00:20:30]“代码”:“ InvalidSmsRoleTrustRelationshipException”, [00:20:30]“消息”:“角色没有信任关系,允许Cognito担任该角色”, [00:20:30]“名称”:“ InvalidSmsRoleTrustRelationshipException”, [00:20:30]}

Cognito现在坏了吗?我确定我缺少什么...

3 个答案:

答案 0 :(得分:1)

我刚刚尝试过,我得到了“创建角色”按钮,但是在您的UI中,您已经 创建了角色,此时AWS将其隐藏并仅显示了解已创建的角色。

也就是说,如果出于某种原因需要从头开始重新创建它,则可以这样做。但是,您必须离开可视编辑器。将任何内容分配给信任关系页面的最简单方法,然后在创建角色后选择它,切换到信任关系选项卡,按编辑信任关系,然后然后将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": [
                "*"
            ]
        }
    ]
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

就像在这里回答的那样,您必须使用CLI创建带有--path标志的服务角色,以获取该前缀。但是,即使创建了此文件,它对于Cognito仍然无效。是的,有一个ExternalId值可以设置为调用cognito-idp get-user-pool-mfa-config --user-pool-id=...

时的值

但是,即使您进行更新以反映相同的ID,它仍然可能无法工作(对我而言不是)。所以这就是窍门。让AWS Web控制台为您重新创建角色。只需使用全新的用户池即可。

确保已删除旧角色。设置一个新的用户池,启用MFA,在该设置页面的底部,您将看到一个带有“创建角色”按钮的输入框,请确保该名称与我们以前的名称相同(甚至不要认为此处使用斜杠)无论如何)。

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

现在请注意,您创建的新池现在将出现相同的问题。它不允许更改设置,因为它仍然会认为角色正在创建中。但是,您的旧游泳池就可以了。如果您需要/想使用aws cognito-idp set-user-pool-mfa-config --user-pool-id=xxx --region=xxx--mfa-configuration OFF,则可以发出另一个CLI命令来完全禁用此新池的MFA,并且/或者只需删除仅为重新创建已删除角色而创建的此临时用户池。