AWS STS AssumeRole:是否需要IAM用户凭据?

时间:2016-07-29 17:28:01

标签: amazon-web-services aws-sdk amazon-iam aws-api-gateway

文档冲突

AssumeRole相关的documentation here似乎在一个连续的块中自相矛盾:

  

您必须使用现有的IAM用户凭据来调用此API。更多   信息,请参阅创建角色以将权限委派给IAM   用户和配置受MFA保护的API访问。

     

这是一个未签名的电话,意味着该应用不需要   访问任何AWS安全凭证以进行通话。

矛盾被强调为粗体

代码示例

code sample provided here当然似乎需要凭据:

AmazonSecurityTokenServiceClient securityTokenServiceClient = new AmazonSecurityTokenServiceClient(
    Config.AccessKey,
    secretKeyAsString,
    securityTokenServiceConfig);

...

AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest
{
    DurationSeconds = sessionDurationSec,
    RoleArn = roleArn,
    RoleSessionName = awsUsername,
    ExternalId = groupSid
};

...

assumeRoleResponse = securityTokenServiceClient.AssumeRole(assumeRoleRequest);

总结

哪个是真的?代码示例中的请求真的是多余的吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

AssumeRole API调用确实需要现有的AWS凭据

为了承担IAM角色,必须使用现有的一组凭据,以便AWS知道谁在担任该角色。这样AWS就可以验证假定方可以担任该角色。

在文档中:

  

这是一个未签名的电话,这意味着该应用无需访问任何AWS安全凭证即可进行通话。

这似乎是不正确的信息。

答案 1 :(得分:1)

这确实是文档中的错误,正在纠正过程中。 AssumeRole确实需要现有的长期(IAM用户)或临时凭证凭证才能调用。它是两个联邦等价物,AssumeRoleWithSAML和AssumeRoleWithWebIdentity,可以在没有凭证的情况下调用。抱歉混乱!