我正在使用需要临时 AWS 凭证才能访问 AWS 服务的第三方开发工具包。我将此开发工具包用作在 EC2 上运行的应用程序的一部分。我应用程序中的所有开发工具包都需要访问附加到我的 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;
});
在这种情况下应该有点不稳定,但是当您启动 EC2 实例并为其分配实例配置文件时,(在某种程度上)临时凭证将作为实例元数据提供。您可以通过绑定在169.254.169.254
上的本地 HTTP 服务器访问实例元数据
例如curl http://169.254.169.254/latest/meta-data/ami-id
返回正在运行的实例的 AMI-ID。可以通过这种方式访问与分配给实例的实例配置文件关联的 AWS 凭证。
实例上运行的任何内容都可以访问此数据,这意味着如果您尝试将第三方开发工具包与实例配置文件隔离,则您已经失败了。
但是,听起来这不像是您要做的。当您执行AWS.config.getCredentials();
时,它使用实例元数据(以及其他内容)来查找凭据。这是有利的,因为它允许您以各种方式提供凭据,而无需更改查找凭据的代码。
但是,STS 用例是,如果要临时将给定用户更改为特定角色。您请求的用户必须具有sts:AssumeRole
权限,并且具有与目标角色相同的权限。这可用于审计目的等。