總覽
Cloud Storage 是 Google Cloud 中的基本資源,也提供許多進階功能。在本研究室中,您將運用許多在設計方面相當實用的 Cloud Storage 功能,並使用控制台和 gsutil 工具來探索 Cloud Storage。
目標
在本研究室中,您將瞭解如何執行下列工作:
建立和使用值區
設定存取控制清單 (ACL) 來限制存取
使用自己的加密金鑰
實作版本管控
使用目錄同步處理
使用身分與存取權管理來跨專案共用值區
設定 Qwiklabs
在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。
請透過無痕式視窗 登入 Qwiklabs。
請記下研究室的存取時間 (例如 1:15:00
),並確保自己能在時間限制內完成作業。
研究室不提供暫停功能。如有需要,您可以重新開始,但原先的進度恕無法保留。
準備就緒後,請按一下「Start lab」 。
請記下研究室憑證 (使用者名稱 和密碼 ),這組資訊將用於登入 Google Cloud 控制台。
按一下「Open Google Console」 。
按一下「Use another account」 ,然後複製這個 研究室的憑證,並貼入提示訊息。
如果使用其他憑證,系統會顯示錯誤或向您收取費用 。
接受條款,然後略過資源復原頁面。
工作 1:準備作業
建立 Cloud Storage 值區
在「導覽選單」 中,依序點選「Cloud Storage」 >「瀏覽器」 。
注意: 值區必須設定全域不重複的名稱。您可以將部分 PROJECT_ID_1
納入值區名稱中,確保名稱不會重複。舉例來說,如果 PROJECT_ID_1
是 myproj-154920
,值區名稱可以設定為 storecore154920
按一下「建立值區」 。
指定下列屬性,並保持其餘設定的預設狀態:
屬性
值 (依指示輸入屬性值或選取選項)
名稱
輸入全域不重複的名稱
位置類型
多區域
強制禁止公開存取這個值區
未勾選
存取權控管
精細 (除了值區層級權限,也會控管物件層級權限 )
請記下值區名稱。這個名稱會在後續步驟中用到,以下稱 [BUCKET_NAME_1]。
按一下「建立」 。
點選「Check my progress」 (檢查我的進度) 來確認目標已達成。
建立 Cloud Storage 值區
使用 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)
請執行下列指令,將第一份檔案複製到值區:
gsutil 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_NAME_1]。
針對 setup.html 檔案,確認「公開存取權」 具有可使用的「公開連結」 。
刪除本機檔案並從 Cloud Storage 複製還原
返回「Cloud Shell」 。如有需要,請按一下「啟用 Cloud Shell」 圖示 。
執行下列指令來刪除設定檔案:
rm setup.html
如要確認檔案已刪除,請執行下列指令:
ls
如要從值區再次複製檔案,請執行下列指令:
gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html
工作 3:客戶提供的加密金鑰 (CSEK)
產生 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*
如要從值區再次複製檔案,請執行下列指令:
gsutil cp gs://$BUCKET_NAME_1/setup* ./
如要串連加密檔案來查看是否已複製成功,請執行下列指令:
cat setup.html
cat setup2.html
cat setup3.html
工作 4:輪替 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。
產生另一個 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。
下載 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:啟用生命週期管理
查看值區目前的生命週期政策
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:啟用版本管理
查看值區的版本管理狀態和啟用版本管理
請執行下列指令,查看值區目前的版本管理狀態:
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」 (檢查我的進度) 來確認目標已達成。
啟用版本管理
在值區建立多個版本的範例檔案
檢查範例檔案的大小:
ls -al setup.html
開啟 setup.html 檔案:
nano setup.html
在 setup.html 檔案中刪除任意 5 行程式碼,來變更檔案大小。
依序按下 Ctrl+O 和 Enter 鍵 儲存檔案,然後按下 Ctrl+X 退出 nano。
使用 -v 版本管理選項將檔案複製到值區:
gsutil cp -v setup.html gs://$BUCKET_NAME_1
開啟 setup.html 檔案:
nano setup.html
再從 setup.html 檔案中刪除其他 5 行程式碼,來變更檔案大小。
依序按下 Ctrl+O 和 Enter 鍵 儲存檔案,然後按下 Ctrl+X 退出 nano。
使用 -v 版本管理選項將檔案複製到值區:
gsutil cp -v setup.html gs://$BUCKET_NAME_1
列出所有檔案版本
如要列出檔案的所有版本,請執行下列指令:
gsutil 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
下載檔案最舊的原始版本並驗證復原作業
下載檔案的原始版本:
gsutil cp $VERSION_NAME recovered.txt
如要驗證復原作業,請執行下列指令:
ls -al setup.html
ls -al recovered.txt
注意: 您已透過備份版本將原始檔案復原。您會發現原始版本的檔案大小比目前版本更大,因為您先前刪除了幾行程式碼。
工作 7:將目錄同步處理到值區
建立巢狀目錄並同步到值區
請建立巢狀結構的目錄,以便在對值區執行遞迴性複製作業時,查看會發生的情況。
執行下列指令:
mkdir firstlevel
mkdir ./firstlevel/secondlevel
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
如要在 VM 和值區上同步處理 firstlevel 目錄,請執行下列指令:
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
查看結果
在 Cloud 控制台的「導覽選單」 上,依序點選「Cloud Storage」 >「瀏覽器」 。
按一下 [BUCKET_NAME_1]。注意值區中的子資料夾。
依序點按 /firstlevel 和 /secondlevel 。
比較您在 Cloud 控制台看到的內容和下列指令的結果:
gsutil ls -r gs://$BUCKET_NAME_1/firstlevel
退出 Cloud Shell:
exit
工作 8:跨專案共用
切換到第二個專案
開啟新的無痕分頁。
前往 console.cloud.google.com 來開啟 Cloud 控制台。
按一下標題列的專案選取器下拉式清單。
按一下「全部」 ,接著點按 Qwiklabs「連線詳細資料」對話方塊中提供的第二個專案。記住,所有 Google Cloud 專案的專案 ID 都是不重複的名稱。以下稱第二專案 ID 為 [PROJECT_ID_2]。
值區準備作業
在 Cloud 控制台的「導覽選單」 上,依序點選「Cloud Storage」 >「瀏覽器」 。
按一下「建立值區」 。
指定下列屬性,並保持其餘設定的預設狀態:
屬性
值 (依指示輸入屬性值或選取選項)
名稱
輸入全域不重複的名稱
位置類型
多區域
存取權控管
精細 (除了值區層級權限,也會控管物件層級權限 )
請記下值區名稱,這個名稱會在後續步驟中稱為 [BUCKET_NAME_2]。
按一下「建立」 。
將文字檔案上傳到值區
上傳檔案到 [BUCKET_NAME_2],任何小的範例檔案或文字檔案都可以。
請記下檔案名稱 (以下稱 [FILE_NAME]),稍後會用到。
建立身分與存取權管理服務帳戶
在 Cloud 控制台的「導覽選單」 上,依序點選「IAM 與管理」 >「服務帳戶」 。
按一下「建立服務帳戶」 。
在「服務帳戶詳細資料」頁面上,將「服務帳戶名稱」 設為 cross-project-storage 。
按一下「建立並繼續」 。
在「服務帳戶權限」頁面的角色選單中,依序選取「Cloud Storage」>「Storage 物件檢視者」 。
依序點按「繼續」 和「完成」 。
按一下 cross-project-storage 服務帳戶來新增 JSON 金鑰。
在「金鑰」分頁 ,按一下「新增金鑰」 下拉式選單,然後選取「建立新的金鑰」 。
選取「JSON」 做為金鑰類型,然後按一下「建立」 。系統會下載 JSON 金鑰檔案。在後續步驟中,您需要找出這個金鑰檔案並上傳到 VM。
按一下「關閉」 。
在硬碟上,將 JSON 金鑰檔案重新命名為 credentials.json 。
在上方窗格中,切換回 [PROJECT_ID_1]。
點選「Check my progress」 (檢查我的進度) 來確認目標已達成。
在第二個專案中建立資源
建立 VM
在「導覽選單」 上,依序點選「Compute Engine」 >「VM 執行個體」 。
按一下「建立執行個體」 。
指定下列屬性,並保持其餘設定的預設狀態:
屬性
值 (依指示輸入屬性值或選取選項)
名稱
crossproject
區域
europe-west1
可用區
europe-west1-d
系列
N1
機器類型
n1-standard-1
開機磁碟
Debian GNU/Linux 11 (bullseye)
按一下「建立」 。
VM 的 SSH
針對 crossproject 按一下「SSH」 ,來啟動終端機並進行連線。
將 [BUCKET_NAME_2] 保存在環境變數中:
export BUCKET_NAME_2=<enter bucket name 2 here>
使用 echo 進行驗證:
echo $BUCKET_NAME_2
將 [FILE_NAME] 保存在環境變數中:
export FILE_NAME=<enter FILE_NAME here>
使用 echo 進行驗證:
echo $FILE_NAME
列出 [PROJECT_ID_2] 中的檔案:
gsutil ls gs://$BUCKET_NAME_2/
結果 (這是輸出內容範例) :
AccessDeniedException: 403 404513585876-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket.
授權 VM
如要透過 SSH VM 終端機上傳 credentials.json 檔案,請按一下右上角的向上箭頭圖示 ,然後點按「上傳檔案」 。
選取並上傳 credentials.json。
按一下「檔案傳輸」視窗中的「關閉」 。
確認 JSON 檔案已上傳到 VM:
ls
結果 (這是輸出內容範例) :
credentials.json
在終端機中輸入下列指令,授權 VM 使用 Google Cloud API:
gcloud auth activate-service-account --key-file credentials.json
驗證存取權
重試這項指令:
gsutil ls gs://$BUCKET_NAME_2/
重試這項指令:
gsutil cat gs://$BUCKET_NAME_2/$FILE_NAME
試著將憑證檔案複製到值區:
gsutil cp credentials.json gs://$BUCKET_NAME_2/
結果 (這是輸出內容範例) :
Copying file://credentials.json [Content-Type=application/json]...
AccessDeniedException: 403 cross-project-storage@qwiklabs-gcp-02-c638e3daa975.iam.gserviceaccount.com does not have storage.objects.create access to the Google Cloud Storage object.
修改角色
在上方窗格中,切換回 [PROJECT_ID_2]。
在 Cloud 控制台的「導覽選單」 上,依序點選「IAM 與管理」 >「身分與存取權管理」 。
按一下 cross-project-storage 服務帳戶的「鉛筆」圖示 (可能需要向右滑動才能看到圖示)。
按一下「Storage 物件檢視者」 角色,然後依序點按「Cloud Storage」 >「Storage 物件管理員」 。
按一下「儲存」 。
若未點按「儲存」 ,則無法完成變更。
點選「Check my progress」 (檢查我的進度) 來確認目標已達成。
在第一個專案建立和驗證資源
確認存取權已變更
返回 crossproject 的 SSH 終端機。
將憑證檔案複製到值區:
gsutil cp credentials.json gs://$BUCKET_NAME_2/
結果 (這是輸出內容範例) :
Copying file://credentials.json [Content-Type=application/json]...
- [1 files][ 2.3 KiB/ 2.3 KiB]
Operation completed over 1 objects/2.3 KiB.
注意: 在本範例中,PROJECT_ID_1
中的 VM 現在可以將檔案上傳到其他專案值區的 Cloud Storage。
記住,值區所屬的專案是本活動中用來計費的專案。也就是說,如果 VM 上傳大量檔案,需支付費用的專案並不是 PROJECT_ID_1
,而是 PROJECT_ID_2
。
工作 9:回顧
在本研究室中,您學到如何建立和使用值區與物件,並瞭解下列 Cloud Storage 功能:
CSEK:客戶提供的加密金鑰
使用自己的加密金鑰
輪替金鑰
ACL:存取控制清單
將 ACL 設定為私人和修改為公開
生命週期管理
設定在 31 天後刪除物件的政策
版本管理
建立版本和還原先前的版本
目錄同步處理
遞迴性同步處理 VM 目錄和值區
使用身分與存取權管理進行跨專案資源共享
使用身分與存取權管理啟用跨專案的資源存取權
關閉研究室
如果您已完成研究室,請按一下「End Lab」(關閉研究室) 。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交) 。
星級評等代表您的滿意程度:
1 星 = 非常不滿意
2 星 = 不滿意
3 星 = 普通
4 星 = 滿意
5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。