AWS S3权限 - put-bucket-acl

时间:2016-12-26 01:38:33

标签: json amazon-web-services amazon-s3 acl

我正在尝试将S3存储桶从一个帐户(A)移动到另一个帐户(B)。 我已成功完成该操作并从帐户A中删除了该存储桶。 我正在尝试将新存储桶从帐户B移动到帐户B上的另一个存储桶,但是在存储桶本身旁边我无法访问这些文件。 在与s3 cli及其权限进行了多次斗争后,我检查了s3api个命令,发现文件(惊喜)仍然保留了旧的所有权。 我现在正在尝试更改它,但是使用put-bucket-acl进行了静止,JSON文件不适用于s3api命令。 我尝试在调试中运行该命令,但没有做太多的事情。 谁知道该怎么办? 也许是解决这个问题的更好方法?

到目前为止我做了什么: 命令:

aws s3api put-bucket-acl --bucket my-bucket  --cli-input-json file://1.json

(与put-object-acl相同)

1.json文件:

"Grantee": {
"DisplayName": "account_B",
"EmailAddress": "user@mail.com",
"ID": "111111hughalphnumericnumber22222",
"Type": "CanonicalUser",
"Permission": "FULL_CONTROL"
 }

我得到的错误:

  

输入中的未知参数:" Grantee",必须是以下之一:ACL,   AccessControlPolicy,Bucket,ContentMD5,GrantFullControl,GrantRead,   GrantReadACP,GrantWrite,GrantWriteACP输入中的未知参数:   "权限",必须是以下之一:ACL,AccessControlPolicy,Bucket,   ContentMD5,GrantFullControl,GrantRead,GrantReadACP,GrantWrite,   GrantWriteACP

更新: 两个帐户之间的AssumeRole在我的情况下不起作用。 cli(s3cmd,s3api)GUI(MCSTools,bucketexplorer),ACL使用标题,正文(Postman)也没有帮助.. 我正在连接AWS支持并希望获得最佳支持。 当我有解决方案时,我会更新。

3 个答案:

答案 0 :(得分:1)

你的JSON错了。根据{{​​1}}选项的to the documentation,您可以使用put-bucket-acl生成有效的JSON模板('骨架')。例如:

--generate-cli-skeleton

这是输出:

aws s3api put-bucket-acl --bucket BUCKETNAME --generate-cli-skeleton

答案 1 :(得分:1)

所以,AWS的支持得到了拯救......我离开这个让其他人看到了,所以他们不必浪费2天就像我试图弄清楚到底出了什么问题一样。 ..

aws s3api get-object-acl --bucket <bucket_on_B> --key <Key_on_B_Owned_by_A>  --profile IAM_User_A > A_to_B.json

应用结果:

aws s3api get-bucket-acl --bucket <Bucket_on_B> --profile IAM_User_B

到创建的json文件上,然后运行

aws s3api put-object-acl --bucket <Bucket_on_B> --key <Key_on_B_Owned_by_A> --access-control-policy file://A_to_B.json --profile IAM_User_A

答案 2 :(得分:0)

对于仍然希望这样做的任何人-OP可能会查看正确的AWS文档,但忽略了正确的命令。由于这个stackoverflow页面,我很高兴能正确执行命令:)

https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-acl.html

^^此处提供带示例的json语法,而不是--cli-input-json,请使用--access-control-policy

{
  "Grants": [
    {
      "Grantee": {
        "DisplayName": "string",
        "EmailAddress": "string",
        "ID": "string",
        "Type": "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
        "URI": "string"
      },
      "Permission": "FULL_CONTROL"|"WRITE"|"WRITE_ACP"|"READ"|"READ_ACP"
    }
    ...
  ],
  "Owner": {
    "DisplayName": "string",
    "ID": "string"
  }
}

我将策略作为json文件使用了此命令,效果很好。

aws s3api put-bucket-acl --bucket bucketname --access-control-policy file://yourJson.json

还要注意的另一件事是,我无法与现有权限一起添加权限,旧的acl被覆盖了。因此,您要添加的任何权限都必须与现有策略一起放在json策略文件中。首先使用一些命令描述所有ACL会更容易。