【问题标题】:AWS Import-image User does not have access to the S3 objectAWS Import-image 用户无权访问 S3 对象
【发布时间】:2020-06-12 16:55:22
【问题描述】:

运行 AWS (Amazon Web Services) 导入图像任务时:

aws ec2 import-image --description "My OVA" --disk-containers file://c:\TEMP\containers.json

我收到以下错误:

调用 ImportImage 操作时发生错误(InvalidParameter):用户无权访问 S3 对象。(mys3bucket/vms/myOVA.ova)

我遵循了this AWS document on importing a VM 中的所有说明(包括步骤 1、2 和 3)。具体来说,我设置了一个 vmimport 角色和该角色的推荐策略。我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    我收到了相同的错误消息,只是消息没有指定 s3 对象的名称。在我的 containers.json 文件中,我必须使用存储桶名称而不是完整的 arn。与 arn:aws:s3:::mybucketname 不同,我只使用 mybucketname。 这行得通...

    [
       {
        "Description": "VM Simulator",
        "Format": "vmdk",
        "UserBucket": {
            "S3Bucket": "mybucketname",
            "S3Key": "vmdisks/vmSimulator.vmdk"
        }
      }
    ]
    

    这失败了……

    [
       {
        "Description": "Qtof Simulator",
        "Format": "vmdk",
        "UserBucket": {
            "S3Bucket": "arn:aws:s3:::mybucketname",
            "S3Key": "vmdisks/vmSimulator.vmdk"
        }
      }
    ]
    

    随着消息... 调用 ImportImage 操作时发生错误(InvalidParameter):用户无权访问 S3 对象

    【讨论】:

      【解决方案2】:

      我终于想通了。问题是我的 IAM user(包含 vmimport 角色)无权访问我的 S3 存储桶。一旦我授予我的 IAM 用户访问我的 S3 存储桶的权限(通过在 S3 中设置存储桶策略),import-image 命令就会成功启动该过程。

      要在 S3 中设置存储桶策略,请右键单击您的存储桶(即 S3 中的顶级存储桶名称),然后单击“属性”。然后从显示的右侧菜单中,打开“权限”,然后单击“添加存储桶策略”。将出现一个小窗口,您可以在其中输入 JSON 作为策略。这是对我有用的一个:

      {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "Stmt1476979061000",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::MY-AWS-account-ID:user/myIAMuserID"
              },
              "Action": "s3:*",
              "Resource": [
                  "arn:aws:s3:::mys3bucket",
                  "arn:aws:s3:::mys3bucket/*"
              ]
          }
      ]}
      

      您需要将“MY-AWS-account-ID”替换为您的 AWS 账户 ID,将“myIAMuserID”替换为包含 vmimport 角色的 IAM 用户 ID。 This document 讨论如何获取您的 AWS 账户 ID。 this document 更多地谈论在 S3 中授予权限。

      【讨论】:

      • 好像还有一个策略生成器工具:awspolicygen.s3.amazonaws.com/policygen.html
      • 我仍然遇到同样的错误。 {“版本”:“2012-10-17”,“声明”:[{“效果”:“允许”,“主体”:{“AWS”:“arn:aws:iam::196690049214:user/d0325mgray” }、“操作”:“s3:*”、“资源”:[“arn:aws:s3:::images-d0325mgray”、“arn:aws:s3:::images-d0325mgray/*”] } ] }
      【解决方案3】:

      我通过尝试导入损坏的(在我的情况下为空).vmdk 文件设法得到了这个错误。这完全是误导,暗示这是一个访问控制问题,而实际上它是一个文件解析问题。我想在内部他们有一个 try/catch 并在尝试访问文件时出现任何错误时抛出错误 User does not have access to the S3 object。早些时候,当文件直接不存在时,我也收到此错误。只是为像我一样卡住的人发布此错误,此错误可能意味着该文件不存在、无法访问或无法正确处理。

      一个有趣的注释,在我的具体情况下,如果他们在错误后的括号中包含文件路径,则表示文件不存在。如果错误后面没有括号,则表示这是文件解析问题。

      【讨论】:

        【解决方案4】:

        就我而言,这正是故障排除文档https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-troubleshooting.html 中所说的。我的 aws cli 登录到不同的区域,然后在其中创建了存储桶。

        【讨论】:

          猜你喜欢
          • 2018-09-21
          • 1970-01-01
          • 2013-02-27
          • 2021-11-24
          • 2020-02-11
          • 2020-01-30
          • 1970-01-01
          • 2020-09-27
          • 2020-05-20
          相关资源
          最近更新 更多