身為雲端架構師,您一定知道對任何組織而言,儲存空間都是最重要的資源之一。員工、同事處理日常工作時,會產生、修改和存取數千個檔案和文件。因此,您必須擬定出色的災難復原計畫,確實儲存備份並建立備援架構,包括下列項目:
- 兼具安全性、擴充性和高可用性的物件層級儲存空間
- 精細的存取控管機制
- 版本管理
- 生命週期管理功能
- on-prem 和雲端目錄之間的直接同步處理程序
在 Amazon Web Services (AWS),您的物件儲存空間解決方案是 Simple Storage Service (S3)。
如要進行精細的存取控管,您需搭配使用儲存貯體政策、Identity and Access Management (IAM) 政策和存取控制清單 (ACL),管理可以存取整個儲存貯體和個別物件的人員。您也能使用 AWS 代管或用戶端管理的加密金鑰,加密 S3 儲存貯體內的物件,獲得額外保護。
設定版本管制可避免重要檔案遭意外刪除或覆寫。您可以設定生命週期政策,根據存取模式自動調整物件的儲存類別,以便提高成本效益。如要同步處理目錄,您可以對位置進行雙向同步,確保來源的變更會反映到目的地,這樣就能複製資料。

接下來,您將探索各種 Cloud Storage 功能,瞭解如何使用 Cloud 控制台和 gsutil 工具,將資料安全存放在 Google Cloud。
總覽
Cloud Storage 是 Google Cloud 中的基本資源,也提供許多進階功能。在本實驗室中,您將運用許多在設計方面相當實用的 Cloud Storage 功能,並使用控制台和 gsutil 工具來探索 Cloud Storage。
目標
在本實驗室中,您將瞭解如何執行下列工作:
- 建立和使用 bucket
- 設定存取控管清單 (ACL) 來限制存取
- 使用自己的加密金鑰
- 導入版本管控
- 使用目錄同步處理
設定 Qwiklabs
每個實驗室都會提供新的 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
摘要
S3 和 Cloud Storage 都提供物件層級的儲存空間,也具備存取控管機制、加密、版本管理和生命週期管理等功能。現在就來看看這兩項服務的異同處:
相似處:
- Cloud Storage 和 S3 都提供存取控管清單 (ACL),可以進行精細的存取控管。
- 兩項服務都提供不同的儲存空間級別,可調整資料存取頻率及備援資料,提高成本效益。
- 兩項服務都有物件生命週期管理功能,可自動調整物件的儲存空間級別。
- 兩項服務都具備版本管理功能,可避免檔案遭意外刪除或覆寫。
- 兩項服務都有目錄同步處理功能,可隨時更新物件,並確保來源位置和目標 bucket 物件相符。
差異處:
- 在 Google Cloud,您可以修改 gsutil 的 .boto 設定檔,寫入客戶提供的加密金鑰來啟用 bucket 加密。在 AWS,則是使用「put-bucket-encryption」指令,並在「--server-side-encryption-configuration」參數指定金鑰,透過 AWS CLI 啟用儲存貯體加密。
- 在 Google Cloud,所有儲存空間級別都由單一個服務管理;而在 AWS,封存儲存類別另外由 S3 Glacier 管理,標準和不常類別則由 S3 管理。
關閉研究室
如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。