arrow_back

Cloud Storage

登录 加入
Get access to 700+ labs and courses

Cloud Storage

实验 1 小时 30 分钟 universal_currency_alt 5 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
Get access to 700+ labs and courses

總覽

Cloud Storage 是 Google Cloud 中的基本資源,也提供許多進階功能。在本研究室中,您將運用許多在設計方面相當實用的 Cloud Storage 功能,並使用控制台和 gsutil 工具來探索 Cloud Storage。

目標

在本研究室中,您將瞭解如何執行下列工作:

  • 建立和使用值區

  • 設定存取控制清單 (ACL) 來限制存取

  • 使用自己的加密金鑰

  • 實作版本管控

  • 使用目錄同步處理

  • 使用身分與存取權管理來跨專案共用值區

設定 Qwiklabs

在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。

  1. 請透過無痕式視窗登入 Qwiklabs。

  2. 請記下研究室的存取時間 (例如 1:15:00),並確保自己能在時間限制內完成作業。
    研究室不提供暫停功能。如有需要,您可以重新開始,但原先的進度恕無法保留。

  3. 準備就緒後,請按一下「Start lab」

  4. 請記下研究室憑證 (使用者名稱密碼),這組資訊將用於登入 Google Cloud 控制台。

  5. 按一下「Open Google Console」

  6. 按一下「Use another account」,然後複製這個研究室的憑證,並貼入提示訊息。
    如果使用其他憑證,系統會顯示錯誤或向您收取費用

  7. 接受條款,然後略過資源復原頁面。

工作 1:準備作業

建立 Cloud Storage 值區

  1. 在「導覽選單」 中,依序點選「Cloud Storage」>「瀏覽器」
注意:值區必須設定全域不重複的名稱。您可以將部分 PROJECT_ID_1 納入值區名稱中,確保名稱不會重複。舉例來說,如果 PROJECT_ID_1myproj-154920,值區名稱可以設定為 storecore154920
  1. 按一下「建立值區」
  2. 指定下列屬性,並保持其餘設定的預設狀態:
屬性 值 (依指示輸入屬性值或選取選項)
名稱 輸入全域不重複的名稱
位置類型 多區域
強制禁止公開存取這個值區 未勾選
存取權控管 精細 (除了值區層級權限,也會控管物件層級權限)
  1. 請記下值區名稱。這個名稱會在後續步驟中用到,以下稱 [BUCKET_NAME_1]。
  2. 按一下「建立」

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 建立 Cloud Storage 值區

使用 CURL 下載範例檔案並複製兩份

  1. 在 Cloud 控制台,按一下「啟用 Cloud Shell」圖示

  2. 如果出現提示訊息,請點選「繼續」

  3. 將 [BUCKET_NAME_1] 保存在環境變數中:

export BUCKET_NAME_1=<enter bucket name 1 here>
  1. 使用 echo 進行驗證:

echo $BUCKET_NAME_1
  1. 執行下列指令來下載範例檔案 (這個範例檔案是公開的 Hadoop 說明文件 HTML 檔案):

curl \ https://hadoop.apache.org/docs/current/\ hadoop-project-dist/hadoop-common/\ ClusterSetup.html > setup.html
  1. 如要複製檔案,請執行下列指令:

cp setup.html setup2.html cp setup.html setup3.html

工作 2:存取控制清單 (ACL)

將檔案複製到值區並設定存取控制清單 (ACL)

  1. 請執行下列指令,將第一份檔案複製到值區:

gsutil cp setup.html gs://$BUCKET_NAME_1/
  1. 如要取得指派給 setup.html 的預設存取清單,請執行下列指令:

gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt cat acl.txt
  1. 如要將存取清單設為私人並確認結果,請執行下列指令:

gsutil acl set private gs://$BUCKET_NAME_1/setup.html gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl2.txt cat acl2.txt
  1. 如要更新存取清單,將檔案設為可公開讀取,請執行下列指令:

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 控制台檢視檔案

  1. 在 Cloud 控制台的「導覽選單」 上,依序點選「Cloud Storage」>「瀏覽器」

  2. 按一下 [BUCKET_NAME_1]。

  3. 針對 setup.html 檔案,確認「公開存取權」具有可使用的「公開連結」

刪除本機檔案並從 Cloud Storage 複製還原

  1. 返回「Cloud Shell」。如有需要,請按一下「啟用 Cloud Shell」圖示

  2. 執行下列指令來刪除設定檔案:

rm setup.html
  1. 如要確認檔案已刪除,請執行下列指令:

ls
  1. 如要從值區再次複製檔案,請執行下列指令:

gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html

工作 3:客戶提供的加密金鑰 (CSEK)

產生 CSEK 金鑰

在接下來的步驟,您需要使用 AES-256 base-64 金鑰。

  1. 執行下列指令來建立金鑰:

python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'

結果 (這是輸出內容範例)

b'tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=\n'
  1. 從指令輸出中複製產生的金鑰值,並排除 b'\n'。金鑰格式應該是 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=

修改 boto 檔案

加密控制項包含在 gsutil 設定檔中,檔案格式為 .boto

  1. 如要檢視並開啟 boto 檔案,請執行下列指令:

ls -al nano .boto
  1. 使用「#encryption_key=」指令找出該行程式碼
注意:nano 編輯器底部提供快速指令,方便您迅速找到檔案內容。使用 Where Is 快速指令,即可迅速找到 #encryption_key= 行程式碼。
  1. 移除 # 字元即可取消註解該行程式碼,然後將先前產生的金鑰貼到末端。

範例 (以下為範例)

變更前: # encryption_key= 變更後: encryption_key=tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
  1. 依序按下 Ctrl+OEnter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano。

上傳其餘設定檔案 (已加密) 並在 Cloud 控制台驗證

  1. 如要上傳其餘 setup.html 檔案,請執行下列指令:

gsutil cp setup2.html gs://$BUCKET_NAME_1/ gsutil cp setup3.html gs://$BUCKET_NAME_1/
  1. 返回 Cloud 控制台。
  2. 按一下 [BUCKET_NAME_1]。setup2.html 和 setup3.html 檔案都會顯示已由客戶加密。

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 客戶提供的加密金鑰 (CSEK)

刪除本機檔案、複製新檔案和驗證加密作業

  1. 如要刪除本機檔案,請在 Cloud Shell 執行下列指令:

rm setup*
  1. 如要從值區再次複製檔案,請執行下列指令:

gsutil cp gs://$BUCKET_NAME_1/setup* ./
  1. 如要串連加密檔案來查看是否已複製成功,請執行下列指令:

cat setup.html cat setup2.html cat setup3.html

工作 4:輪替 CSEK 金鑰

將目前的 CSEK 加密金鑰移至解密金鑰

  1. 執行下列指令來開啟 .boto 檔案:

nano .boto
  1. 在目前的 encryption_key 行開頭新增 # 字元,將該行註解排除。
注意:nano 編輯器底部提供快速指令,方便您迅速找到檔案內容。使用 Where Is 快速指令,即可迅速找到 #encryption_key= 行程式碼。
  1. 移除 # 字元來取消註解 decryption_key1,然後將 encryption_key 行目前的金鑰複製到 decryption_key1 行。

結果 (這是輸出內容範例)

變更前: encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= # decryption_key1= 變更後: # encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
  1. 依序按下 Ctrl+OEnter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano。

產生另一個 CSEK 金鑰並新增到 boto 檔案

  1. 執行下列指令來產生新的金鑰:

python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
  1. 從指令輸出中複製產生的金鑰值,並排除 b'\n'。金鑰格式應該是 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=

  2. 如要開啟 boto 檔案,請執行下列指令:

nano .boto
  1. 取消註解加密金鑰,並將新的金鑰值貼入 encryption_key=

結果 (這是輸出內容範例)

變更前: # encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= 變更後: encryption_key=HbFK4I8CaStcvKKIx6aNpdTse0kTsfZNUjFpM+YUEjY=
  1. 依序按下 Ctrl+OEnter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano。

重寫檔案 1 的金鑰並註解排除舊的解密金鑰

如果檔案已加密,重寫解密檔案就是使用先前設定的 decryption_key1 來將檔案解密,然後使用新的 encryption_key 為檔案加密。

您將重寫 setup2.html 的金鑰,但不會重寫 setup3.html 的金鑰,因此可以看看未適當輪替金鑰時會發生的情況。

  1. 執行下列指令:

gsutil rewrite -k gs://$BUCKET_NAME_1/setup2.html
  1. 如要開啟 boto 檔案,請執行下列指令:

nano .boto
  1. 再次新增 # 字元,將目前的 decryption_key1 行註解排除。

結果 (這是輸出內容範例)

變更前: decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= 變更後: # decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
  1. 依序按下 Ctrl+OEnter 鍵儲存 boto 檔案,然後按下 Ctrl+X 退出 nano。

下載 setup2 和 setup3

  1. 如要下載 setup2.html 檔案,請執行下列指令:

