在我的Android应用程序中我想为AWS创建临时凭证,因此我不必在我的应用程序中存储我的秘密AWS凭据。我使用此代码创建凭据:
CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(), // get the context for the current activity
"XXXXXXXXXX",
"us-east-1:XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"arn:aws:iam::XXXXXXXXXXX:role/myUnauthRole",
"arn:aws:iam::XXXXXXXXXXX:role:role/myAuthRole",
Regions.US_EAST_1
);
AWSCredentials awsCredentials = new BasicAWSCredentials(cognitoProvider.getCredentials().getAWSAccessKeyId(), cognitoProvider.getCredentials().getAWSSecretKey());
当我这样尝试时,我的代码的最后一行出现错误,错误为"Not authorized to perform sts:AssumeRoleWithWeb Identity"
。我认为我用于myUnauthRole
和myAuthRole
的政策存在问题。它看起来像这样:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "*"
}]
}
在政策中我还有什么需要做的吗?我在鼻涕上找到了一个可用的例子。很高兴在这里得到一些支持。
谢谢!
答案 0 :(得分:0)
从错误中看,您似乎已设置了访问策略,但未设置您的信任策略。取自Amazon documentation here:
为了允许移动应用访问资源,您必须创建应用可以承担的一个或多个IAM角色。与任何角色一样,移动应用程序的角色包含两个策略。一种是信任策略,它指定谁可以担任角色(可信实体或委托人)。另一个策略(访问策略)指定允许或拒绝移动应用程序访问的实际AWS操作和资源,类似于用户或资源策略。
信任策略必须为sts:AssumeRoleWithWebIdentity操作授予Allow效果。
文档链接包含在Cognito Console中设置相应角色的步骤。
答案 1 :(得分:0)
正如其他答案中所述,问题在于您的信任关系,而不是您的访问政策。要检查您的信任关系中的一些事项:
如果您使用Cognito Console,则为您创建的角色应该为该标识池正确设置其信任关系。如果您想了解有关Cognito身份验证的更多信息,可以阅读on our blog。
我还想注意一些其他事项:
CognitoCachingCredentialsProvider
也会缓存ID,您可以调用clear来确保您没有使用较旧池中的缓存ID。