使用AWS CloudFront 的原始存取控制(OAC)建立安全的 S3 靜態網站

Kuro Huang
資安工作者的學習之路
12 min readOct 19, 2023

--

今天去 AWS 北部的每月小聚,講者富榮光介紹了 2022 年新的一個 ClondFront (CDN 服務)對使用 S3 建立靜態網站的安全存取機制 — Origin Access Control (OAC)

Source :低延遲內容交付網路 (CDN) — Amazon CloudFront — Amazon Web Services

自己在 AWS 使用上是新手 QQ ,記錄一下避免失憶,當天錄影:

新的 OAC 可以改善 OIA 比較不安全的機制,例如:

內容交付網路的主要特色 — 效能、安全 — Amazon CloudFront

S3 設定

先上傳靜態網頁範例資料到 S3 上,並「不要」用以前的方式勾選「靜態網站託管」,也不要把 ACL 設定成 Public,一切先照預設值。

建立 CloudFront CDN 服務

CloudFront 常見的來源:S3、ALB、EC2

建立分佈時選擇你剛剛上傳的 S3來源,並在「原始存取」勾選「原始存取控制設定」,來源網域會自動帶出你有的 S3 來源

建立完「原始存取控制設定」後會提供一個給 S3 的儲存貯體政策,請記得複製起來,因為要貼回去 S3 的政策做修改,才可以讓 CloudFront 存取 S3,建立 CloudFornt 後可以直接複製該政策

剩下的設定大部分依照預設值就可以,如果對資安想要加強,也可以同時啟用 WAF 的設定,我這邊有設定開啟,至於 AWS 的 WAF 的能力和其他廠商比起來如何,就看各位的經驗與口耳相傳了

如果要提升可用性,可以開啟 CloudFront Origin Shield,改善快取命中率、降低原始伺服器的負載,並協助改善效能。

回到正題,如果沒有複製到剛剛的儲存貯體政策,也可以回到該管理介面的「來源」去找到 S3 政策

接著我們到 「S3」 的「許可」,將剛剛的政策複製到 「儲存貯體政策」中,取代原有的政策

政策的格式如下圖範例

原廠文件:使用您的 CloudFront 分佈來限制對 Amazon S3 儲存貯體的存取 | AWS re:Post (repost.aws)

測試效果

完成後試著輸入你的網頁網址,這個範例的網址要帶的是「CloudFront 分佈網域名稱」搭配檔名。

如 : XXXXXX.cloudfront.net/index.html

大功告成!!可以顯示

Wapperalyzer 也是偵測到使用 S3 & CloudFront 服務

透過CloudFront CDN 限制地理位置來源

CloudFront 可以設定地理限制,我這邊透過允許清單(白名單)機制限制只有台灣IP可以連到網站

接著我透過 VPN 到日本,用日本 IP 再次進入網頁就會顯示 403

如果需要架設自己的網域,請在備用網域名稱那邊設定,並要有自訂 SSL 憑證,我的情境下 Route53 也有設定這一段的紀錄指到Cloudfront。

Do I need to migrate to OAC?

If you already have CloudFront distributions configured with OAI, you may wonder if you need to migrate from OAI to OAC. Even though we recommend using OAC for its latest security best practices and additional functionalities, CloudFront supports both the new OAC and legacy OAI. If you have a distribution configured to use OAI, you can easily migrate the distribution to OAC with few simple clicks. Any distributions using OAI will continue to work and you can continue to use OAI for new distributions. Refer to CloudFront origin access migration documentation for upcoming region restrictions. (Source : Amazon CloudFront introduces Origin Access Control (OAC) | Networking & Content Delivery

10月小聚講者的建議

感謝講者的總結與建議

  • 駭客攻擊的思維:優先繞過驗證,最後才會破解驗證
  • 用了 CDN,應該限制該服務的連線,必須透過 CDN 過來!
  • 拒絕直接存取源站(研發端除外),維持 CDN + WAF 的保護
  • 靜態網站放 S3 時,使用新的 OAC 存取模式,避免直接對外開放 S3
  • 多層 CDN 更快更安全,但也更貴,並提高了除錯門檻
  • 善用地理限制,只開通需要的國家連線
  • 設定 ALB 搭配 HTTP Header 做限制存取(但這個應該對防止網站被釣魚比較有幫助)

參考來源

日常念念念

最近,在進行 Cloud Security 專案時,為了使所撰寫的管理政策更加實際可行,除了參考國際標準框架和文件外,也參與雲端相關社群講座或是線上活動,想深入了解不錯的架構實踐方式,並學習如何將管理要求轉化為實際作為,實踐這些自己寫的要求。

以前曾擔任管理和技術顧問,曾見過太多不切實際的情況。我發現很多同仁寫的文件規範,連他自己無法清楚解釋風險和控制措施的原理與目的。這在台灣的顧問業中相當普遍,也是甲乙方管理人容易犯的錯誤。理論與實務必須相互結合,不可忽略這兩方面的學習。

技術人員通常不喜歡繁雜的文件規範,工程師更傾向於購買解決方案以實施「檢測性控制」,而不是「預防性控制」。實際上,具備技術背景去設計管理制度更能了解實務狀況並能夠不同角度思考,相對於管理人員,他們更具優勢。

管理人員通常不太了解技術原理,雖然我覺得不需要非常高深的技術與動手經驗,但至少需要了解技術背後的原理,並增強溝通能力。在傳統的地端服務中,很難了解所有的設備操作、介面和實務,但在雲端服務領域,大部分可以自己在免費額度下做 Lab 學習,幾乎都能自己動手試試看去了解背後的原理。

如果僅僅參考與複製國際規範、合規導向,或者將 A 客戶的要求直接套用到 B 客戶身上,所產生的文件可能會看起來奇怪且難以實現,也無法實際幫助公司提升使用雲服務安全性,不過顧問界目前這種風氣相當盛行,希望台灣未來能改善這個情況,我也要持續學習管理與技術的實務結合。

Cloud Certification

  • 2024.02 — AWS Certified Cloud Practitioner Certification (CCP)
  • 2024.02 — AWS Certified Solutions Architect — Associate (SAA)
  • 2024.03 — GCP Associate Cloud Engineer (GCP-ACE)

我想把各種經驗寫出來做分享教學,希望把社群的分享風氣帶出來給大家。並期望之後有人也可以寫出不同的心得文,如果是自修同學對於申請考試和準備上有任何問題,可以透過 LinkedIn 交朋友與 Facebook 來聯絡我,能力範圍內盡量幫你解決(或是你想認識我出來喝杯咖啡也歡迎,我很喜歡多認識業界的朋友們交流,也真的不少人找我聊聊過了!)。

--

--

Kuro Huang
資安工作者的學習之路

對教育充滿期待的資安從業者,現任ISC2台北分會理監事成員,喜歡用專業興趣交朋友建立友誼。希望對資安社群盡一點心力,並期望自己與身旁的人能有所進步,歡迎喝咖啡聊資安。希望保持著定期參與資安社群活動。個人介紹 https://portaly.cc/kurohuang