AWS:身份池配置无效。检查此池的已分配IAM角色

时间:2017-05-18 09:05:40

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

我创建了一个用户池&身份池。

我使用过javascript sdk。

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

但是当我尝试使用身份验证方法登录用户时尝试获取凭证" CognitoIdentityCredentials"通过以下代码传递idToken

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)

我已授权管理员访问&#34;未经身份验证的角色&#34; &安培; &#34;未经认证的角色&#34;身份池和我正在使用其凭据的用户。

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

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:23)

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

获取标识池ID +不起作用的角色名称。要做到这一点:

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

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

要做到这一点:

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

编辑要修复的信任关系。

答案 1 :(得分:2)

您在此处尝试访问的是“Cognito Federated Identity”凭据,该凭据是“Cognito User Pools”的单独AWS产品。为了检索这些凭据,您需要将用户池连接到联合身份池。

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

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

答案 2 :(得分:0)

IAM中创建角色并选择身份提供者时,请确保不要选择用户池ID,而必须选择身份池ID。

答案 3 :(得分:0)

使用放大时出现此错误。我注意到该错误是在我通过ampl cli创建Cognito用户角色之后出现的。我要做的是,从CLI删除这些角色,然后从AWS Console再次创建,一切正常!

答案 4 :(得分:0)

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

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