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

Recommended way to get temporary AWS credentials? AWS.config or STS?

我正在使用需要临时 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;
});

Should 在这种情况下有点不稳定,但是当您启动 EC2 实例并为其分配实例配置文件时,(某种程度上)临时凭证可用作 instance metadata.您通过绑定在 169.254.169.254

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

例如 curl http://169.254.169.254/latest/meta-data/ami-id

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

实例上的任何东西 运行 都可以访问此数据,这意味着如果您试图将第三方 SDK 从您的实例配置文件中分离出来,您已经失败了。

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

但是,STS 用例是,如果您想临时 给定用户更改为特定角色。您请求的用户必须具有 sts:AssumeRole 权限并且具有与目标角色相同的权限。这可用于审计目的等。