获取临时AWS凭据的推荐方法? AWS.config还是STS?

时间:2018-01-28 23:25:28

标签: javascript node.js amazon-web-services aws-sts aws-iam

我正在使用需要临时AWS凭证才能访问AWS服务的第三方SDK。我正在使用此SDK作为在EC2上运行的应用程序的一部分。我的应用程序中的所有SDK都需要访问相同的角色,该角色附加到我的EC2实例。下面,我列出了我找到的两个获取临时凭证的选项。这些选项中的哪一个是获取第三方SDK的临时凭证的推荐方法?

AWS.config

var AWS = require("aws-sdk");
AWS.config.getCredentials();
var creds = AWS.config.credentials

安全令牌服务(STS)

var sts = new AWS.STS();
var params = {
    RoleArn: "arn:aws:iam::123456789012:role/demo",
    RoleSessionName: "Bob",
};
sts.assumeRole(params, function(err, data) {
    var creds = data.Credentials;
});

1 个答案:

答案 0 :(得分:4)

在这种情况下应该有点流畅,但是当您启动EC2实例并为其分配实例配置文件时,(有些)临时凭证可用作instance metadata。您可以通过绑定在169.254.169.254

上的本地HTTP服务器访问实例元数据

e.g。     curl http://169.254.169.254/latest/meta-data/ami-id

返回正在运行的实例的AMI-ID。可以通过这种方式访问​​与分配给实例的实例配置文件关联的AWS凭证。

在实例上运行的任何都可以访问此数据,这意味着如果您尝试将第三方SDK与实例配置文件隔离,则您已经失败了。

但是,它听起来并不像你正在尝试做的那样。执行AWS.config.getCredentials();时,它使用实例元数据(以及其他things)来查找凭据。这是有利的,因为它允许您以各种方式提供凭据,而无需更改查找它们的代码。

然而,STS用例是指您希望暂时给定用户更改为特定角色。您要求的用户必须具有sts:AssumeRole权限,并且具有与目标角色相同的权限。这可用于审计目的等。