arrow_back

開始使用 Cloud KMS

登录 加入
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

開始使用 Cloud KMS

Lab 45 分钟 universal_currency_alt 1 积分 show_chart 入门级
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP079

Google Cloud 自修研究室標誌

總覽

在本實驗室中,您會瞭解如何使用一些 Google Cloud 安全性以及 Privacy API 的進階功能,包括:

  • 設定安全的 Cloud Storage bucket
  • 使用金鑰管理服務控管金鑰和已加密資料
  • 查看 Cloud Storage 稽核記錄

您要使用 Enron Corpus 的節略版資料、加密資料,並將其載入 Cloud Storage。

課程內容

  • 如何使用 Cloud Key Management Service (KMS) 加密資料及管理加密金鑰。

設定和需求

點選「Start Lab」按鈕前的須知事項

請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。

您將在真正的雲端環境中完成實作研究室活動,而不是在模擬或示範環境。為達此目的,我們會提供新的暫時憑證,讓您用來在研究室活動期間登入及存取 Google Cloud。

如要完成這個研究室活動,請先確認:

  • 您可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意:請使用無痕模式或私密瀏覽視窗執行此研究室。這可以防止個人帳戶和學生帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成研究室活動了!別忘了,活動一開始將無法暫停。
注意:如果您擁有個人 Google Cloud 帳戶或專案,請勿用於本研究室,以免產生額外費用。

如何開始研究室及登入 Google Cloud 控制台

  1. 按一下「Start Lab」(開始研究室) 按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」(研究室詳細資料) 面板會顯示下列項目:

    • 「Open Google Console」(開啟 Google 控制台) 按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的暫時憑證
    • 完成這個研究室所需的其他資訊 (如有)
  2. 按一下「Open Google Console」(開啟 Google 控制台)。接著,研究室會啟動相關資源並開啟另一個分頁,當中會顯示「Sign in」(登入) 頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意事項:如果頁面中顯示了「Choose an account」(選擇帳戶) 對話方塊,請按一下「Use Another Account」(使用其他帳戶)
  3. 如有必要,請複製「Lab Details」(研究室詳細資料) 面板中的使用者名稱,然後貼到「Sign in」(登入) 對話方塊。按一下「Next」(下一步)

  4. 複製「Lab Details」(研究室詳細資料) 面板中的密碼,然後貼到「Welcome」(歡迎使用) 對話方塊。按一下「Next」(下一步)

    重要注意事項:請務必使用左側面板中的憑證,而非 Google Cloud 技能重點加強的憑證。 注意事項:如果使用自己的 Google Cloud 帳戶來進行這個研究室,可能會產生額外費用。
  5. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Cloud 控制台稍後會在這個分頁中開啟。

注意事項:按一下畫面左上方的導覽選單,即可在選單中查看 Google Cloud 產品與服務的清單。「導覽選單」圖示

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台上方的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

連線完成即代表已通過驗證,且專案已設為您的 PROJECT_ID。輸出內容中有一行宣告本工作階段 PROJECT_ID 的文字:

您在本工作階段中的 Cloud Platform 專案會設為「YOUR_PROJECT_ID」

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

  2. 輸出畫面應如下所示:

輸出內容:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = <project_ID>

輸出內容範例:

[core] project = qwiklabs-gcp-44776a13dea667a6 附註:如需有關 gcloud 的完整說明,請前往 Google Cloud 並參閱「gcloud CLI overview guide」(gcloud CLI 總覽指南)。

工作 1:建立 Cloud Storage bucket

為了在本實驗室中儲存資料,您需要自行建立 Cloud Storage bucket。

  1. 為您的 Cloud Storage bucket 命名,例如 -enron_corpus。如想進一步瞭解如何為 bucket 命名,請參閱 Cloud Storage bucket 的命名規範。在 Cloud Shell 中執行下列指令,將變數設為您的 bucket 名稱:
BUCKET_NAME="{{{ project_0.project_id }}}-enron_corpus"
  1. 接著執行下列指令來建立 bucket:
gsutil mb gs://${BUCKET_NAME}

執行下列指令也可確認 gsutil 指令列用戶端是否妥善設定、驗證機制是否正常運作,以及您是否具備寫入權限,可存取作業中的雲端專案。

  1. bucket 建立完成後,請繼續下一個步驟,下載 Enron Corpus。

點選「Check my progress」確認目標已達成。

建立 Cloud Storage bucket。

工作 2:查看資料

Enron Corpus 是有超過 600,000 封電子郵件的大型資料庫,由 Enron Corporation 的 158 位員工打造而成。這份資料已複製到 Cloud Storage bucket gs://enron_emails/

  1. 執行下列指令,將其中一份來源檔案下載到本機,以便查看檔案內容:
gsutil cp gs://enron_emails/allen-p/inbox/1. .
  1. 現在 tail 已下載檔案,確認是否含有電子郵件文字內容:
tail 1.

您應該會收到下列輸出內容:

