AWS Cognito无效的标识池配置

时间:2015-05-24 16:50:02

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

我正在使用AWS Javascript API并尝试获取指定的cognito id:

AWS.config.credentials.get(function(err) {
    if (!err) {
        console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);
    }
});

为什么这会导致下面的消息出现400错误?

{"__type":"InvalidIdentityPoolConfigurationException","message":"Invalid identity pool configuration. Check assigned IAM roles for this pool."}

我为经过身份验证和未经身份验证的用户配置了IAM角色。

{
"Version": "2012-10-17",
"Statement": [{
    "Action": [
        "mobileanalytics:PutEvents",
        "cognito-sync:*"
    ],
    "Effect": "Allow",
    "Resource": [
        "*"
    ]
}]
}

8 个答案:

答案 0 :(得分:36)

此错误的最常见原因是您的角色未设置为信任您的身份池。您应确认您的信任关系中列出的标识池ID与您正在使用的标识池匹配。

有关Amazon Cognito中信任关系的更多信息,请参阅我们的developer guide

答案 1 :(得分:22)

经过一番挖掘后,我意识到你必须将RoleArn和AccountId添加到你的凭证中。

尽管大部分文档都提到了这个就足够了:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxxxx',
});

这还不够。

我必须这样做:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxx',
    RoleArn: 'arn:aws:iam::xxxxx:role/Cognito_xxxxUsersUnauth_Role',
    AccountId: 'xxxxxxxxx', // your AWS account ID
});

您必须为您的身份池提及您的角色的ARN。

唯一提到它的医生是this one

错误的:

也许我错过了一些东西,但这肯定令人困惑。

答案 2 :(得分:3)

检查分配给您的身份池(身份验证用户)的角色的“信任关系”部分。 确保您有定义Cognito池访问权限的策略。

获取需求政策声明的最简单方法是

  1. 编辑池
  2. 为身份池创建新角色
  3. 在IAM中编辑此角色以复制政策声明
  4. 将这些信任关系添加到您所需的现有角色

答案 3 :(得分:0)

我为我的身份池多次检查了为“身份验证角色”和“未经身份验证的角色”配置的角色的信任关系,但仍然发生了错误。 在查看了我的整个身份池配置后,我在

中认识到了这一点
  • 身份验证提供程序
    • Cognito
      • 经过身份验证的角色选择

我选择了“从令牌中选择角色”,我错误配置的角色是我为用户添加到cognito群组的角色。 因此,更新此角色的信任关系可以解决问题。

希望这有助于某人:)

答案 4 :(得分:0)

我遇到此错误,我的问题原来是我的用户承担未经身份验证的角色,因为我从我的自定义CognitoDeveloperIdentityProvider中的logins()函数返回了AWSTask(result:nil)。

答案 5 :(得分:0)

就我而言,我正在使用SAML身份提供程序。 IAM角色策略中的操作应为:"Action": "sts:AssumeRoleWithSAML"。但这是例外的根本原因。我必须手动将其更改为"Action": "sts:AssumeRoleWithWebIdentity"。事实证明,由Cognito身份池创建的任何角色都将使用"Action": "sts:AssumeRoleWithWebIdentity"。它不会检查您的身份提供商的类型。我相信这是一个错误。

答案 6 :(得分:0)

另一个-可能不太常见-原因:请确保您实际上正在使用身份池,如果没有,请从aws-exports.js中删除身份池ID。

向我的用户池(而非身份池)添加联盟登录后,出现此错误。由于未知的原因,我的配置中包含aws_cognito_identity_pool_id。删除此ID可以为我解决错误。

答案 7 :(得分:0)

我在尝试通过身份池用户从 S3 检索文件时遇到了同样的错误。

解决方案:您可以在 IAM 中为“Web 身份”创建角色。然后提供您的身份池 ID 并添加您希望该角色拥有的权限,例如S3 完全访问。然后导航回 Amazon Cognito 身份池并将您刚刚创建的角色分配给 unauthrole 或 authrole。身份池中的用户现在应该能够访问 S3 资源