我有一个使用Google SignIn的iOS应用程序,我想使用Google Token ID验证AWS。
我在IAM中创建了角色,在Cognito中创建了身份池。当我试图在Dynamo中查询表时。我得到
'Not authorized to perform sts:AssumeRoleWithWebIdentity'
我有值得信赖的政策有我的谷歌客户端ID,
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"accounts.google.com:aud": #mygoogleclientid#
}
}
}
]}
错误
Error: Error Domain=com.amazonaws.AWSSTSErrorDomain Code=0 "(null)" UserInfo=
{
Type=Sender,
Message=Not authorized to perform sts:AssumeRoleWithWebIdentity,
Code=AccessDenied, __text=(
"n ",
"n ",
"n ",
"n "
)}
我想了解我为什么会出现这个错误,以及解决这个问题的方法。
我建议您尝试增强的Authflow,这样Cognito将为您调用sts:AsseumeRoleWithWebIdentity。
此处引用身份验证流文档:http://docs.aws.amazon.com/cognito/devguide/identity/concepts/authentication-flow/
以下是Cognito的基本身份验证流程:GetId->GetOpenIdToken(Cognito的Open Id令牌)->AssumeRoleWithWebIdentity(传递Cognito开放Id令牌)。
若您在AWS控制台中创建身份池,则默认策略设置为使用增强流或基本流。您只需要为DynamoDB访问和您想要集成的其他服务添加一个策略。