[AWS]S3限制只讓CloudFront存取
弱弱自己的部落格圖庫是使用AWS S3 & AWS CloudFront
但基於安全性與最佳練習,弱弱不想讓該AWS S3 Bucket隨便公開給別人存取。
所以使用了CloudFront Origin Access Identity搭配AWS S3 Bucket Policy來限制存取。
S3 Bucket這部分就不多說明了,僅說明CloudFront OAI及CloudFront設定,並且修改S3 Policy
流程大概是:
- 建立
CloudFront OAI(Origin Access Identity) - 設定
CloudFront ODN(Origin Domain Name) - 修改
S3 Bucket Policy - 驗證
不多說,上圖!
進入到CloudFront Service後點選左下角的Origin Access Identity
點擊Create Origin Access Identity
在跳出的頁面輸入comment
OAI就建好囉
接著要建立CloudFront
新增一個Disreibutions並選擇Web
Origin Domain Name選擇S3 Bucket
這邊要稍微注意一下,不要又新增另一個OAI了。另外因為等等要演示S3 Policy的部分,所以這邊並沒有讓它自動更新Policy
接下來要設定以及調整一下CNAME跟預先申請好的ACM
到了這一部分,CloudFront的部分已經設定好了,在Status變成Deployed前,我們可以先去設定S3 Policy
主要要看Principal這個部分,要設定為"AWS":"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity Your_OAI_ID"
接著我們來驗證一下,開啟S3 Static WebSite Hosting複製EndPoint
在瀏覽器貼上後會發現跳出AccessDenied的訊息
如果我們改用CNAME後(Route53或自管DNS)的URL,就會正常讀取
當然如果需要保護的更嚴謹一點,可以在CloudFront前面再加上AWS WAF
這部分弱弱就沒有設定了(因為費用問題XDDD)