身為雲端架構師,您一定知道儲存空間是組織最重要的資源之一。組織內每天都會產生、修改和存取數千個檔案和文件。因此,您必須擬定有效的災難復原計畫,確實儲存備份並建立備援架構,包括下列項目:
- 兼具安全性、擴充性和高可用性的物件層級儲存空間
- 精細的存取控管機制
- 版本管理功能
- 生命週期管理功能
- 直接同步處理 on-prem 和雲端目錄的機制
您必須具備儲存體帳戶,才能建立容器。如要建立容器,請前往儲存體帳戶頁面,在「資料儲存體」部分選取所需容器,然後為該容器設定必要的存取層級。如要建立儲存體帳戶,請選取所需的儲存體類型 (blob、資料表、磁碟、檔案和佇列) 和容器級別 (經常性、非經常性或封存)。此外,您也能在儲存體帳戶層級設定存取原則,輕鬆指定容器的權限。接著,您需要建立並設定生命週期管理政策,在指定天數後刪除儲存的資料。您將啟用版本管理功能,然後將 VM 目錄同步處理至 Azure 儲存體中的儲存體容器。若想提高 Azure 的安全性,可以使用 Azure Key Vault,以客戶自行管理的金鑰來加密資料。
最後,您必須在 Azure 建立新的資源群組,並將當中的一個角色指派給某個專案的使用者或群組。完成後,該使用者或群組就能存取新資源群組中的資源。
接下來,您將探索各種 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
,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=<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 控制台檢視檔案
- 前往 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 on 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
查看結果
- 前往 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:存取控管清單
生命週期管理
版本管理
目錄同步處理
Azure 和 Google Cloud 提供可擴充的安全儲存空間解決方案,適合存放非結構化資料。這兩種儲存空間解決方案的功能十分類似,但加密、驗證和安全機制的運作方式略有不同。現在就來看看這兩項服務的異同處:
相似處:
- 都提供多種級別的儲存空間,方便客戶根據需求選擇,以實現最佳的成本效益和執行效能。
- 都支援多種儲存空間級別,可滿足不同存取模式的需求,包括經常性存取、非經常性存取或封存模式。
- 都具備版本管理和生命週期管理功能。
差異處:
Google Cloud Storage 儲存空間級別 |
Azure 儲存體級別 |
Standard Storage |
經常性 |
Nearline Storage |
非經常性 |
Coldline Storage |
|
Archive Storage |
封存 |
- 對於可儲存的物件大小上限,Google Cloud Storage 和 Azure 儲存體服務設有不同限制,這可能會影響您儲存至個別服務的資料類型和大小。目前,Cloud Storage 的每個專案可儲存 5,000 個 bucket,而 Azure 儲存體服務中的每個儲存體帳戶可儲存 500 個容器。使用 Azure Blob 儲存體時,您可以為儲存體帳戶建立一或多個容器,並調整容器的政策和中繼資料存取權設定。如果是使用 Cloud Storage,您需要設定 bucket 才能加入儲存空間級別、位置、存取控管和記錄選項。
- 使用 Azure 服務時,您也能透過 Azure 儲存體總管來執行 UI 中的儲存體選項。另一方面,Google Cloud 沒有專屬介面,只能使用 Google Cloud 控制台完成設定。
- Google Cloud Storage 的 bucket 名稱在整個 Google Cloud Storage 不得重複。至於 Azure 服務,各儲存體帳戶中的容器都應有專屬名稱。
關閉研究室
如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。