Attached is the Delta position for 1/18, 1/31, 6/20, 7/16, 9/24 << File: west_delta_pos.xls >> Let me know if you have any questions.

結果應該會顯示明文電子郵件檔案的內容。您要尋找的檔案有兩種:明文電子郵件檔案與圖片檔。如果您有興趣,也可以嘗試使用相同機制查看其他檔案的內容。

工作 3:啟用 Cloud KMS

Cloud KMS 是 Google Cloud 的加密編譯金鑰管理服務。您需要先在專案中啟用 KMS 才能使用這項服務。在本實驗室中,您佈建的 KMS 應該已啟用。您可以使用其中一項 gcloud CLI 指令,確認 KMS 是否啟用。

  • 在 Cloud Shell 工作階段中執行下列指令:
gcloud services enable cloudkms.googleapis.com 注意:您也可以使用 Cloud 控制台使用者介面,為專案啟用 KMS 和其他服務。

您應該不會收到任何輸出內容。現在 Cloud KMS 已在您的專案中啟用!

工作 4:建立金鑰環和 Cryptokey

為了加密資料,您必須建立金鑰環和 CryptoKey。金鑰環很適合用來分組金鑰。分組方式可以是環境 (例如 測試測試中生產製造),或其他分組依據。本實驗室將金鑰環稱為 test,CryptoKey 則稱為 qwiklab

  1. 在 Cloud Shell 中執行下列指令,設定環境變數:
KEYRING_NAME=test CRYPTOKEY_NAME=qwiklab
  1. 執行 gcloud 指令來建立金鑰環。本實驗室會使用「全域」位置,但您也可以設為特定區域:
gcloud kms keyrings create $KEYRING_NAME --location global
  1. 接下來使用新的金鑰環,建立 qwiklab CryptoKey:
gcloud kms keys create $CRYPTOKEY_NAME --location global \ --keyring $KEYRING_NAME \ --purpose encryption 注意:Cloud KMS 中的 CryptoKey 和金鑰環無法刪除!

您應該不會看到任何輸出內容。就這樣,您已成功建立金鑰環 和 CryptoKey!

  1. 在控制台中,依序前往「導覽選單」>「安全性」>「金鑰管理」,開啟金鑰管理服務。

您可以在金鑰管理服務的網頁版使用者介面中,查看及管理 CryptoKey 和金鑰環。之後您管理權限時,會用到這個使用者介面。

點選「Check my progress」確認目標已達成。

建立金鑰環和 Cryptokey。

工作 5:加密您的資料

接著,嘗試加密一些資料!

  1. 執行下列指令,使用您先前查看的電子郵件內容,並透過 base64 技術將其編碼:
PLAINTEXT=$(cat 1. | base64 -w0) 注意:Base64 編碼技術可將二進位資料以明文方式傳送至 API。這項指令適用於圖片、影片或其他類型的二進位資料。

使用加密端點,您就可以將想加密的 Base64 編碼文字傳送至指定金鑰。

  1. 執行以下指令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type: application/json" 注意:每次 encrypt 動作都會傳回不同的結果,即便使用相同的文字內容和金鑰也一樣。

