觀點 · 資訊分享

Google Cloud CDN 正式支援私有儲存桶:網站靜態檔不用再把 Cloud Storage 設成公開

Google Cloud 在 7 月 3 日宣布 Cloud CDN 搭配外部應用程式負載平衡器時,可以自助設定「私有儲存桶存取」並正式推出(GA):儲存桶維持私有,只授權 Google 代管的服務帳號去取檔案。

發布
2026-07-04
篇幅
約 3 分鐘 · 1,466 字
結構
7 節 + 3 題常見問題
標籤
#Google Cloud#Cloud CDN#Cloud Storage#IAM
Google Cloud CDN 正式支援私有儲存桶:網站靜態檔不用再把 Cloud Storage 設成公開

一句話看懂:Google Cloud 的 CDN 現在可以直接讀取私有的 Cloud Storage 儲存桶,網站靜態檔不必再為了加速而把儲存桶設成公開。

Cloud CDN 可直連私有儲存桶資訊圖卡:儲存桶不必設公開,只讓 CDN 的服務帳號去取檔案

先用白話講:這個功能在解決什麼?

想像你開了一間倉庫,裡面放著網站要用的圖片和檔案。為了讓宅配員(CDN,也就是離使用者近的加速節點)能進來取貨,你把倉庫大門整個打開,結果路人也能隨便進來拿。

私有儲存桶存取的做法是:大門維持上鎖,只發一張專屬鑰匙給 CDN 的宅配員。路人進不來,宅配員照樣能取貨、把檔案送到全世界的使用者手上。

發生什麼事

依 Google Cloud 版本資訊,2026 年 7 月 3 日:

  • Cloud CDN 與外部應用程式負載平衡器支援「自助設定」的私有儲存桶存取,對象是 Cloud Storage 儲存桶
  • 可以安全地提供內容,而不必把儲存桶設成公開
  • 存取權限透過 IAM 授權給一個 Google 代管的服務帳號來管理
  • 狀態是正式推出(GA)

以前和現在差在哪

項目 公開儲存桶 私有儲存桶存取
誰能讀檔案 被授權為 allUsers 的任何人 只有被授權的服務帳號
IAM 設定 把 Storage Object Viewer 授予 allUsers 把 Storage Object Viewer 授予 CDN 的服務帳號

給開發者的技術細節

依官方文件,設定流程大致是:先建立後端儲存桶資源,再把讀取角色授權給負載平衡器用來「填快取」的服務帳號。用 gcloud 的話:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:[email protected] \
  --role=roles/storage.objectViewer

要注意的幾點(皆出自官方文件):

  • BUCKET_NAME 換成儲存桶名稱,PROJECT_NUM 換成專案編號
  • 這個服務帳號要在專案裡至少建立過一個後端儲存桶資源之後才會存在
  • 角色只能選 Storage Object Viewer(roles/storage.objectViewer)
  • 為了讓儲存桶裡所有內容都被快取,要把快取模式設成 force-cache-all,並設定 max-ttl
  • 只支援讀取,不支援 POST、PUT、PATCH、DELETE

我的看法

做網站常遇到的情境是:圖片、前端打包檔放在雲端儲存桶,再接 CDN 加速。為了省事,很多人會直接把儲存桶設成公開,但公開之後就很難控制誰能拿、拿多少,而且一旦不小心把不該公開的檔案也放進去,就是資安事件。

這次的設計我覺得很實際:只開一個唯讀角色、只給一個服務帳號,權限範圍很小。不過也要記得,「私有」不等於「不會被看到」:只要檔案是透過 CDN 公開的網址在供應,任何人拿得到那個網址就能下載。真的要限制誰能看,還是要搭配簽章網址等另一層機制。

名詞小辭典

  • CDN(內容傳遞網路):把檔案複製到離使用者近的節點,讓下載更快。
  • Cloud Storage 儲存桶(Bucket):Google Cloud 放檔案的容器,類似雲端資料夾。
  • IAM:Google Cloud 的權限管理系統,決定誰能對哪些資源做什麼事。
  • 服務帳號(Service Account):給程式或服務使用的帳號,不是給真人登入用的。

資料來源

常見問題

為什麼以前要把儲存桶設成公開?
Cloud CDN 把儲存桶當成後端時,需要有權限去讀取檔案。官方文件的公開設定範例,是把 Storage Object Viewer 角色授予 allUsers(所有人)。這次的私有存取則改成只授權 CDN 使用的服務帳號。
要授權給哪個帳號?
授權給 [email protected] 這個服務帳號(PROJECT_NUM 換成專案編號),角色只選 Storage Object Viewer。官方註明:專案裡至少建立過一個後端儲存桶資源之後,這個服務帳號才會存在。
私有儲存桶存取可以拿來上傳檔案嗎?
不行。官方明講這個設計只用於唯讀的內容傳遞,不支援 POST、PUT、PATCH、DELETE 這類會修改或刪除資料的方法。
LINE