跳至主要內容
ESC
GCP 核心服務 — 第 2/10 篇

GCP Cloud Storage 完全指南:物件儲存從入門到實戰

GCP-107

「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較高網站圖片、使用者上傳、頻繁讀取的資料
Nearline30 天中等月報告、每月備份、不常查詢的資料
Coldline90 天較低季報表、災難復原備份
Archive365 天最低法規要求的長期封存、極少存取的歷史資料

💡 定價備註:各儲存類別的確切價格因地區不同且會定期調整。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

地區選項

類型範例說明
Regionasia-east1(台灣)資料存在單一地區
Dual-regionASIA1(東京+大阪,皆位於日本)自動複製到兩個地區
Multi-regionASIA(整個亞洲)分散在多個地區,最高可用性

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

節省成本的技巧

  1. 善用生命週期管理:資料在不常被存取後自動降到低成本類別
  2. VM 與 Bucket 放同一 Region:避免跨地區傳輸費用
  3. 刪除未完成的 multipart uploads:設定 AbortIncompleteMultipartUpload 規則
  4. 清理版本控制的舊版本:設定 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 精通之路」系列的 GCP-107 篇(入門篇),掌握 Cloud Storage 基礎後,建議繼續學習 GCP 資料儲存策略(ACE-201),了解 Cloud SQL 等其他儲存選項。

下一課 ACE-208:Cloud Build CI/CD 實戰,學習從程式碼到生產環境的全自動化部署。

GCP 核心服務 — 2/10 完成 查看系列全覽 →

留言討論

徽章解鎖!