GCP Cloud Storage 完全指南:物件儲存從入門到實戰
「Cloud Storage 是 GCP 最基礎也最通用的服務——幾乎所有 GCP 工作負載都會用到它。」
你的 VM 跑起來了(GCP-103),但應用程式的圖片、影片、日誌、備份放在哪裡?Cloud SQL 的資料庫備份存哪裡?機器學習的訓練資料集怎麼管理?
答案幾乎都是 Cloud Storage。
Cloud Storage 是 GCP 的物件儲存(Object Storage)服務,地位類似 Amazon S3 或 Azure Blob Storage。它要解決的問題很單純:存放任意大小、任意數量的檔案,而且要夠可靠、夠便宜。
你將學到:
- ✅ Cloud Storage 的核心概念:Bucket 與 Object
- ✅ 四種儲存類別:選對類別省大錢
- ✅ 建立 Bucket 與上傳物件(
gcloud storage現代化指令) - ✅ 存取控制:IAM vs ACL,誰能存取你的資料
- ✅ 生命週期管理:自動降級與刪除舊資料
- ✅ 物件版本控制:防止意外刪除
- ✅ Signed URLs:安全的臨時存取連結
- ✅ ACE 考試重點整理
一、Cloud Storage 核心概念
1.1 什麼是物件儲存?
Cloud Storage 跟你熟悉的檔案系統(像 Linux 的 /home/user/files/)差很多,是兩種不同的思路:
| 比較 | 傳統檔案系統 | Cloud Storage(物件儲存) |
|---|---|---|
| 儲存單位 | 檔案(File) | 物件(Object) |
| 組織方式 | 目錄樹狀結構 | 扁平命名空間(Bucket 內) |
| 修改方式 | 可以局部修改檔案 | 只能整個替換物件 |
| 擴展性 | 受硬體限制 | 幾乎無限 |
| 存取方式 | POSIX API(open/read/write) | HTTP REST API |
物件儲存的兩個核心元素:
- Bucket(貯體):物件的容器,類似 S3 Bucket。全球唯一命名,有地區設定。
- Object(物件):實際儲存的檔案,加上 metadata(中繼資料)。
1.2 Object 的完整路徑
每個物件的完整路徑格式為:
gs://BUCKET_NAME/OBJECT_NAME
例如:
gs://my-company-assets/images/product/laptop-2026.jpg
gs://my-backup-bucket/database/2026-03-11/prod-db-backup.sql.gz
Cloud Storage 底層其實是扁平結構,/ 只是物件名稱的一部分而已。不過 GCP Console 和各種工具會幫你模擬出資料夾的樣子,操作起來比較直覺。
二、四種儲存類別:選對能省大錢
Cloud Storage 根據資料的存取頻率提供四種儲存類別,存取越少,儲存越便宜,但讀取費用越高。
2.1 四種儲存類別比較
| 儲存類別 | 最短保留期 | 月儲存費用 | 適用場景 |
|---|---|---|---|
| Standard | 無 | 較高 | 網站圖片、使用者上傳、頻繁讀取的資料 |
| Nearline | 30 天 | 中等 | 月報告、每月備份、不常查詢的資料 |
| Coldline | 90 天 | 較低 | 季報表、災難復原備份 |
| Archive | 365 天 | 最低 | 法規要求的長期封存、極少存取的歷史資料 |
💡 定價備註:各儲存類別的確切價格因地區不同且會定期調整。asia-east1(台灣)的最新定價請參考 GCP Cloud Storage 定價頁面。
2.2 最短保留期是什麼意思?
假設你把物件丟到 Nearline(最短保留 30 天),結果只放了 5 天就刪掉,GCP 還是會按 30 天的費用收你錢。
費用組成(非 Standard 類別需注意):
總費用 = 儲存費用 + 讀取(下載)費用 + 操作費用
- Standard:只有儲存費用,讀取免費(讀取費用包含在儲存價格中)
- Nearline/Coldline/Archive:額外收取每 GB 讀取費用
選擇建議:
你的資料被存取的頻率是...
↓
每天/每週? → Standard
每個月大約一次? → Nearline
每季大約一次? → Coldline
每年或更少? → Archive
2.3 自動降級:讓資料自動移到便宜的類別
生命週期管理(見第五節)可以讓資料自己從 Standard 降到 Coldline 再到 Archive,你完全不用手動去搬。
三、建立 Bucket 與基本操作
3.1 Bucket 命名規則
Bucket 名稱是全球唯一的(整個 GCP 的所有用戶共用同一個命名空間),所以命名規則卡得很嚴:
| 規則 | 說明 |
|---|---|
| 全球唯一 | 不能與任何用戶的現有 Bucket 重名 |
| 長度 | 3-63 個字元(含 . 最長可到 222 個字元) |
| 字元 | 只能包含小寫字母、數字、連字號(-)、底線(_)、點(.) |
| 開頭/結尾 | 不能以連字號或點開頭或結尾 |
| 禁用字串 | 不能以 goog 開頭,不能包含 google |
| 非 IP 格式 | 不能是 IP 位址格式(例如 192.168.1.1) |
| 保密原則 | Bucket 名稱是公開可見的,不要放個人資訊 |
命名建議:使用 {company}-{project}-{purpose} 格式:
# 好的命名範例
my-company-prod-assets
my-project-2026-backups
yourcompany-app-user-uploads
# ❌ 不好的命名
my-bucket # 太通用,可能已被占用
MyBucket # 有大寫字母
my bucket # 有空格
google-backup # 包含 google
3.2 建立 Bucket(現代化 gcloud storage 指令)
💡 重要:
gcloud storage是取代gsutil的新一代 CLI,下載速度快 79%,2025 年建議使用gcloud storage作為主要工具。gsutil仍可使用但不再是推薦選項。
# 建立 Bucket(指定地區和儲存類別)
gcloud storage buckets create gs://my-company-prod-assets \
--location=asia-east1 \
--default-storage-class=STANDARD \
--uniform-bucket-level-access # 推薦:啟用統一存取控制
# 建立 Archive Bucket(長期封存)
gcloud storage buckets create gs://my-company-archive-2026 \
--location=asia-east1 \
--default-storage-class=ARCHIVE
# 查看 Bucket 資訊
gcloud storage buckets describe gs://my-company-prod-assets
地區選項:
| 類型 | 範例 | 說明 |
|---|---|---|
| Region | asia-east1(台灣) | 資料存在單一地區 |
| Dual-region | ASIA1(東京+大阪,皆位於日本) | 自動複製到兩個地區 |
| Multi-region | ASIA(整個亞洲) | 分散在多個地區,最高可用性 |
3.3 上傳、下載、管理物件
# 上傳單一檔案
gcloud storage cp ./local-file.txt gs://my-bucket/
# 上傳並指定路徑
gcloud storage cp ./photo.jpg gs://my-bucket/images/2026/photo.jpg
# 下載物件
gcloud storage cp gs://my-bucket/images/2026/photo.jpg ./downloads/
# 列出 Bucket 內容
gcloud storage ls gs://my-bucket/
gcloud storage ls gs://my-bucket/images/ # 列出特定「資料夾」
# 遞迴上傳整個資料夾
gcloud storage cp -r ./local-folder/ gs://my-bucket/
# 同步本地資料夾到 GCS(只上傳有變更的檔案)
gcloud storage rsync -r ./local-folder/ gs://my-bucket/folder/
# 刪除物件
gcloud storage rm gs://my-bucket/old-file.txt
# 刪除「資料夾」(遞迴)
gcloud storage rm -r gs://my-bucket/old-folder/
# 查看物件 metadata
gcloud storage objects describe gs://my-bucket/photo.jpg
# 移動或重新命名物件
gcloud storage mv gs://my-bucket/old-name.txt gs://my-bucket/new-name.txt
3.4 gsutil 指令(舊版,仍可用)
如果你在現有腳本中看到 gsutil,這些指令仍然有效:
gsutil cp local.txt gs://my-bucket/
gsutil ls gs://my-bucket/
gsutil mb -l asia-east1 gs://my-bucket/
gsutil versioning set on gs://my-bucket/
四、存取控制:誰能存取你的資料?
4.1 IAM vs ACL
Cloud Storage 提供兩種存取控制方式:
| 方式 | 說明 | 推薦程度 |
|---|---|---|
| IAM(身分與存取管理) | 在 Bucket 或 Project 層級設定權限 | ✅ 強烈推薦 |
| ACL(存取控制清單) | 在單個物件或 Bucket 上設定 | ⚠️ 舊版,避免使用 |
建議:啟用 Uniform bucket-level access(統一 Bucket 層級存取),停用 ACL,讓所有存取控制都透過 IAM 管理。
# 啟用統一存取控制(建立後也可設定)
gcloud storage buckets update gs://my-bucket \
--uniform-bucket-level-access
4.2 常用的 Cloud Storage IAM 角色
| 角色 | 說明 |
|---|---|
roles/storage.admin | 完整管理 Bucket 和物件 |
roles/storage.objectAdmin | 管理物件(讀/寫/刪),不能刪 Bucket |
roles/storage.objectCreator | 只能上傳新物件(不能讀或刪) |
roles/storage.objectViewer | 只能讀取物件 |
roles/storage.legacyBucketReader | 可以列出 Bucket 內容 |
# 授予服務帳號讀取 Bucket 的權限
gcloud storage buckets add-iam-policy-binding gs://my-bucket \
--member="serviceAccount:my-app@my-project.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# 授予開發者讀寫物件的權限
gcloud storage buckets add-iam-policy-binding gs://my-bucket \
--member="user:developer@yourcompany.com" \
--role="roles/storage.objectAdmin"
4.3 公開存取防護(Public Access Prevention)
如果你不希望任何 Bucket 被意外設定為公開,可以在 Organization 或 Project 層級啟用公開存取防護:
# 啟用公開存取防護(防止意外設為公開)
gcloud storage buckets update gs://my-bucket \
--public-access-prevention
4.4 Signed URLs:安全的臨時存取連結
有時候你得讓沒有 GCP 帳號的人(例如外部客戶)臨時下載某個物件,這時候就輪到 Signed URL 上場:
# 建立 1 小時有效的下載連結
gcloud storage sign-url gs://my-bucket/report-2026-03.pdf \
--duration=1h \
--private-key-file=service-account-key.json
# 輸出類似:
# https://storage.googleapis.com/my-bucket/report-2026-03.pdf?X-Goog-Signature=...
Signed URL 特性:
- 任何人持有這個連結都能存取該物件(不需要 Google 帳號)
- 連結在指定時間後自動失效
- 只能存取單一特定物件
- 適合分享報告、下載連結、用戶上傳入口
五、生命週期管理:讓資料自動省錢
5.1 什麼是生命週期規則?
生命週期規則就是讓你定一條「物件符合某些條件時,就自動做某件事」的規則:
條件(Condition)+ 動作(Action)= 生命週期規則
動作類型:
| 動作 | 說明 |
|---|---|
SetStorageClass | 將物件改為指定儲存類別(例如 Standard → Coldline) |
Delete | 永久刪除物件 |
AbortIncompleteMultipartUpload | 清除未完成的分片上傳 |
條件類型:
| 條件 | 說明 |
|---|---|
age | 物件建立後的天數 |
createdBefore | 在特定日期之前建立 |
isLive | 是否為當前版本(用於版本控制) |
matchesStorageClass | 目前的儲存類別 |
numNewerVersions | 比此版本更新的版本數量 |
5.2 實際範例:典型的資料分層策略
{
"rule": [
{
"condition": { "age": 30 },
"action": { "type": "SetStorageClass", "storageClass": "NEARLINE" }
},
{
"condition": { "age": 90 },
"action": { "type": "SetStorageClass", "storageClass": "COLDLINE" }
},
{
"condition": { "age": 365 },
"action": { "type": "SetStorageClass", "storageClass": "ARCHIVE" }
},
{
"condition": { "age": 2555 },
"action": { "type": "Delete" }
}
]
}
這個設定的效果:
第 0-30 天:Standard(頻繁存取期)
第 31-90 天:Nearline(月度查詢期)
第 91-365 天:Coldline(季度查詢期)
第 366-2555 天:Archive(長期封存)
第 2556 天起:自動刪除(7 年保留後清除)
# 套用生命週期規則
gcloud storage buckets update gs://my-bucket \
--lifecycle-file=lifecycle-policy.json
# 查看現有規則
gcloud storage buckets describe gs://my-bucket \
--format="json(lifecycle_config)"
5.3 自動清除舊版本(搭配版本控制使用)
{
"rule": [
{
"condition": {
"numNewerVersions": 3,
"isLive": false
},
"action": { "type": "Delete" }
}
]
}
這個規則保留每個物件最新的 3 個版本,超過 3 個版本的舊版本自動刪除。
六、物件版本控制:防止意外刪除
6.1 為什麼需要版本控制?
沒開版本控制的話,物件刪了就是真的刪了,救不回來。開了版本控制之後:
- 刪除物件 → 變成「非現行版本(Noncurrent)」,不會真正消失
- 可以恢復到任意歷史版本
- 每個版本有獨立的「Generation Number」
6.2 啟用與使用版本控制
# 啟用版本控制
gcloud storage buckets update gs://my-bucket --versioning
# 查看版本控制狀態
gcloud storage buckets describe gs://my-bucket \
--format="value(versioning_config.enabled)"
# 列出所有版本(包含非現行版本)
gcloud storage ls -a gs://my-bucket/
# 恢復特定版本(複製舊版本成為新的現行版本)
gcloud storage cp \
"gs://my-bucket/file.txt#1234567890123456" \
gs://my-bucket/file.txt
6.3 Soft Delete(軟刪除,2025 年新選項)
Google 在 2025 年推出了 Soft Delete,可以當成版本控制的輕量版:
- 刪除物件後,在保留期限內(7-90 天)仍可恢復
- 不需要啟用完整的版本控制
- 更簡單,適合只需要「防止意外刪除」而不需要完整歷史版本的場景
七、其他進階功能
7.1 Cloud Storage FUSE:把 GCS 掛載成檔案系統
Cloud Storage FUSE 可以把 GCS Bucket 掛載成 Linux 的本地目錄,這樣那些用 POSIX 檔案 API 的應用程式(特別是機器學習的訓練腳本)就能直接讀寫 GCS:
# 安裝 gcsfuse
export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | \
sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install gcsfuse
# 掛載 Bucket
mkdir /mnt/my-bucket
gcsfuse my-bucket /mnt/my-bucket
# 現在可以像本地目錄一樣使用
ls /mnt/my-bucket/
cp /mnt/my-bucket/data.csv ./local/
主要用途:機器學習訓練資料存取(GKE/Vertex AI 上的 ML 工作負載)
注意:Cloud Storage FUSE 不是完整的 POSIX 實作,像隨機寫入、檔案鎖定這些操作都不支援。如果你真的需要完整 POSIX,那就改用 Filestore。
7.2 大量資料傳輸
| 工具 | 適用場景 |
|---|---|
| Storage Transfer Service | 從 AWS S3、其他雲端、HTTP/HTTPS 來源定期傳輸 |
| Transfer Appliance | 超過 300 TB 的離線實體傳輸(Google 寄送硬體設備) |
| gcloud storage rsync | 從本地或其他 GCS Bucket 同步 |
八、免費額度與成本管理
Cloud Storage 免費額度
| 項目 | 免費額度 | 注意事項 |
|---|---|---|
| Standard 儲存 | 每月 5 GB(僅限美國地區) | asia-east1 不在免費範圍 |
| Class A 操作 | 每月 5,000 次(新增、列出) | 超出後計費 |
| Class B 操作 | 每月 50,000 次(讀取) | 超出後計費 |
| 同地區傳輸 | 免費 | VM 和 GCS 在同一 Region |
節省成本的技巧
- 善用生命週期管理:資料在不常被存取後自動降到低成本類別
- VM 與 Bucket 放同一 Region:避免跨地區傳輸費用
- 刪除未完成的 multipart uploads:設定
AbortIncompleteMultipartUpload規則 - 清理版本控制的舊版本:設定
numNewerVersions規則避免舊版本堆積
九、ACE 考試重點
Cloud Storage 在 ACE 考試裡出現的頻率很高,下面幾種題型最常見:
類型 1:儲存類別選擇
題目:你的公司有法規要求將財務資料保留 7 年,且每年只有在稽核時存取一次。應使用哪種儲存類別?
- ❌ Standard(費用最高,不需要頻繁存取)
- ❌ Nearline(30 天最短保留,適合月度存取)
- ❌ Coldline(90 天最短保留,適合季度存取)
- ✅ Archive(365 天最短保留,成本最低,適合每年偶爾稽核)
類型 2:生命週期管理
題目:你的應用程式上傳的日誌前 30 天需要頻繁查詢,30-90 天偶爾查詢,90 天後不再需要。如何自動管理這些日誌的儲存費用?
- ✅ 設定生命週期規則:
- 30 天後 SetStorageClass 到 Nearline
- 90 天後 Delete
類型 3:存取控制
題目:你需要讓外部合作夥伴(無 GCP 帳號)下載特定報告,且連結只在 48 小時內有效。最合適的方法是?
- ❌ 將物件設為
allUsers公開存取 - ❌ 建立一個 GCP 帳號給合作夥伴
- ✅ 產生 48 小時有效的 Signed URL 並分享
類型 4:傳輸工具選擇
題目:你需要將 5 PB 的資料從公司機房遷移到 GCP。網路頻寬有限(1 Gbps),傳輸 5 PB 需要數個月。最適合的方案是?
- ❌ Storage Transfer Service(受限於網路頻寬)
- ❌ gsutil -m cp(同樣受限於網路)
- ✅ Transfer Appliance(實體設備離線傳輸)
十、總結
Cloud Storage 四大儲存類別記憶法:
Standard → 每天都在用的資料(Standard 如同日常)
Nearline → 近一點(Near)但不那麼頻繁,30 天
Coldline → 有點冷(Cold),90 天才會翻出來
Archive → 封存在閣樓(Archive),一年才看一次
必記的最佳實踐:
| 功能 | 建議設定 |
|---|---|
| 存取控制 | 啟用 Uniform bucket-level access,用 IAM 管理 |
| 成本優化 | 設定生命週期規則,自動降級舊資料 |
| 防刪除 | 啟用版本控制或 Soft Delete |
| CLI 工具 | 使用 gcloud storage(取代 gsutil) |
| 外部分享 | Signed URLs,設定合適的有效期 |
系列文章連結
- 📖 上一篇:GCP-106: Cloud Monitoring & Logging 完全指南
- 📖 進階延伸:ACE-201: GCP 資料儲存策略:Cloud Storage 與 Cloud SQL 選型指南
- 📖 進階延伸:ACE-302: GCP 成本優化完全指南
延伸閱讀
🎓 本文是「GCP 精通之路」系列的 GCP-107 篇(入門篇),掌握 Cloud Storage 基礎後,建議繼續學習 GCP 資料儲存策略(ACE-201),了解 Cloud SQL 等其他儲存選項。
下一課 ACE-208:Cloud Build CI/CD 實戰,學習從程式碼到生產環境的全自動化部署。