我之前寫過一篇關於如何上傳圖片至 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 修改為您的存儲桶名稱。

通過添加這一段內容,我成功讓它生效。添加後,您可以將“阻止公共訪問”設置如下:

這就是全部了。現在,我的文件(在這種情況下是圖片)可以公開訪問了。