AdSense

網頁

2022/5/9

AWS S3 bucket設定object公開讀取 public read

AWS S3 bucket設定object可被公開讀取。


下面兩種方法皆要關閉Block all public access設定Object Ownership ACLs enabled



事前要求

參考「AWS 建立S3 bucket並上傳檔案」建立S3 bucket s3-demo-bucket-202112151320並上傳hello.txt


在未設定object的公開讀取權限時,用瀏覽器無痕模式開啟hello.txt的object URL會得到Access Denied沒有權限讀取內容。




關閉Block all public access

Bucket內的object要能空開讀取必須關閉bucket的[Block all public access]。

前往bucket的[Permissions]頁籤。



點選[Block public access(bucket settings)]的[Edit]。



取消勾選[Block all public access]然後按最下面的[Save changes]儲存。



取消[Block all public access]則bucket可被任何人透過網路存取,所以跳出確認提示。輸入"confirm"按[Confirm]確定。



確認後可看到bucket多了[Publicly accessible]的警示。



不過仍需設定bucket的[Object Ownership]為[ACLs enabled]及設定object的ACL [Everyone(public access)]為[Read]公開讀取權限或設定policy讀取權限才可被任何人讀取。


設定Object Ownership ACLs enabled

在bucket [Permissions]頁籤下找到[Object Ownership]點選[Edit]。

把[Object Owndership]修改為[ACLs enabled]並勾選[I acknowledge that ACLs will be enabled]。



勾選[Bucket owner prefered],意思是object上傳時若指名bucket-owner-full-control-canned ACL則控制權歸屬bucket owner,否則為object writer上傳檔案的人。




方法ㄧ - 設定Object ACL

在要公開讀取的object的[Permission]頁籤的[Access control list(ACL)]點選[Edit]。



勾選[Everyone(public access)]的[Read]。



勾選[I understand the effects of these changes on this object]。按最下面的[Save changes]儲存。



回到object的[Permissions]頁籤可看到[Everyone(public access)]變成[Read]。




方法二 - 設定Bucket policy

此為官方建議的方式,利用policy允許擁有特定tag的object可公開讀取。

hello.txt設定一個tag key=public,,value=yes



然後在bucket的[Permissions]標籤的[Bucket policy]設定以下policy statement,意思為:「定義一個名為PublicGetObject的statement來允許所有principle讀取S3資源arn:aws:s3:::s3-demo-bucket-202112151320/*中objects有tag public:yes的請求。」

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::s3-demo-bucket-202112151320/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}




測試

完成以上任一方法的設定後用Chrome無痕模式貼上object的URL即可看到內容。




沒有留言:

AdSense