【问题标题】:Fetching AWS instance metadata from within Docker container?从 Docker 容器中获取 AWS 实例元数据?
【发布时间】:2014-04-20 00:03:00
【问题描述】:

是否有一种直接的方法可以从 Docker 容器中访问 AWS 实例元数据?

例如,当尝试在 EC2 实例上获取 IAM 角色的凭证时,这将在实例本身上起作用:

http://169.254.169.254/latest/meta-data/iam/security-credentials/my_role

...但不是来自在该 EC2 实例上运行的 Docker 容器内。

【问题讨论】:

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


    【解决方案1】:

    正如@Ben Whaley 在 cmets 中提到的, 以下命令对我有用,在https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows_task_IAM_roles.html中提到

    $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop
    $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
    New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway
    

    【讨论】:

      【解决方案2】:

      在容器和主机中执行此操作应该没有区别。容器可以直接访问 EC2 元数据。

      root@f1e5964e87e4:/# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/myrole
      {
        "Code" : "Success",
        "LastUpdated" : "2014-03-14T17:07:24Z",
        "Type" : "AWS-HMAC",
        "AccessKeyId" : "mykey",
        "SecretAccessKey" : "mysecret",
        "Token" : "mytoken",
        "Expiration" : "2014-03-14T23:09:39Z"
      }
      

      当您在容器中尝试该命令时,您会看到什么?已分配 IAM 角色?

      【讨论】:

      • 我刚刚对此进行了测试,并确认在 AWS EC2 实例上运行的 Docker 容器可以访问元数据服务。
      • 我必须使用--net=host 来启用对元数据服务的访问。
      • 不。 5 年前,我说过 169.254.169.254 可以从 docker 容器中访问。因此,您的代码可以检索其 EC2 实例主机元数据。如果您使用 AWS 开发工具包,则无需编写代码来检索临时凭证。我们的 SDK 会自动为您完成这项工作。 (并且 AWS CLI 正在使用 Python 开发工具包)
      • @RichardPayne 查看此链接以从 Windows 容器访问元数据:docs.aws.amazon.com/AmazonECS/latest/developerguide/…
      • 只想指出,我在 Ubuntu 机器中遇到了这个问题,并通过增加您可以制作的最大 PUT“跳数”来修复它。 aws ec2 modify-instance-metadata-options --instance-id <instanceId> --http-put-response-hop-limit 3 --http-endpoint enableddocs.aws.amazon.com/AWSEC2/latest/UserGuide/…
      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 2022-11-06
      • 2018-10-10
      相关资源
      最近更新 更多