使用 API 调用获取我的 AWS 凭证

Getting my AWS credentials using an API call

我有一个节点应用程序,用于侦听 RabbitMQ 队列上的消息,对于它接收到的每条消息,它都会启动一个新的独立节点进程来处理消息的内容。

第二个按需启动的节点应用程序与 S3 一起工作,从盒子的 IAM 角色获取其凭据。

事实证明,我似乎被 Node AWS SDK 通过 EC2 元数据服务检索 IAM 角色的错误击中了。基本上,在负载下,对元数据服务的 http 调用超时 (https://github.com/aws/aws-sdk-js/issues/692)。

因此,作为一种解决方法,我想知道父节点进程是否可以使用某些 API 调用或其他技巧以某种方式检索 AWS 凭据,并将它们通过命令行传递给子节点应用程序?

这意味着父应用只调用一次元数据服务,减少了它的负载。

有可能吗?

让主节点应用程序从元数据服务中检索凭据,将它们缓存在本地内存中,在调用子进程时根据需要传递它们,并让主节点应用程序在它们过期之前刷新缓存的凭据。

您可以直接从元数据服务中检索访问密钥 ID、秘密访问密钥、会话令牌和到期时间。例如:curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-xyz 将产生:

{
  "Code" : "Success",
  "LastUpdated" : "2016-01-15T16:20:09Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "xxx",
  "SecretAccessKey" : "xxx",
  "Token" : "xxx",
  "Expiration" : "2016-01-15T23:00:11Z"
}