2016-12-26 272 views
1

我想将S3存储桶从一个帐户(A)移动到另一个帐户(B)。 我已经成功完成了该操作并从帐户A中删除了存储桶。 我试图将帐户B中的新存储桶移动到帐户B上的另一个存储桶,但了解到在存储桶本身旁边我无法访问这些文件。 经过与s3 cli及其权限的多次战斗后,我检查了s3api命令,发现这些文件(意外的惊喜)仍然保留了旧的所有权。 我现在想改变它,但仍然与put-bucket-acl站在一起,JSON文件不适用于s3api命令。 我试过在调试中运行这个命令,但是没有做太多的工作。 任何人都知道该怎么办? 也许更好的方法来解决这个问题?AWS S3权限 - 错误与put-bucket-acl

我做了什么至今: 命令:

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

(同与奚落对象ACL)

1.json文件:

"Grantee": { 
"DisplayName": "account_B", 
"EmailAddress": "[email protected]", 
"ID": "111111hughalphnumericnumber22222", 
"Type": "CanonicalUser", 
"Permission": "FULL_CONTROL" 
} 

我得到的错误:

输入中的未知参数: “受款人”,必须是以下之一:ACL, AccessControlPolicy,水桶,ContentMD5,GrantFullControl,GrantRead, GrantReadACP,GrantWrite,在输入GrantWriteACP未知参数: “许可”,必须是以下之一:ACL,AccessControlPolicy,水桶, ContentMD5,GrantFullControl,GrantRead,GrantReadACP,GrantWrite, GrantWriteACP

更新:2个账户之间 AssumeRole不会在我的情况下工作。 cli(s3cmd,s3api)图形用户界面(MCSTools,bucketexplorer),ACL使用标题,身体(邮差)也没有帮助.. 我正在连接AWS支持,并希望最好。 我会在有解决方案时进行更新。

回答

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 

到已创建,然后运行

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 
1

你的JSON是错误的。根据to the documentationput-bucket-acl选项,您可以使用--generate-cli-skeleton生成有效的JSON模板('骨架')。例如:

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

这里是输出:

{ 
    "ACL": "", 
    "AccessControlPolicy": { 
     "Grants": [ 
      { 
       "Grantee": { 
        "DisplayName": "", 
        "EmailAddress": "", 
        "ID": "", 
        "Type": "", 
        "URI": "" 
       }, 
       "Permission": "" 
      } 
     ], 
     "Owner": { 
      "DisplayName": "", 
      "ID": "" 
     } 
    }, 
    "Bucket": "", 
    "ContentMD5": "", 
    "GrantFullControl": "", 
    "GrantRead": "", 
    "GrantReadACP": "", 
    "GrantWrite": "", 
    "GrantWriteACP": "" 
} 
+0

我知道这个选项的,但我不清楚在参数 - 我需要插入他们所有的JSON文件?如果我不希望它公开,我如何获得“URI”?我在哪里得到“ContentMD5” 我是“所有者” - 我插入旧的所有者? 如果我的用户没有电子邮件地址,该怎么办?如何给他访问? 谢谢! – Busted

+0

在http://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-acl.html和http://docs.aws.amazon.com有一个很好的例子, /AmazonS3/latest/API/RESTBucketPUTacl.html。你可以省略'ContentMD5'。如果您不使用“AmazonCustomerByEmail”并使用“CanonicalUser”或“Group”,则可以省略用户电子邮件。 –