2012-10-03 29 views
18

我做了有2個獨立的AWS賬戶的客戶的一些工作。我們需要將其中一個S3帳戶中的存儲桶中的所有文件移至第二個帳戶上的新存儲桶。S3移動到不同的帳戶桶之間進行文件?

我們認爲s3cmd會允許這樣做,使用格式:

s3cmd cp s3://bucket1 s3://bucket2 --recursive 

然而,這僅允許我使用一個賬戶的鑰匙,我不能指定第二帳戶的帳戶。

有沒有辦法做到這一點,而無需下載文件並重新上傳他們的第二帳戶?

+0

Ref:在兩個不同的帳戶之間複製/移動:http://stackoverflow.com/questions/5518205/move-files-directly-from-one-s3-account-to-another –

回答

33

您不必向每個人開放權限。從鬥使用的源和目標複製下面的水桶政策在一個帳戶到另一個使用IAM用戶

桶複製從 - SourceBucket

桶複製到 - DestinationBucket

來源AWS賬戶ID - XXXX-XXXX-XXXX

源IAM用戶 - SRC-IAM-用戶

以下策略裝置 - 該IAM用戶 - XXXX-XXXX-XXXX:SRC-IAM-用戶具有S3:ListBucket和s3 :GetObject priv在SourceBucket/*和S3 ileges:ListBucket和S3:上DestinationBucket PutObject特權/ *

在SourceBucket政策應該是這樣的:

{ 
"Id": "Policy1357935677554", 
"Statement": [ 
    { 
     "Sid": "Stmt1357935647218", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::SourceBucket", 
     "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Action": ["s3:GetObject"], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3::: SourceBucket/*", 
     "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} 
    } 
] 
} 

在DestinationBucket的政策應該是:

{ 
"Id": "Policy1357935677554", 
"Statement": [ 
    { 
     "Sid": "Stmt1357935647218", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3::: DestinationBucket", 
     "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} 
    }, 
    { 
     "Sid": "Stmt1357935676138", 
     "Action": ["s3:PutObject"], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3::: DestinationBucket/*", 
     "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"} 
    } 
] 
} 

要運行的命令是s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1

+0

精美的作品。謝謝! – Sergio

+1

如果我想將這個文件夾/文件下載到我的本地機器上,該怎麼辦? –

+0

如果這些桶位於不同區域 – David

3

帶寬內AWS不計,所以你可以從裏面AWS一個盒子做這一切節省一些金錢和時間,只要將剷鬥在同一區域。

至於這樣做,而不必在文件touch在某處的計算機上 - 不這麼認爲。

除外:既然他們這樣做,從你郵寄到他們的硬盤批量上傳,他們可能會做同樣爲你的桶桶傳送。

+1

謝謝湯姆。看起來就是這樣。從一個實例做起來似乎也是一個很好的方法。謝謝你的提示。 – Geuis

0

我會建議使用雲莓S3的探險家,作爲一個簡單的解決方案,得到的東西快速移動。此外,它還允許您使用內部aws無帶寬傳輸服務。

您也可以使用雲莓SDK工具集成到您的應用程序。

好運 喬恩

-6

好吧,想出了一個答案。有可能還有其他的方法來做到這一點,但這很容易。

我能夠與s3cmd工具來做到這一點,但可能可以用類似的工具來完成。

當您配置s3cmd時,請配置您的您的帳戶訪問密鑰和祕密訪問密鑰。

使用您正轉移到的存儲桶的帳戶登錄到S3 Web控制檯。

參觀S3 Web控制檯。

https://console.aws.amazon.com/s3/home 

點擊你的存儲桶,然後點擊動作,然後點擊屬性。

在「權限」選項卡下的底部點擊「添加更多的權限。」

Set "Grantee" to Everyone 

Check "List" and "Upload/Delete" 

Save 

轉移,從終端

s3cmd cp s3://from_account_bucket s3://to_account_bucket --recursive 

運行,當傳輸完成後,應立即訪問的S3控制檯一次刪除您添加的桶的權限。

這裏顯然有一個安全問題。我們轉移到的存儲桶向所有人開放。有人找到您的存儲桶名稱的機會很小,但確實存在。

您可以使用存儲桶策略作爲替代方式,只開放特定賬戶的訪問權限,但這對我來說太難了,所以我把這個做爲一個練習給那些需要弄清楚的人。

希望這會有所幫助。

+1

對不起,-1爲安全漏洞。這裏絕對不是很好的做法 - 這是一個很大的破解。 – swrobel

0

即使角色和策略是一個真正優雅的方式,我有另一種解決方案:

  1. 讓您的AWS-憑據來源桶科目
  2. 同爲目的地桶科目
  3. 在本地計算機(臺式機或AWS之外的任何服務器)創建具有新的配置文件源代碼桶帳戶的憑證。

    AWS --profile $ {} YOUR_CUSTOM_PROFILE在aws_access_key_id和aws_secret_access_key(你可以跳過區域和輸出)配置

  4. 填充

  5. 保存你的目的 - 鬥憑據作爲環境的變量

    出口AWS_ACCESS_KEY_ID = AKI ..​​.

    出口AWS_SECRET_ACCESS_KEY = CN ...

  6. 現在做同步,但增加的關鍵 「配置文件」 - 參數

    AWS --profile $ {} YOUR_CUSTOM_PROFILE S3同步S3:// $ {} SOURCE_BUCKET_NAME S3:// $ {} DESTINATION_BUCKET_NAME

+1

如果源桶和目標桶的憑據不同,我可以執行S3同步嗎? – HariShankar

相關問題