總覽
Cloud Storage 是 Google Cloud 提供的基本資源,內含多種進階功能。在本實驗室中,您將練習運用許多能輔助設計的實用 Cloud Storage 功能。您可以透過下列幾種方式與 Cloud Storage 互動:Google Cloud 控制台、指令列工具 gsutil,或是適用於各種程式設計語言的 Cloud Storage 用戶端程式庫。
目標
在本實驗室中,您將瞭解如何執行下列工作:
- 建立及使用 Cloud Storage bucket
- 設定存取控管清單 (ACL) 來限制存取權
- 使用自己的加密金鑰
- 導入版本管理機制
- 使用目錄同步功能
設定和需求
每個實驗室都會提供新的 Google Cloud 專案和一組資源,讓您在時限內免費使用。
-
按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」。
工作 1:準備實驗室環境
在這項工作中,您要先建立 Cloud Storage bucket,然後下載範例檔案,供下一項工作使用。
建立 Cloud Storage bucket
- 前往 Google Cloud 控制台,依序點選「導覽選單」圖示
>「Cloud Storage」>「Bucket」。
注意:bucket 必須設定全域不重複的名稱。您可以在名稱中使用 PROJECT_ID_1 的一部分,確保名稱不會重複。舉例來說,如果 PROJECT_ID_1 是 myproj-154920,bucket 名稱可以設為 storecore154920
- 點選「建立」。
- 指定下列屬性,每個欄位設定完後點選「繼續」,其餘設定則保留預設值。
| 屬性 |
值 (輸入或選取) |
| 名稱 |
輸入全域不重複的名稱 |
| 位置類型 |
區域 |
| 區域 |
|
| 存取控管 |
精細 (除了 bucket 層級權限,也會控管物件層級權限) |
- 點選「建立」。
- 如果看到「系統會禁止公開存取」的提示訊息,請取消勾選「
強制禁止公開存取這個 bucket」,然後點選「確認」。
- 請記下 bucket 名稱,實驗室的後續步驟會用到這個名稱,屆時將稱為 [BUCKET_NAME_1]。
點選「Check my progress」,確認目標已達成。
建立 Cloud Storage bucket
使用 CURL 下載範例檔案並複製兩份
- 在 Cloud 控制台,點選「啟用 Cloud Shell」圖示
。
- 如果出現提示訊息,請依序點選「繼續」>「授權」。
- 將 [BUCKET_NAME_1] 保存在環境變數中:
export BUCKET_NAME_1=在這裡輸入bucket 名稱 1
- 使用 echo 進行驗證:
echo $BUCKET_NAME_1
- 執行下列指令,下載範例檔案 (這個範例檔案是公開的 Hadoop 說明文件 HTML 檔案):
curl \
https://hadoop.apache.org/docs/current/\
hadoop-project-dist/hadoop-common/\
ClusterSetup.html > setup.html
- 執行下列指令來複製檔案:
cp setup.html setup2.html
cp setup.html setup3.html
工作 2:存取控管清單 (ACL)
在這項工作中,您將設定 ACL 來限制誰能存取複製到 Cloud Storage bucket 的檔案。
將檔案複製到 bucket 並設定 ACL
- 執行下列指令,將第一個檔案複製到 bucket:
gcloud storage cp setup.html gs://$BUCKET_NAME_1/
- 執行下列指令,取得指派給 setup.html 的預設存取清單:
gcloud storage objects get-iam-policy gs://$BUCKET_NAME_1/setup.html > acl.txt
cat acl.txt
- 執行下列指令,將存取清單設為私人並確認結果:
gcloud storage objects update gs://$BUCKET_NAME_1/setup.html --predefined-acl=private
gcloud storage objects get-iam-policy gs://$BUCKET_NAME_1/setup.html > acl2.txt
cat acl2.txt
- 執行下列指令來更新存取清單,將檔案設為可公開讀取:
gcloud storage objects add-iam-policy-binding gs://$BUCKET_NAME_1/setup.html \
--member="allUsers" \
--role="roles/storage.legacyObjectReader"
gcloud storage objects get-iam-policy gs://$BUCKET_NAME_1/setup.html > acl3.txt
cat acl3.txt
點選「Check my progress」,確認目標已達成。
將檔案設定為可公開讀取
在 Cloud 控制台檢視檔案
- 前往 Google Cloud 控制台,依序點選「導覽選單」圖示
>「Cloud Storage」>「Bucket」。
- 點選「[BUCKET_NAME_1]」。
- 確認
setup.html 檔案的「公開存取權」有可用的「公開連結」。
注意:如果無法查看公開連結,請重新整理頁面。
刪除本機檔案並從 Cloud Storage 複製還原
- 返回「Cloud Shell」。如有需要,請點選「啟用 Cloud Shell」圖示
。
- 執行下列指令,刪除設定檔案:
rm setup.html
- 執行下列指令,確認檔案已刪除:
ls
- 執行下列指令,從 bucket 再次複製檔案:
gcloud storage cp gs://$BUCKET_NAME_1/setup.html setup.html
工作 3:客戶提供的加密金鑰 (CSEK)
在這項工作中,您要產生一組 CSEK 金鑰,將儲存在 Cloud Storage bucket 的檔案加密。
產生 CSEK 金鑰
在接下來的步驟,您需要使用 AES-256 base-64 金鑰。
- 執行下列指令來建立金鑰:
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
結果 (輸出內容範例):
b'tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=\n'
- 從指令輸出內容複製產生的金鑰值,不要複製
b'和 \n'。金鑰格式應該是 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=。
修改 boto 檔案
加密控制選項包含在名為 .boto 的 gsutil 設定檔中。
- 執行下列指令,檢視並開啟 boto 檔案:
ls -al
nano .boto
注意:如果 .boto 檔案是空的,請按下 Ctrl+X 鍵關閉 nano 編輯器,然後使用 gsutil config -n 指令產生新的 .boto 檔案。接著,請使用上述指令,再次嘗試開啟檔案。
如果 .boto 檔案依然是空的,您可能需要使用 gsutil version -l 指令找出檔案。
- 找到「
#encryption_key=」這行程式碼。
注意:nano 編輯器底部提供快速指令,方便您迅速找到檔案。使用 Where Is 快速指令,即可迅速找到 #encryption_key= 行。
- 移除 # 字元,將該行程式碼取消註解,然後把先前產生的金鑰貼到末端。
範例:
變更前:
# encryption_key=
變更後:
encryption_key=tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
- 依序按下 Ctrl+O 和 Enter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano 編輯器。
上傳其餘設定檔案 (已加密) 並在 Cloud 控制台確認
-
返回 Cloud 控制台。
-
執行下列指令,上傳其餘 setup.html 檔案:
gsutil kms encryption -d gs://$BUCKET_NAME_1
gcloud storage cp setup2.html gs://$BUCKET_NAME_1/
gcloud storage cp setup3.html gs://$BUCKET_NAME_1/
- 點選「[BUCKET_NAME_1]」。您會看到
setup2.html 和 setup3.html 檔案都已由客戶加密。
點選「Check my progress」,確認目標已達成。
客戶提供的加密金鑰 (CSEK)
刪除本機檔案、複製新檔案,並驗證加密檔案
- 在 Cloud Shell 執行下列指令,刪除本機檔案:
rm setup*
- 執行下列指令,從 bucket 再次複製檔案:
gcloud storage cp gs://$BUCKET_NAME_1/setup* ./
- 執行下列指令來串連加密檔案,查看是否已複製成功:
cat setup.html
cat setup2.html
cat setup3.html
工作 4:輪換 CSEK 金鑰
在這項工作中,您將輪換用來加密 Cloud Storage 資料的 CSEK,持續確保資料安全。
將目前的 CSEK 加密金鑰變更為解密金鑰
- 執行下列指令,開啟
.boto 檔案:
nano .boto
- 在目前的
encryption\_key 行開頭加上 # 字元,將該行註解排除。
注意:nano 編輯器底部提供快速指令,方便您迅速找到檔案。使用 Where Is 快速指令,即可迅速找到 encryption_key= 行。
- 移除 # 字元來取消註解
decryption\_key1,然後將 encryption\_key 行目前的金鑰複製到 encryption\_key1 行。
結果 (輸出內容範例):
變更前:
encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
# decryption_key1=
變更後:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
- 依序按下 Ctrl+O 和 Enter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano 編輯器。
注意:實務中,您應刪除 encryption_key 行的舊 CSEK 金鑰。
產生另一個 CSEK 金鑰並新增到 boto 檔案
- 執行下列指令來產生新的金鑰:
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
- 從指令輸出內容複製產生的金鑰值,不要複製
b'和 \n'。金鑰格式應該是 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=。
- 執行下列指令,開啟 boto 檔案:
nano .boto
- 取消註解加密金鑰,並將新的金鑰值貼入
encryption_key=。
結果 (輸出內容範例):
變更前:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
變更後:
encryption_key=HbFK4I8CaStcvKKIx6aNpdTse0kTsfZNUjFpM+YUEjY=
- 依序按下 Ctrl+O 和 Enter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano 編輯器。
重寫檔案 1 的金鑰,再將舊的解密金鑰設為註解來排除
如果檔案已加密,重寫檔案就是指使用先前設定的 decryption_key1 來解密,再使用新的 encryption_key 為檔案加密。
您將重寫 setup2.html 的金鑰,但 setup3.html 的金鑰維持不變,這樣就能觀察未適當輪換金鑰會發生什麼情況。
- 執行下列指令:
gcloud storage objects update gs://$BUCKET_NAME_1/setup2.html
- 執行下列指令,開啟 boto 檔案:
nano .boto
- 在目前的
decryption\_key1 行加回 # 字元,將該行設為註解來排除。
結果 (輸出內容範例):
變更前:
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
變更後:
# decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
- 依序按下 Ctrl+O 和 Enter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano 編輯器。
注意:實務中,您應刪除 decryption_key1 行的舊 CSEK 金鑰。
下載 setup2 和 setup3
- 執行下列指令,下載 setup2.html 檔案:
gcloud storage cp gs://$BUCKET_NAME_1/setup2.html recover2.html
- 執行下列指令,下載 setup3.html 檔案:
gcloud storage cp gs://$BUCKET_NAME_1/setup3.html recover3.html
注意:發生這樣的情況,是因為沒有使用新金鑰重寫 setup3.html,因此無法再將 setup3.html 解密,複製作業也會失敗。 您已成功輪換 CSEK 金鑰。
工作 5:啟用生命週期管理功能
在這項工作中,您將啟用 Cloud Storage bucket 的生命週期管理功能,在指定時間過後自動刪除物件。
查看 bucket 目前的生命週期政策
gcloud storage buckets describe gs://$BUCKET_NAME_1 --format="json(lifecycle)"
注意:目前沒有生命週期政策,您將在後續步驟建立。建立 JSON 生命週期政策檔案
- 執行下列指令來建立檔案,並命名為 life.json:
nano life.json
注意:您也可以使用 Cloud Shell 編輯器建立這個檔案。
- 將下列值貼入 life.json 檔案:
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
注意:這些指令要求 Cloud Storage 在 31 天後刪除物件。
- 依序按下 Ctrl+O 和 Enter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano 編輯器。
設定並驗證政策
- 執行下列指令來設定政策:
gcloud storage buckets update gs://$BUCKET_NAME_1 --lifecycle-file=life.json
- 執行下列指令來驗證政策:
gcloud storage buckets describe gs://$BUCKET_NAME_1 --format="json(lifecycle_config)"
點選「Check my progress」,確認目標已達成。
啟用生命週期管理功能
工作 6:啟用版本管理功能
在這項工作中,您將為 Cloud Storage bucket 啟用版本管理功能,以免意外刪除或修改資料。
查看 bucket 的版本管理狀態並啟用版本管理功能
- 執行下列指令,查看 bucket 目前的版本管理狀態:
gcloud storage buckets describe gs://$BUCKET_NAME_1 --format="json(versioning)"
注意:如果政策已暫停,代表該政策未啟用。
- 執行下列指令,啟用版本管理功能:
gcloud storage buckets update gs://$BUCKET_NAME_1 --versioning
- 執行下列指令,確認版本管理功能已啟用:
gcloud storage buckets describe gs://$BUCKET_NAME_1 --format="json(versioning_enabled)"
點選「Check my progress」,確認目標已達成。
啟用版本管理功能
在 bucket 建立多個版本的範例檔案
- 檢查範例檔案的大小:
ls -al setup.html
- 開啟 setup.html 檔案:
nano setup.html
- 在 setup.html 檔案中刪除任意 5 行程式碼,變更檔案大小。
- 依序按下 Ctrl+O 和 Enter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano 編輯器。
- 使用 -v 版本管理選項,將檔案複製到 bucket:
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
- 開啟 setup.html 檔案:
nano setup.html
- 再次從 setup.html 檔案中刪除 5 行程式碼,變更檔案大小。
- 依序按下 Ctrl+O 和 Enter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano 編輯器。
- 使用 -v 版本管理選項,將檔案複製到 bucket:
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
列出所有檔案版本
- 執行下列指令,列出檔案的所有版本:
gcloud storage ls -a gs://$BUCKET_NAME_1/setup.html
- 反白選取並複製最舊版本 (即第一列) 的檔案名稱,後續步驟會將這個版本稱為 [VERSION_NAME]。
注意:請務必複製檔案的完整路徑,開頭為 gs://
- 將版本值保存在環境變數 [VERSION_NAME] 中。
export VERSION_NAME=在這裡輸入版本名稱
- 使用 echo 進行驗證:
echo $VERSION_NAME
結果 (輸出內容範例):
gs://BUCKET_NAME_1/setup.html#1584457872853517
下載最舊的原始檔案版本並驗證復原作業
- 下載檔案的原始版本:
gcloud storage cp $VERSION_NAME recovered.txt
- 執行下列指令,驗證復原作業:
ls -al setup.html
ls -al recovered.txt
注意:透過備份版本將原始檔案復原後,您會發現原始版本的檔案大小比目前版本更大,這是因為您先前刪除了幾行程式碼。
工作 7:將目錄同步到 bucket
在這項工作中,您要使用 gsutil rsync 指令,將本機目錄及其子目錄同步到 Cloud Storage bucket。
建立巢狀結構目錄並同步到 bucket
請建立巢狀結構的目錄,方便觀察將目錄反覆複製到 bucket 的情況。
- 執行下列指令:
mkdir firstlevel
mkdir ./firstlevel/secondlevel
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
- 執行下列指令,在 VM 和 bucket 中同步 firstlevel 目錄:
gcloud storage rsync ./firstlevel gs://$BUCKET_NAME_1/firstlevel --recursive
查看結果
- 前往 Google Cloud 控制台,依序點選「導覽選單」圖示
>「Cloud Storage」>「Bucket」。
- 點選「[BUCKET_NAME_1]」,找到 bucket 中的子資料夾。
- 依序點選「/firstlevel」>「/secondlevel」。
- 比較 Cloud 控制台顯示的內容和下列指令的結果:
gcloud storage ls -r gs://$BUCKET_NAME_1/firstlevel
- 退出 Cloud Shell:
exit
工作 8:回顧
在本實驗室中,您學到如何建立和使用 bucket 與物件,並認識了下列 Cloud Storage 功能:
- CSEK:客戶提供的加密金鑰
- 使用自己的加密金鑰
- 輪換金鑰
- ACL:存取控管清單
- 將 ACL 設為私人並改為公開
- 生命週期管理
- 設定政策以在 31 天後刪除物件
- 版本管理
- 建立版本及還原先前版本
- 目錄同步處理
- 反覆將 VM 目錄同步到 bucket
關閉研究室
如果您已完成實驗室,請點選「End Lab」。Google Skills 會清除您使用的資源和帳戶。
您可以為實驗室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」分頁提交。
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。