回應會是 JSON 酬載,包含 ciphertext 屬性的加密文字內容。

  1. 您的檔案已加密,接著可以儲存檔案,並將其上傳至 Cloud Storage bucket。如要從 JSON 回應擷取加密文字內容,並將其儲存至檔案,請使用指令列公用程式 jq。先前呼叫的回應可以傳輸至 jq,能將 ciphertext 屬性剖析至 1.encrypted 檔案。執行以下指令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type:application/json" \ | jq .ciphertext -r > 1.encrypted
  1. 如要驗證已加密資料是否可解密,請呼叫 decrypt 端點,驗證解密後的文字內容是否與原先的電子郵件相符。已加密資料含有加密該資料的 CryptoKey 版本資訊,因此特定版本不會提供給解密端點。執行以下指令:
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:decrypt" \ -d "{\"ciphertext\":\"$(cat 1.encrypted)\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\ -H "Content-Type:application/json" \ | jq .plaintext -r | base64 -d 注意:通常解密會在應用程式層執行。如想瞭解多種程式設計語言的加密/解密資料逐步操作說明,請參閱 Cloud KMS 快速入門導覽課程
  1. 您已確認文字內容加密成功,接著要將加密檔案上傳至 Cloud Storage bucket。
gsutil cp 1.encrypted gs://${BUCKET_NAME}

點選「Check my progress」確認目標已達成。

使用 Cloud KMS 金鑰加密資料,然後將其上傳到儲存空間 bucket。

工作 6:設定 IAM 權限

在 KMS 中有兩項要注意的主要權限。一項權限可讓使用者或服務帳戶管理 KMS 資源,另一項權限則可讓使用者或服務帳戶透過金鑰加密及解密資料。

管理金鑰的權限是 cloudkms.admin,具備此權限的任何人都可以建立金鑰環,以及建立、修改、停用和刪除 CryptoKey。加密及解密權限是 cloudkms.cryptoKeyEncrypterDecrypter,用於呼叫加密及解密 API 端點。

在這項練習中,您要將 IAM 權限指派給現有的授權使用者。

  1. 如要取得現有的授權使用者,請執行下列指令:
USER_EMAIL=$(gcloud auth list --limit=1 2>/dev/null | grep '@' | awk '{print $2}')
  1. 接著,將管理 KMS 資源的權限指派給該使用者。執行下列 gcloud 指令即可指派 IAM 權限,用於管理您剛才建立的金鑰環:
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \ --location global \ --member user:$USER_EMAIL \ --role roles/cloudkms.admin

由於 CryptoKeys 隸屬於金鑰環,而金鑰環隸屬於專案,若使用者具備這個階層中的高層級特定角色或權限,就會繼承子資源的相同權限。舉例來說,如果某位使用者具備專案的「擁有者」角色,則也會成為該專案中所有金鑰環和 CryptoKey 的擁有者。同樣的,如果使用者獲派金鑰環的 cloudkms.admin 角色,也會擁有該金鑰環中 CryptoKey 的相關權限。

如果沒有 cloudkms.cryptoKeyEncrypterDecrypter 權限,授權使用者就無法使用金鑰加密/解密資料。

  1. 執行下列 gcloud 指令來指派 IAM 權限,透過您建立金鑰環中的 CryptoKey,加密及解密資料:
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \ --location global \ --member user:$USER_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter

現在您可以在「金鑰服務」的「加密編譯金鑰」部分查看已指派的權限。

  1. 勾選金鑰環 (test) 名稱旁的方塊,然後點選右側資訊面板的「主體」

系統會開啟選單,您可以針對剛才建立的金鑰環查看帳戶和權限。

工作 7:透過指令列備份資料

您已瞭解如何加密單一檔案,也具備相關權限,接著可以執行指令碼來備份目錄中的所有檔案。本示例會複製 allen-p 的所有郵件、加密郵件,並將其上傳至 Cloud Storage bucket。

  1. 首先,將 allen-p 所有的電子郵件複製到您現有的工作目錄:
gsutil -m cp -r gs://enron_emails/allen-p .
  1. 接著複製下列指令碼並貼到 Cloud Shell,備份並加密 allen-p 目錄中的所有檔案,儲存至 Cloud Storage bucket:
MYDIR=allen-p FILES=$(find $MYDIR -type f -not -name "*.encrypted") for file in $FILES; do PLAINTEXT=$(cat $file | base64 -w0) curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \ -d "{\"plaintext\":\"$PLAINTEXT\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json" \ | jq .ciphertext -r > $file.encrypted done gsutil -m cp allen-p/inbox/*.encrypted gs://${BUCKET_NAME}/allen-p/inbox

這項指令碼會循環處理指定目錄中的所有檔案,使用 KMS API 加密檔案,並上傳至 Cloud Storage。

點選「Check my progress」確認目標已達成。

使用 KMS API 加密多個檔案,並上傳到 Cloud Storage。

指令碼執行完畢後,您可以在控制台的左選單中點選「Storage」,查看已加密的檔案。

  1. 如要找出檔案,請依序前往「導覽選單」>「Cloud Storage」>「Bucket」>「YOUR_BUCKET」>「allen-p」>「收件匣」。畫面應如下所示:

bucket 內容

注意:Cloud Storage 支援伺服器端加密,可以為資料設定金鑰輪替機制,此為在 Cloud Storage 中加密資料的建議做法。以上範例僅供示範。

工作 8:查看 Cloud 稽核記錄

Google Cloud 稽核記錄包含管理員活動與資料存取兩種記錄串流,兩者皆由 Google Cloud 服務產生,可協助您瞭解 Google Cloud 專案中相關人事時地物的問題。

  • 如要查看 KMS 中資源的活動,請依序點選「導覽選單」>「Cloud 總覽」>「活動」分頁。您會前往 Cloud 活動使用者介面,接著點選「View Log Explorer」,選取「Cloud KMS 金鑰環」做為 Resource Type,您應該會看到所有建立的金鑰環,以及對其所做的所有變更。

現在您已使用 KMS 加密資料,並將其上傳至 Cloud Storage!

課程內容

  • 使用 IAM 管理 KMS 權限。
  • 使用 KMS 加密資料。
  • 使用 Cloud Storage 儲存已加密資料。
  • 使用 Cloud 稽核記錄功能,查看所有 CryptoKeys 和金鑰環的活動。

工作 9:學以致用

進行測驗,測試您對 Cloud KMS 的瞭解程度。

恭喜!

您已瞭解如何使用 Cloud Key Management Service (KMS) 加密資料及管理加密金鑰。

後續行動/瞭解詳情

使用手冊上次更新日期:2024 年 4 月 15 日

實驗室上次測試日期:2023 年 8 月 31 日

Copyright 2024 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。