PUT/Sync需要s3cmd S3权限

Jos*_*ust 16 amazon-s3 amazon-web-services s3cmd

在迁移到AWS EC2时,我想有充分理由限制我的实例的用户权限.实例需要做的一件事是访问S3上的文件并在那里写文件.但是,如果不向该用户授予所有权限,我找不到任何方法来实现此目的.

s3cmd允许我在s3桶上调用"ls"和"du"我给了策略权限,但在尝试与其中一个文件夹进行PUT /同步时总是失败并出现403错误.如果我使用我的root凭据,则传输将直接进行.

所以,我不明白为什么如果我将所有权限授予用户所说的桶,它不能PUT,但如果我给它arn:aws:s3 :::*(所有桶)那么它可以.对我毫无意义.

有没有其他人曾经处理过此事?

bwi*_*ght 28

尝试这样的事情.我认为问题是你需要s3:ListAllMyBuckets和s3:ListBuckets才能使s3cmd工作.不知道为什么,但它不会工作,除非它可以获得桶的列表.我第一次尝试使用s3cmd权限时遇到了同样的问题,这就是解决方案.

{
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Action": [ 
          "s3:ListBucket", 
          "s3:PutObject",
          "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket/path", 
          "arn:aws:s3:::bucket/path/*"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

编辑我添加了s3:PutObjectAcl更新版本的s3cmd所需的操作,如下面的Will Jessop所述.

  • s3cmd现在还需要s3:GetBucketLocation. (3认同)
  • 我遇到了与OP相同的问题,我缺少的部分是最后带有'/*'的资源.没有这个,你可以列出,但你不能放置对象(如所说的那样403错误). (2认同)