【问题标题】:AWS : Invalid identity pool configuration. Check assigned IAM roles for this poolAWS:无效的身份池配置。检查为此池分配的 IAM 角色
【发布时间】:2017-10-18 00:06:22
【问题描述】:

我已经创建了一个用户池和身份池。

我使用过 javascript sdk。

我可以使用 javascript sdk 成功注册、发送确认码和确认用户。

但是当我尝试使用身份验证方法登录用户并尝试通过使用以下代码传递 idToken 来获取具有“CognitoIdentityCredentials”的凭据时

logins[cognitoEndpoint + "/" + userPoolId] = jwtToken;

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: identityPoolId,
      Logins: logins
    });

它给了我以下错误

Error: Invalid identity pool configuration. Check assigned IAM roles for this pool.
    at Request.extractError (aws-sdk.js:104063)
    at Request.callListeners (aws-sdk.js:106060)
    at Request.emit (aws-sdk.js:106034)
    at Request.emit (aws-sdk.js:105121)
    at Request.transition (aws-sdk.js:104843)
    at AcceptorStateMachine.runTo (aws-sdk.js:108480)
    at aws-sdk.js:108492
    at Request.<anonymous> (aws-sdk.js:104859)
    at Request.<anonymous> (aws-sdk.js:105123)
    at Request.callListeners (aws-sdk.js:106070)

我已授予管理员访问身份池的“未经身份验证的角色”和“未经身份验证的角色”以及我正在使用其凭据的用户的权限。

我是 AWS 新手。谁能告诉我我错过了什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript angularjs amazon-web-services aws-sdk amazon-cognito


    【解决方案1】:

    检查您在 Cognito 身份池(联合身份)中分配的角色是否与身份池具有信任关系。

    获取身份池 ID + 无效角色的名称。为此:

    • 转到 Cognito
    • 选择管理联合身份
    • 选择身份池
    • 点击编辑身份池(右上角)
    • 记下身份池 ID
    • 记下不起作用的角色的名称(例如 Cognito_blahUnauth_Role

    在 IAM 中,检查角色的信任关系。 确保 StringEquals 条件值与身份池 ID 匹配

    为此:

    • 转到 IAM
    • 点击角色
    • 点击您之前记下的角色名称
    • 点击信任关系
    • 在右侧的条件下,检查 StringEquals 条件是否包含您之前记下的身份池 ID。

    编辑要修复的信任关系。

    【讨论】:

    • 这个,谢谢。我在设置我的云形成脚本时忘记添加这个
    • 这解决了我的问题。我放了身份池名称而不是池 ID。谢谢。
    • 如果可以的话,我会给你 100+ 这个答案。通过 Cognito 和 IAM 设置用户、组、角色、策略远非简单。在这个问题上花了三天时间!
    • 我可以吻你,@AlexHague。在我的例子中,我为另一个身份池重用了一个 IAM 角色,并且忘记了这一步。我的 IAM 角色仅与旧身份池有信任关系。我希望这个答案会出现在我的第一次 Google 搜索中,而不是四天后。
    • 这有帮助!!谢谢。
    【解决方案2】:

    您在此处尝试访问的是“Cognito 联合身份”凭证,它是“Cognito 用户池”的独立 AWS 产品。为了检索这些凭证,您需要将您的用户池连接到您的联合身份池。

    也许这个链接会有所帮助:http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html

    此外,我会从未经身份验证的权限中删除管理员访问权限,这意味着拥有您详细信息的任何人都可以控制您的 AWS 账户。

    【讨论】:

      【解决方案3】:

      当您在IAM 创建角色并选择身份提供者时,请确保您没有选择用户池 id,而是必须选择身份池 id。

      【讨论】:

        【解决方案4】:

        我在使用 amplify 时遇到了这个错误。我注意到在我从 amplify cli 创建 Cognito 用户角色后出现了错误。我所做的是,从 CLI 中删除这些角色并从 AWS 控制台再次创建,它工作正常!

        【讨论】:

          【解决方案5】:

          我遇到了类似的错误,通过在信任策略中添加以下内容解决了它

          注意:在启用此功能之前,您应该在 IAM 角色的信任策略中包含 sts:TagSession。

          【讨论】:

            【解决方案6】:

            如果您使用的是 OpenID,禁用访问控制的属性,错误就会消失

            【讨论】:

              【解决方案7】:

              当我在 Cognito 中手动将其他角色添加到现有角色时,我遇到了这个问题。 (之前使用 Amplify CLI 创建)

              TLDR:如果您要将组和角色用于 Amplify,请不要手动创建它们。

              出现此错误的我的帐户在该 JWT 中包含以下属性。 (你可以去jwt.io查看你的属性)

              "cognito:roles": [
                  "arn:aws:iam::*ACCOUNT_ID*:role/*THE_ROLE*"
                ],
              "cognito:preferred_role": "arn:aws:iam::*ACCOUNT_ID*:role/*THE_ROLE*",
              

              然后我找到了这些角色,并尝试验证它们是否附加了正确的条件:

              "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-west-2:<COGNITO_IDENTITY_POOL_ID>" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } }
              

              在验证角色几个小时后,配置它们终于开始工作了。

              经验教训:也可以手动修复它们。

              然后我手动删除了我在 Cognito 中创建的组以及与之关联的角色,然后通过 Amplify CLI 从头开始​​重新创建它。它就像一个魅力。除此之外,当我更改配置等时,Amplify 将维护它们。

              【讨论】:

                猜你喜欢
                • 2020-01-16
                • 2015-08-06
                • 1970-01-01
                • 2019-08-15
                • 2017-01-26
                • 2019-05-10
                • 1970-01-01
                • 2018-04-05
                • 2019-07-09
                相关资源
                最近更新 更多