gsutil cp gs://$BUCKET_NAME_1/setup2.html recover2.html
  1. 如要下載 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 生命週期政策檔案

  1. 如要建立檔案並命名為 life.json,請執行下列指令:

nano life.json
  1. 將以下的值貼入 life.json 檔案:

{ "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 31} } ] }
  1. 依序按下 Ctrl+OEnter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano。

設定和驗證政策

  1. 如要設定政策,請執行下列指令:

gsutil lifecycle set life.json gs://$BUCKET_NAME_1
  1. 如要驗證政策,請執行下列指令:

gsutil lifecycle get gs://$BUCKET_NAME_1

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 啟用生命週期管理

工作 6:啟用版本管理

查看值區的版本管理狀態和啟用版本管理

  1. 請執行下列指令,查看值區目前的版本管理狀態:

gsutil versioning get gs://$BUCKET_NAME_1
  1. 如要啟用版本管理,請執行下列指令:

gsutil versioning set on gs://$BUCKET_NAME_1
  1. 如要驗證版本管理是否已啟用,請執行下列指令:

gsutil versioning get gs://$BUCKET_NAME_1

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 啟用版本管理

在值區建立多個版本的範例檔案

  1. 檢查範例檔案的大小:

ls -al setup.html
  1. 開啟 setup.html 檔案:

nano setup.html
  1. 在 setup.html 檔案中刪除任意 5 行程式碼,來變更檔案大小。

  2. 依序按下 Ctrl+OEnter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano。

  3. 使用 -v 版本管理選項將檔案複製到值區:

gsutil cp -v setup.html gs://$BUCKET_NAME_1
  1. 開啟 setup.html 檔案:

nano setup.html
  1. 再從 setup.html 檔案中刪除其他 5 行程式碼,來變更檔案大小。

  2. 依序按下 Ctrl+OEnter 鍵儲存檔案,然後按下 Ctrl+X 退出 nano。

  3. 使用 -v 版本管理選項將檔案複製到值區:

gsutil cp -v setup.html gs://$BUCKET_NAME_1

列出所有檔案版本

  1. 如要列出檔案的所有版本,請執行下列指令:

gsutil ls -a gs://$BUCKET_NAME_1/setup.html
  1. 反白選取並複製最舊版本 (第一個列出的版本) 的檔案名稱,後續步驟會將這個版本稱為 [VERSION_NAME]。
注意:務必複製檔案的完整路徑,路徑開頭為 gs://
  1. 將版本的值保存在環境變數 [VERSION_NAME] 中。

export VERSION_NAME=<Enter VERSION name here>
  1. 使用 echo 進行驗證:

echo $VERSION_NAME

結果 (這是輸出內容範例)

gs://BUCKET_NAME_1/setup.html#1584457872853517

下載檔案最舊的原始版本並驗證復原作業

  1. 下載檔案的原始版本:

gsutil cp $VERSION_NAME recovered.txt
  1. 如要驗證復原作業,請執行下列指令:

ls -al setup.html ls -al recovered.txt

工作 7:將目錄同步處理到值區

建立巢狀目錄並同步到值區

請建立巢狀結構的目錄,以便在對值區執行遞迴性複製作業時,查看會發生的情況。

  1. 執行下列指令:

mkdir firstlevel mkdir ./firstlevel/secondlevel cp setup.html firstlevel cp setup.html firstlevel/secondlevel
  1. 如要在 VM 和值區上同步處理 firstlevel 目錄,請執行下列指令:

gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel

查看結果

  1. 在 Cloud 控制台的「導覽選單」 上,依序點選「Cloud Storage」>「瀏覽器」

  2. 按一下 [BUCKET_NAME_1]。注意值區中的子資料夾。

  3. 依序點按 /firstlevel/secondlevel

  4. 比較您在 Cloud 控制台看到的內容和下列指令的結果:

gsutil ls -r gs://$BUCKET_NAME_1/firstlevel
  1. 退出 Cloud Shell:

exit

工作 8:跨專案共用

切換到第二個專案

  1. 開啟新的無痕分頁。

  2. 前往 console.cloud.google.com 來開啟 Cloud 控制台。

  3. 按一下標題列的專案選取器下拉式清單。

  4. 按一下「全部」,接著點按 Qwiklabs「連線詳細資料」對話方塊中提供的第二個專案。記住,所有 Google Cloud 專案的專案 ID 都是不重複的名稱。以下稱第二專案 ID 為 [PROJECT_ID_2]。

值區準備作業

  1. 在 Cloud 控制台的「導覽選單」 上,依序點選「Cloud Storage」>「瀏覽器」
  2. 按一下「建立值區」
  3. 指定下列屬性,並保持其餘設定的預設狀態:
屬性 值 (依指示輸入屬性值或選取選項)
名稱 輸入全域不重複的名稱
位置類型 多區域
存取權控管 精細 (除了值區層級權限,也會控管物件層級權限)
  1. 請記下值區名稱,這個名稱會在後續步驟中稱為 [BUCKET_NAME_2]。

  2. 按一下「建立」

將文字檔案上傳到值區

  1. 上傳檔案到 [BUCKET_NAME_2],任何小的範例檔案或文字檔案都可以。

  2. 請記下檔案名稱 (以下稱 [FILE_NAME]),稍後會用到。

建立身分與存取權管理服務帳戶

  1. 在 Cloud 控制台的「導覽選單」 上,依序點選「IAM 與管理」>「服務帳戶」
  2. 按一下「建立服務帳戶」
  3. 在「服務帳戶詳細資料」頁面上,將「服務帳戶名稱」設為 cross-project-storage
  4. 按一下「建立並繼續」
  5. 在「服務帳戶權限」頁面的角色選單中,依序選取「Cloud Storage」>「Storage 物件檢視者」
  6. 依序點按「繼續」和「完成」
  7. 按一下 cross-project-storage 服務帳戶來新增 JSON 金鑰。
  8. 在「金鑰」分頁,按一下「新增金鑰」下拉式選單,然後選取「建立新的金鑰」
  9. 選取「JSON」做為金鑰類型,然後按一下「建立」。系統會下載 JSON 金鑰檔案。在後續步驟中,您需要找出這個金鑰檔案並上傳到 VM。
  10. 按一下「關閉」
  11. 在硬碟上,將 JSON 金鑰檔案重新命名為 credentials.json
  12. 在上方窗格中,切換回 [PROJECT_ID_1]。

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 在第二個專案中建立資源

建立 VM

  1. 在「導覽選單」 上,依序點選「Compute Engine」>「VM 執行個體」
  2. 按一下「建立執行個體」
  3. 指定下列屬性,並保持其餘設定的預設狀態:
屬性 值 (依指示輸入屬性值或選取選項)
名稱 crossproject
區域 europe-west1
可用區 europe-west1-d
系列 N1
機器類型 n1-standard-1
開機磁碟 Debian GNU/Linux 11 (bullseye)
  1. 按一下「建立」

VM 的 SSH

  1. 針對 crossproject 按一下「SSH」,來啟動終端機並進行連線。
  1. 將 [BUCKET_NAME_2] 保存在環境變數中:

export BUCKET_NAME_2=<enter bucket name 2 here>
  1. 使用 echo 進行驗證:

echo $BUCKET_NAME_2
  1. 將 [FILE_NAME] 保存在環境變數中:

export FILE_NAME=<enter FILE_NAME here>
  1. 使用 echo 進行驗證:

echo $FILE_NAME
  1. 列出 [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

  1. 如要透過 SSH VM 終端機上傳 credentials.json 檔案,請按一下右上角的向上箭頭圖示 ,然後點按「上傳檔案」

  2. 選取並上傳 credentials.json。

  3. 按一下「檔案傳輸」視窗中的「關閉」

  4. 確認 JSON 檔案已上傳到 VM:

ls

結果 (這是輸出內容範例)

credentials.json
  1. 在終端機中輸入下列指令,授權 VM 使用 Google Cloud API:

gcloud auth activate-service-account --key-file credentials.json

驗證存取權

  1. 重試這項指令:

gsutil ls gs://$BUCKET_NAME_2/
  1. 重試這項指令:

gsutil cat gs://$BUCKET_NAME_2/$FILE_NAME
  1. 試著將憑證檔案複製到值區:

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.

修改角色

  1. 在上方窗格中,切換回 [PROJECT_ID_2]。
  2. 在 Cloud 控制台的「導覽選單」 上,依序點選「IAM 與管理」>「身分與存取權管理」
  3. 按一下 cross-project-storage 服務帳戶的「鉛筆」圖示 (可能需要向右滑動才能看到圖示)。
  4. 按一下「Storage 物件檢視者」角色,然後依序點按「Cloud Storage」>「Storage 物件管理員」
  5. 按一下「儲存」。 若未點按「儲存」,則無法完成變更。

點選「Check my progress」(檢查我的進度) 來確認目標已達成。 在第一個專案建立和驗證資源

確認存取權已變更

  1. 返回 crossproject 的 SSH 終端機。

  2. 將憑證檔案複製到值區:

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.

工作 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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.