从ec2角色获取安全凭证不允许Java客户端访问

时间:2014-01-08 19:42:43

标签: amazon-web-services amazon-ec2 amazon-iam

我发布了一个带角色的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>

当我使用自己的密钥对凭据进行硬编码时,请求会按预期进行。

1 个答案:

答案 0 :(得分:2)

使用AWS SDK解决了这个问题。 SDK会自动从角色中进行凭据查找。或者,如果我做了AssumeRole Call

,我可以继续使用旧的API

从解释它的文档中的常见问题解答页面

  问:我如何承担IAM角色?   您通过调用AWS安全令牌服务(STS)AssumeRole API(即AssumeRole,AssumeRoleWithWebIdentity和AssumeRoleWithSAML)来承担IAM角色。这些API返回一组临时安全凭证,然后应用程序可以使用这些凭证对AWS服务API的请求进行签名。