2014-07-22 22 views
2

我正在使用一項服務,將我需要的數據放在S3上,並給我一個預先登錄的URL下載列表(http://.s3.amazonaws.com/?AWSAccessKeyID = ... & Signature = ... & Expires = ...)。
我想將這些文件複製到我的S3存儲桶中,而無需下載它們並再次上傳。如何複製帶有預定網址的對象?

我使用的Ruby SDK(但願意嘗試別的,如果它的工作..),並不能寫這樣的東西。

我能初始化我的憑據(access_key和密碼)授予我訪問桶的S3對象,但我怎麼通過「源端」 access_key_idsignatureexpires參數?

爲了使問題更簡單一些 - 我甚至不能使用presigned參數對對象執行GET請求。 (而不是普通的HTTP,我想通過SDK API來完成)。

我發現了很多關於如何創建一個presigned URL的例子,但沒有提到如何使用已經給定的參數進行驗證(我顯然沒有我的數據提供者的secret_key)。

謝謝!

+0

我對此表示懷疑。有[AWS :: S3 :: S3Object.copy_to](http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#copy_to-instance_method),但您需要獲取網址爲S3:Object。我看不到如何使用簽名進行身份驗證或在獲取對象時注入簽名。最好的折衷辦法是在同一地區建立一個EC2 t2.micro實例,並從那裏運行網絡下載和API上傳,因爲數據傳輸是免費且相對較快的。 – Matt

+0

@mtm - 我試過copy_to,它似乎只在兩個桶都在我的賬戶中時才起作用(不需要「雙重認證」)。我認爲它適合作爲AWS的一項功能。也許這值得向他們暗示.. –

回答

1

您不能使用簽名的URL來完成此操作,但正如前面提到的,如果您在EC2中的相應區域爲相關存儲桶提取並上載,則基本不會產生額外成本。

另外值得注意的是,這兩個桶不必位於同一個帳戶中,但用於發出請求的aws密鑰必須具有放置目標對象並獲取源對象的權限。權限可以跨賬戶授予......雖然在很多情況下,這不太可能被授予。

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

+0

可悲的是,這是真的..我無法找到一種方式來與SignedURL做到這一點。完成讀取文件並將其從EC2機器寫入與源存儲區相同的區域。 –