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

Amazon web services 创建IAM服务角色以允许Amazon Cognito为MFA发送SMS消息,amazon-web-services,amazon-cognito,amazon-sns,aws-iam,amazon-iam,Amazon Web Services,Amazon Cognito,Amazon Sns,Aws Iam,Amazon Iam,我正在尝试设置Congito来管理我的用户池并设置电话验证。不幸的是,AWS文档似乎过时了 根据此文档,我应该在我的coginto页面上看到“创建IAM角色”按钮,但它不存在: 我猜他们删除了这个选项,但我也看不到手动创建适当角色的方法。Cognito不是您可以为其创建角色的服务之一 上图中有一个Web标识选项卡,所以我尝试使用它。果然,有一个选项可以创建一个角色,甚至可以为它提供发送SMS所需的SNS访问权限,但它不是一个服务角色。生成的ARN没有第一个映像所具有的/服务角色/路径。我无

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

根据此文档,我应该在我的coginto页面上看到“创建IAM角色”按钮,但它不存在:

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

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

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


Cognito现在坏了吗??我确信我遗漏了一些东西…

我刚刚尝试了一下,我得到了“创建角色”按钮,但看看您的UI,您已经创建了角色,此时AWS将其隐藏,并仅显示已创建角色的arn

也就是说,无论出于什么原因,如果你需要从头开始重新创建它,你都可以这样做;但是,您必须离开可视化编辑器。将任何内容分配给信任关系页面的最简单方法是,创建角色后,选择该角色,切换到信任关系选项卡,按编辑信任关系,然后用以下内容替换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创建角色--路径/服务角色/--角色名称单词--假定角色策略文档file://morewords

就像这里回答的那样,您必须使用CLI创建带有
--path
标志的服务角色,才能获得该前缀。然而,即使创建了它,它仍然不适用于Cognito。是的,有一个
ExternalId
值,如果您要调用
cognito idp get user pool mfa config--user pool id=…,

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

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

这将创建IAM角色。接下来,您必须编辑它,并将原始的
ExternalId
值放回原处。同样,您可以使用
getuserpoolmfaconfig
命令找到这一点


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

谢谢!如果没有用于cognito角色的arn,我无法创建一个移动集线器项目,但是当我进行测试时,sms角色被填充。我猜如果您手动创建userpool,则会出现createrole按钮,但mobilehub会为您处理它。我一定是把它删掉了。不用担心。AWS用户体验充满了锯齿状的边缘。对我来说不起作用,我在一些自动化测试中意外删除了我的SMS角色。我注意到我手动创建的IAM角色ARN没有“服务角色”路径。我的ARN是:ARN:aws:iam::008852776333:role/xkcd SMS role。但是,自动创建的角色ARN具有以下格式:ARN:aws:iam::008852776333:role/service role/A-SMS-role。我该怎么做才能模仿这一点?谢谢。