2013-10-21 141 views
7

我在S3上有一個名爲xyz的存儲桶。在桶中,我有786/html/index.html中的html文件和786/html/images /中的多個圖像。文件夾和文件擁有對所有者的完全控制權限。我正在使用aws ruby​​-sdk爲786/html/index.html生成url,並且頁面工作正常,但786/html/images中的圖像未在786/html/index.html中呈現。它在瀏覽器控制檯上給我出現以下錯誤: -s3上的文件權限

Failed to load resource: the server responded with a status of 403 (Forbidden) 

現在我給了786/html/images的公開閱讀權限。 786和786/html僅擁有所有者的權限。現在786/html/index.html能夠渲染圖像,但現在圖像也可以通過public_url訪問。我很困惑,因爲786和786/html沒有公共權限仍然可以訪問圖像。

一個可能的解決方案可以是將AwsAccessKey和簽名附加到index.html中存在的圖像源。但是,因爲我們有多個圖像,所以我們需要一個通用簽名。

建議需要

感謝, Apurva Mayank

回答

3

S3是一個對象存儲。它不是一個分層文件系統,實際上並沒有「文件夾」。

對象鍵可以有按照慣例用/分隔的前綴。

這給出了文件夾的錯覺,但這與存在實際的層次結構不一樣。每個對象的權限都是獨立的,受制於策略(也可以包含前綴引用)。

但是要說「786和786/html沒有公開權限」,但「786/html/images」在S3中沒有公共權限,因爲這些「文件夾」下的對象實際上並沒有關聯跟他們。

無論您使用什麼來處理您的存儲桶,可能會給您一種其他方面的印象,或者可能是在文件夾中管理對象的權限,並給您這些權限被繼承的印象。

如果您的目的是使HTML文件只能通過簽名的URL進行查看,或者僅使用該頁面顯示圖片(並且不能自行下載),那麼您的代碼也需要完全限定並簽名嵌入式圖像的URL(以及文件,如果你希望它也是私有的)。

+1

爲了訪問在圖像中的786/HTML/index.html的我需要提供訪問密鑰和簽名。訪問密鑰對所有文件都是通用的,但是簽名又如何。我們可以爲s3對象生成一個通用簽名,並且aws s3支持這種類型的功能。 –