iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Cloud Native

2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 系列 第 8

Day 08 - 聽說可以直接拿 S3 當源站,該怎麼做?

  • 分享至 

  • xImage
  •  

AWS S3 是很可靠的存儲服務(SLA 是 99.999999999%,也就是 11 個9),也因為儲存資料的可靠能力,也是很適合作為 CloudFront 源站的一個選擇。
本文章將來介紹相關如何使用,以及提供一些參考事項。

如果要透過 CloudFront 將存在 S3 Bucket 中的檔案提供出去,大概可以有以下作法:

  • 使用 S3 的 Website Endpoint,讓 CloudFront 將其當成一般的 HTTP Server。
  • (太殺了,不推薦) 設定 S3 Bucket,開放「所有人/anonymous」存取。
  • 設定 CF 使用 OAC/OAI 來存取 S3。
  • 其它,歡迎在留言區跟我分享。

以下分別說明如何達成。

使用 S3 的 Website Endpoint:

    1. 登入到 S3 console --> 選到對應的 bucket (我的 buket 是 s3://kgg23-ironman-s3 位於 ap-northeast-1 region) --> properties --> (捲到最底下) "Static website hosting"
    1. Edit --> Enable,設定對應的預設頁面 & (optional) 錯誤頁面
    1. 更新 bucket policy,允許 Public Access,其中 kgg23-ironman-s3 就是本次 bucket name,需設定為要附加這 Policy 的 bucket 名稱。。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::kgg23-ironman-s3/*"
        }
    ]
}
    1. 確認 Bucket Level & Account Level 的 Block Public Access 都已經關閉
    1. 都完成後,測試 Website Endpoint 是否已經可以正常運作。 --> 我這 bucket 看來已經正常運作了。

http://kgg23-ironman-s3.s3-website-ap-northeast-1.amazonaws.com/

    1. 登入 CloudFront Console,修改 CF 設定,新增一組 'Origin'。將 website endpoint 的 URL 填入,儲存保留。
    1. 到 Behaviors,將原先指向 EC2 的 Origin 設定,改為剛創建的 Origin ,儲存保留。
      https://ithelp.ithome.com.tw/upload/images/20230910/20162502npX2tgH4PD.png
    1. 驗證 CF 看到的是否都已經是來自 S3 bucket 的內容。(如果沒有看到新的內容,記得做 Invalidation 或者用先前提過的轉發 QueryString 來測試)

參考網址 https://ironman.kgg23.com/?v=1

設定 CF 使用 OAC/OAI 來存取 S3。

或許這是屬於 CloudFront 專用的方式(笑)。

    1. 為了避免干擾,我們先關閉前面設置的 s3 static website hosting。
    1. 登入 CloudFront Console,編輯你的 Distribution。
    1. 新增一組 Origin,直接從 Origin Domain 的下拉選單選擇你的 S3 Bucket。
    1. Origin access 的部分,選擇 "Origin access control settings (recommended)"
  • https://ithelp.ithome.com.tw/upload/images/20230910/20162502GfcNqnRr98.png
    1. 被提示需要選擇 Origin Access Control,因為沒有設定過,先點選 "Create control setting",使用預設,創建即可。
      https://ithelp.ithome.com.tw/upload/images/20230910/20162502m9DYHvMZJM.png
    1. 此時回到上一層,點選 "Copy Policy",我們將 Policy 複製下來,接著在另一個新的瀏覽器分頁,開啟 S3 Bucket 的 "Permission"。
      https://ithelp.ithome.com.tw/upload/images/20230910/20162502sDkbwCmbvk.png
    1. 在 S3 Bucket Policy 中貼上從 CloudFront Console 中複製而來的 Policy,儲存。(既然 static website hosting 已經關閉了,可以直接以這新的 Policy 取代原有的)
{
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipal",
                "Effect": "Allow",
                "Principal": {
                    "Service": "cloudfront.amazonaws.com"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::kgg23-ironman-s3/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::546350307885:distribution/E24N1S9BFA538Z"
                    }
                }
            }
        ]
      }
    1. 回到 CloudFront Console,儲存這組新建立的 Origin。
    1. 調整 CF 設定中, "General" 中的 'Default Root Object',將其改為前一範例 Website Endpoint 的預設文件,ex: index.html
      https://ithelp.ithome.com.tw/upload/images/20230910/20162502mWJRT1J4w2.png
    1. 到 Behaviors,將原先指向 Website Endpoint 的 Origin 設定,改為剛創建的 Origin,儲存保留。
    1. 驗證 CF 看到的是否都已經是來自 S3 bucket 的內容。(如果沒有看到新的內容,記得做 Invalidation 或者用先前提過的轉發 QueryString 來測試)

參考網址 https://ironman.kgg23.com/?v=2

到這邊,使用 S3 作為 CF Origin 的設置,就算是初步完成啦。


(2023.09.15: 補充項目 待日後動工)
有人私信我說想知道 CloudF"lare" 如何整 Amazon S3,嗯,先給 Link,如果敲碗的人夠多,再來補充 :D
CloudF"lare" 整合 S3 的官方文件


上一篇
Day 07 - 那個,我可以用自己的域名嗎
下一篇
Day 09 - 決定就是你了 - ITHome鐵人賽觀賽區 就是我們的羅格鎮
系列文
2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言