我之前寫過一篇關於如何上傳圖片至 S3 的文章。
在我準備好 S3 存儲桶,並且成功上傳了圖片並將 URL 存儲在數據庫後,我發現這些圖片無法被公開以只讀的方式訪問。
圖片雖然存在,但任何人都無法查看。
如果我試圖訪問它,只會看到類似下面這樣的錯誤信息:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E5FBYNEYEFNZH</RequestId>
<HostId>
iImqC8XkvmPP4/BJxNGDZrPrDr7us1u3UeZqH8prlv3dk69R9m7uOaaaZDvTLAtne2rLkRWZ4=
</HostId>
</Error>
我覺得可能是權限問題,所以首先我試圖編輯“阻止公共訪問”設置,將原有的阻止設置禁用:
但是這並沒有解決問題,圖片依然無法訪問。
於是,我嘗試在單個文件的權限設置中,將“Everyone (公共訪問)”設置為“只讀”:
這樣做對於單個文件是有效的。
因此,我前往一般存儲桶權限,那裡有一個相似的 ACL 權限面板,我試圖設置相同的設置。
我將“Everyone (公共訪問)”設置為“只讀”,但結果並不如預期。
雖然我明確地設置了公共訪問權限,但是人們仍然無法公開查看文件。
事實上,沒有通過點擊操作可以實現這一點。
我必須設置一個存儲桶策略,可以從存儲桶權限頁面進行設置,然後我添加了以下內容:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOURBUCKETNAME/*"
}
]
}
請將 YOURBUCKETNAME 修改為您的存儲桶名稱。
通過添加這一段內容,我成功讓它生效。添加後,您可以將“阻止公共訪問”設置如下:
這就是全部了。現在,我的文件(在這種情況下是圖片)可以公開訪問了。