2016-12-26 106 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」,則可以省略用戶電子郵件。 –