【问题标题】:Getting my AWS credentials using an API call使用 API 调用获取我的 AWS 凭证
【发布时间】:2016-01-15 12:01:05
【问题描述】:

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

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

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

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

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

有可能吗?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-iam


    【解决方案1】:

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

    您可以直接从元数据服务中检索访问密钥 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"
    }
    

    【讨论】:

    • 是的,我就是这么想的。由于子进程可能会长时间运行,如果它在 2016-01-15T23:00:11Z 之后继续进行 S3 分段上传 http 调用会发生什么 - 使用您答案中的 JSON?
    • @MikeHogan 如果上传者客户端使用过期凭据进行任何 API 调用,则该 API 调用将被 ExpiredToken 拒绝。我认为您需要确保在临时凭证过期之前完成上传,或者获取新的临时凭证以用于原始集合过期后进行的所有 API 调用。我认为这应该可行,但尚未实际测试过。如果您在 EC2 实例上使用 IAM 角色,那么我希望 SDK 结合 EC2 元数据服务在幕后为您处理此问题,但同样尚未对此进行测试。
    • IP地址169.254.169.254从何而来?
    • @LRK9 169.254.169.254 是一些云供应商在其 VM 上用于公开元数据服务器的链接本地地址。见en.wikipedia.org/wiki/Link-local_addressserverfault.com/questions/427018/…
    • 为什么当我尝试在我的 EC2 实例上使用它时它会超时?我会启动什么样的虚拟机?
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 2020-06-06
    • 2017-02-04
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多