我正在使用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": [
"*"
]
}]
}
答案 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池访问权限的策略。
获取需求政策声明的最简单方法是
答案 3 :(得分:0)
我为我的身份池多次检查了为“身份验证角色”和“未经身份验证的角色”配置的角色的信任关系,但仍然发生了错误。 在查看了我的整个身份池配置后,我在
中认识到了这一点我选择了“从令牌中选择角色”,我错误配置的角色是我为用户添加到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 资源