【问题标题】:Static content for AWS EC2 with IAM role具有 IAM 角色的 AWS EC2 的静态内容
【发布时间】:2014-04-11 08:33:48
【问题描述】:

阅读the / many / resources 了解如何在已启动的 EC2 实例中使用临时 AWS 凭证,我似乎无法运行一个极其简单的 POC。

期望:

  1. 启动 EC2 实例
  2. SSH 进入
  3. 从私有 S3 存储桶中提取一段静态内容

步骤:

  1. 创建IAM 角色
  2. 使用上面指定的IAM 角色启动一个新的EC2 实例; SSH
  3. 使用aws configure 设置凭据以及(成功)填充到http://169.254.169.254/latest/meta-data/iam/security-credentials/iam-role-name 中的详细信息
  4. 尝试直接使用AWS CLI 访问文件

IAM 角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::bucket-name/file.png"
    }
  ]
}

当我使用AWS CLI 访问文件时,抛出此错误:

A client error (Forbidden) occurred when calling the HeadObject operation: Forbidden
Completed 1 part(s) with ... file(s) remaining

我错过了哪一步?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-s3 amazon-iam aws-cli


    【解决方案1】:

    为了将来参考,问题在于我如何调用AWS CLI;之前我在跑步:

    aws configure
    

    ...并提供在自动生成的角色配置文件中找到的详细信息。

    一旦我简单地允许它找到自己的临时凭证并手动指定唯一的其他必需参数(区域):

    aws s3 cp s3://bucket-name/file.png file.png --region us-east-1
    

    ...文件拉得很好。希望这会在将来对某人有所帮助!

    【讨论】:

    • 谢谢。我在 6 个不同的地区使用它,只有一个必须添加 --region 随便,工作!
    【解决方案2】:

    希望这可以帮助到这里的其他 Google 员工。

    A client error (403) occurred when calling the HeadObject operation: Forbidden
    

    如果您的系统时钟太远,也可能导致错误。我过去 12 小时得到了这个错误。将时钟设置在真实时间的一分钟以内,错误就消失了。

    【讨论】:

      【解决方案3】:

      根据Granting Access to a Single S3 Bucket Using Amazon IAM,IAM 策略可能需要应用于两个资源:

      1. 正确的存储桶(例如“arn:aws:s3:::4ormat-knowledge-base”)
      2. 桶内的所有对象(例如“arn:aws:s3:::4ormat-knowledge-base/*”)

      又是一条绊线。该死!

      【讨论】:

      • 如果您想将 aws configure 与 IAM 用户的 ID/密钥一起使用,这似乎是解决方案。这是策略的一部分:“资源”:[“arn:aws:s3:::yourbucket”,“arn:aws:s3:::yourbucket/*”],
      【解决方案4】:

      我刚刚收到此错误,因为我有旧版本的 awscli:

      破碎:

      $ aws --version aws-cli/1.2.9 Python/3.4.0 Linux/3.13.0-36-generic

      作品:

      $ aws --version aws-cli/1.5.4 Python/3.4.0 Linux/3.13.0-36-generic

      【讨论】:

      • 你是如何更新版本的?当我运行 sudo pip install awscli --upgrade 它说 1.2.9 版本是最新的
      • 我认为--upgrade必须在包名之前。
      • 这也是我的解决方案。从aws-cli/1.3.11 升级到aws-cli/1.10.2 解决了这个问题。
      【解决方案5】:

      如果存储桶中不存在密钥,您也会收到此错误。

      仔细检查密钥——我有一个脚本,它在将项目发布到存储桶中时在密钥的开头添加了一个额外的斜杠。所以这个:

      aws s3 cp --region us-east-1 s3://bucketname/path/to/file /tmp/filename
      

      失败并显示“调用 HeadObject 操作时发生客户端错误(禁止):禁止。”

      但是这个:

      aws s3 cp --region us-east-1 s3://bucketname//path/to/file /tmp/filename
      

      工作得很好。根本不是权限问题,只是愚蠢的密钥创建。

      【讨论】:

        【解决方案6】:

        我遇到此错误是因为我没有为我的 IAM 用户附加策略。

        【讨论】:

          【解决方案7】:

          tl;dr:通配符文件通配在 s3cmd 中对我来说效果更好。

          就像 aws-cli 一样酷——因为我的一次性 S3 文件操作问题并没有像我希望的那样立即解决,我认为它可能会解决——我最终安装并使用了 s3cmd。

          无论我在概念上想象什么语法和幕后工作,s3cmd 都更直观,更符合我的成见。

          也许这不是你来这里的目的,但它对我有用。

          【讨论】:

            猜你喜欢
            • 2017-12-31
            • 2018-01-22
            • 2018-11-10
            • 2018-01-07
            • 2017-10-01
            • 2017-01-31
            • 2017-05-27
            • 2022-06-10
            • 2019-06-14
            相关资源
            最近更新 更多