我有AWS Cognito用户池登录工作,我有一个联合身份池,其中用户池已连接并在控制台中指定为身份验证提供程序。
但现在我正努力在Cognito用户池和Cognito Identity Pool之间建立信任。
在下面的代码段中,您可以看到我对未经身份验证的角色的信任关系。 (经过身份验证的角色版本目前完全匹配,最终它不会,但我将它们设置为相同并赋予两个角色特权以试图使其工作)。 xxxx是预填充的CognitoIdentityId,yyyy是我的帐号,zzzz是Cognito用户池ID。
当我尝试创建信任关系并使用该应用时,我不断收到错误。这是最常见的错误:
getCredentialsWithCognito:authenticated:customRoleArn:]_block_invoke | GetCredentialsForIdentity failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]
2016-08-29 21:50:11.634 signin[7778:1222711] AWSiOSSDK v2.4.7 [Error] AWSCredentialsProvider.m line:577 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.352 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]
信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxx”,
"cognito-idp.amazonaws.com:aud": "arn:aws:cognito-idp:us-east-1:yyyyyyyy:userpool/zzzzzzzzz”
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "unauthenticated",
"cognito-idp.amazonaws.com:amr": "unauthenticated"
}
}
}
]
}
部分问题可能是我不理解“cognito-idp.amazonaws.com:aud”的格式:“cognito-idp.amazonaws.com:aud”这一行。我怀疑我应该以某种方式更改格式或指定amazonaws.com的不同域作为aud,但我已经尝试了十几种组合并且失败了。
所以问题是:如何指定信任关系。
附属问题是: 我的想法是,如果我的用户使用用户池进行身份验证,并且正确指定了信任关系,那么我的用户将采用指定该信任的角色?或者用户是否仅以某种方式承担一个角色,如果存在多个信任关系,Cognito如何选择该角色?
答案 0 :(得分:0)
信任关系政策中有三个问题,