總覽
Cloud Storage 是 Google Cloud 中的基本資源,也提供許多進階功能。在本實驗室,您將運用許多在設計方面相當實用的 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,值區名稱可以設定為 storecore154920
- 點選「建立」。
- 指定下列屬性,其餘設定保持預設狀態:
| 屬性 |
值 (依指示輸入值或選取選項) |
| 名稱 |
輸入全域不重複的名稱 |
| 位置類型 |
區域 |
| 區域 |
|
| 強制禁止公開存取這個值區 |
取消勾選 |
| 存取控管 |
精細 (除了 bucket 層級權限,也會控管物件層級權限) |
- 請記下 bucket 名稱,實驗室的後續步驟會用到這個名稱,以下稱 [BUCKET_NAME_1]。
- 點選「建立」。
點選「Check my progress」,確認目標已達成。
建立 Cloud Storage bucket
使用 CURL 下載範例檔案並複製兩份
- 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示
。
- 如果出現提示訊息,請點選「繼續」。
- 將 [BUCKET_NAME_1] 保存在環境變數中:
export BUCKET_NAME_1=<enter bucket name 1 here>
- 使用 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 的預設存取清單,請執行下列指令:
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt
cat acl.txt
- 如要將存取清單設為私人並確認結果,請執行下列指令:
gsutil acl set private gs://$BUCKET_NAME_1/setup.html
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl2.txt
cat acl2.txt
- 如要更新存取清單,將檔案設為可公開讀取,請執行下列指令:
gsutil acl ch -u AllUsers:R gs://$BUCKET_NAME_1/setup.html
gsutil acl get 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 檔案
加密控制項包含在 gsutil 設定檔中,檔案格式為 .boto。
- 如要檢視並開啟 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 控制台驗證
- 如要上傳其餘 setup.html 檔案,請執行下列指令:
gsutil cp setup2.html gs://$BUCKET_NAME_1/
gsutil cp setup3.html gs://$BUCKET_NAME_1/
- 返回 Cloud 控制台。
- 按一下 [BUCKET_NAME_1]。setup2.html 和 setup3.html 檔案都會顯示已由客戶加密。
點選「Check my progress」,確認目標已達成。
客戶提供的加密金鑰 (CSEK)
刪除本機檔案、複製新檔案和驗證加密作業
- 如要刪除本機檔案,請在 Cloud Shell 執行下列指令:
rm setup*
- 如要從 bucket 再次複製檔案,請執行下列指令:
gsutil 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 行目前的金鑰複製到 decryption_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 的金鑰,因此可以看看未適當輪替金鑰時會發生的情況。
- 執行下列指令:
gsutil rewrite -k 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 檔案,請執行下列指令:
gsutil cp gs://$BUCKET_NAME_1/setup2.html recover2.html
- 如要下載 setup3.html 檔案,請執行下列指令:
gsutil cp gs://$BUCKET_NAME_1/setup3.html recover3.html
注意:會發生這樣的情況,是因為沒有使用新金鑰重寫 setup3.html,導致系統無法再將 setup3.html 解密,複製作業也會失敗。 您已成功輪替 CSEK 金鑰。
工作 5:啟用生命週期管理
在這項工作,您會啟用 Cloud Storage bucket 的生命週期管理,以便在一定的時間後自動刪除物件。
查看 bucket 目前的生命週期政策
gsutil lifecycle get gs://$BUCKET_NAME_1
注意:系統未找到生命週期設定,您需要在後續步驟中建立生命週期。
建立 JSON 生命週期政策檔案
- 如要建立檔案並命名為 life.json,請執行下列指令:
nano life.json
- 將下列值貼到 life.json 檔案:
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
注意:這些指示會指定 Cloud Storage 在 31 天後刪除物件。
- 依序按下 Ctrl+O 和 Enter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano 編輯器。
設定和驗證政策
- 如要設定政策,請執行下列指令:
gsutil lifecycle set life.json gs://$BUCKET_NAME_1
- 如要驗證政策,請執行下列指令:
gsutil lifecycle get gs://$BUCKET_NAME_1
點選「Check my progress」,確認目標已達成。
啟用生命週期管理
工作 6:啟用版本管理
在這項工作,您會為 Cloud Storage bucket 啟用版本管理,以免意外刪除或修改資料。
查看 bucket 的版本管理狀態並啟用版本管理
- 執行下列指令,查看 bucket 目前的版本管理狀態:
gsutil versioning get gs://$BUCKET_NAME_1
注意:若政策已遭停權,表示該政策並未啟用。
- 如要啟用版本管理,請執行下列指令:
gsutil versioning set on gs://$BUCKET_NAME_1
- 如要驗證版本管理是否已啟用,請執行下列指令:
gsutil versioning get gs://$BUCKET_NAME_1
點選「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=<Enter VERSION name here>
- 使用 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
在這項工作,您會透過 Cloud Storage bucket,使用 gsutil rsync 指令,同步處理本機目錄及其子目錄。
建立巢狀結構的目錄並同步處理到 bucket
請建立巢狀結構的目錄,這樣反覆將目錄複製到 bucket 時,才能掌握作業情況。
- 執行下列指令:
mkdir firstlevel
mkdir ./firstlevel/secondlevel
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
- 如要在 VM 和 bucket 上同步處理 firstlevel 目錄,請執行下列指令:
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
查看結果
- 前往 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 Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。