我做了有2個獨立的AWS賬戶的客戶的一些工作。我們需要將其中一個S3帳戶中的存儲桶中的所有文件移至第二個帳戶上的新存儲桶。S3移動到不同的帳戶桶之間進行文件?
我們認爲s3cmd會允許這樣做,使用格式:
s3cmd cp s3://bucket1 s3://bucket2 --recursive
然而,這僅允許我使用一個賬戶的鑰匙,我不能指定第二帳戶的帳戶。
有沒有辦法做到這一點,而無需下載文件並重新上傳他們的第二帳戶?
我做了有2個獨立的AWS賬戶的客戶的一些工作。我們需要將其中一個S3帳戶中的存儲桶中的所有文件移至第二個帳戶上的新存儲桶。S3移動到不同的帳戶桶之間進行文件?
我們認爲s3cmd會允許這樣做,使用格式:
s3cmd cp s3://bucket1 s3://bucket2 --recursive
然而,這僅允許我使用一個賬戶的鑰匙,我不能指定第二帳戶的帳戶。
有沒有辦法做到這一點,而無需下載文件並重新上傳他們的第二帳戶?
您不必向每個人開放權限。從鬥使用的源和目標複製下面的水桶政策在一個帳戶到另一個使用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
帶寬內AWS不計,所以你可以從裏面AWS一個盒子做這一切節省一些金錢和時間,只要將剷鬥在同一區域。
至於這樣做,而不必在文件touch在某處的計算機上 - 不這麼認爲。
除外:既然他們這樣做,從你郵寄到他們的硬盤批量上傳,他們可能會做同樣爲你的桶桶傳送。
謝謝湯姆。看起來就是這樣。從一個實例做起來似乎也是一個很好的方法。謝謝你的提示。 – Geuis
我會建議使用雲莓S3的探險家,作爲一個簡單的解決方案,得到的東西快速移動。此外,它還允許您使用內部aws無帶寬傳輸服務。
您也可以使用雲莓SDK工具集成到您的應用程序。
好運 喬恩
好吧,想出了一個答案。有可能還有其他的方法來做到這一點,但這很容易。
我能夠與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爲安全漏洞。這裏絕對不是很好的做法 - 這是一個很大的破解。 – swrobel
即使角色和策略是一個真正優雅的方式,我有另一種解決方案:
在本地計算機(臺式機或AWS之外的任何服務器)創建具有新的配置文件源代碼桶帳戶的憑證。
AWS --profile $ {} YOUR_CUSTOM_PROFILE在aws_access_key_id和aws_secret_access_key(你可以跳過區域和輸出)配置
填充
保存你的目的 - 鬥憑據作爲環境的變量
出口AWS_ACCESS_KEY_ID = AKI ...
出口AWS_SECRET_ACCESS_KEY = CN ...
現在做同步,但增加的關鍵 「配置文件」 - 參數
AWS --profile $ {} YOUR_CUSTOM_PROFILE S3同步S3:// $ {} SOURCE_BUCKET_NAME S3:// $ {} DESTINATION_BUCKET_NAME
如果源桶和目標桶的憑據不同,我可以執行S3同步嗎? – HariShankar
Ref:在兩個不同的帳戶之間複製/移動:http://stackoverflow.com/questions/5518205/move-files-directly-from-one-s3-account-to-another –