我发布了一个带角色的ec2实例。该角色具有以下策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}]}
并且ec2.amazonaws.com信任该角色
在实例上,我通过调用
从java程序中获取访问密钥和密钥curl http://169.254.169.254/2012-01-12/meta-data/iam/security-credentials/myrole/
然后我尝试使用这些凭据来发出sns请求。
我正在
<ErrorResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
<Error>
<Type>Sender</Type>
<Code>InvalidClientTokenId</Code>
<Message>The security token included in the request is invalid</Message>
当我使用自己的密钥对凭据进行硬编码时,请求会按预期进行。
答案 0 :(得分:2)
使用AWS SDK解决了这个问题。 SDK会自动从角色中进行凭据查找。或者,如果我做了AssumeRole Call
,我可以继续使用旧的API从解释它的文档中的常见问题解答页面
问:我如何承担IAM角色? 您通过调用AWS安全令牌服务(STS)AssumeRole API(即AssumeRole,AssumeRoleWithWebIdentity和AssumeRoleWithSAML)来承担IAM角色。这些API返回一组临时安全凭证,然后应用程序可以使用这些凭证对AWS服务API的请求进行签名。