使用 Cloud KMS 加密及解密資料

1. 總覽

Cloud KMS 是雲端託管型金鑰管理服務,能讓您使用內部部署方式,管理雲端服務的加密編譯金鑰。支援使用多種金鑰類型和來源進行加密、解密、簽署及驗證,包括適用於硬體支援金鑰的 Cloud HSM。本教學課程說明如何使用對稱式 Cloud KMS 金鑰加密及解密資料。

您將會學到

  • 如何啟用 Cloud KMS API
  • 如何建立 Cloud KMS 金鑰環
  • 如何建立 Cloud KMS 加密編譯金鑰,以便進行對稱式加密/解密
  • 如何輪替對稱式 Cloud KMS 加密編譯金鑰

2. 設定和需求

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請先建立帳戶)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID

  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

在本程式碼研究室中,您將使用 Cloud Shell,這是在 Google Cloud 上執行的免費虛擬化環境。在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,因此能大幅提升網路效能和驗證成效。除非另有指示,否則執行這個殼層中的所有指令。

3. 啟用 Cloud KMS 服務

您必須先在專案中啟用服務,才能使用 Cloud KMS。每項專案只需執行一次即可。如要啟用 Cloud KMS 服務,請執行下列指令:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

啟用程序最多需要一分鐘才能完成。執行完畢後,指令會回報成功。

4. 建立 KMS 金鑰

建立 Cloud KMS 金鑰環。在 Cloud KMS 中,金鑰環是加密編譯金鑰的邏輯集合。金鑰環包含與金鑰相關的中繼資料,例如金鑰的位置。在 global 區域中建立名為 my-keyring 的金鑰環:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

現在在剛建立的金鑰環中建立名為「my-symmetric-key」的加密編譯金鑰,其中目的為「encryption」。

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. 加密資料

建立含有加密資料的檔案,然後使用 gcloud 指令列工具加密檔案中的資料:

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

加密資料 (也稱為「密文」) 會儲存在磁碟的 data.txt.enc 中。當您開啟 data.txt.enc 檔案時,會發現檔案中有奇怪且無法列印的字元。這是因為結果資料採用「二進位格式」

將密文儲存在資料庫中,或是做為 HTTP 要求的一部分傳送時,您可能需要對資料進行編碼。常見的編碼機制為 base64。

Cloud KMS 不會「儲存」您提供的任何明文。由於系統在擷取明文值時必須使用這組密文,請將這段密文儲存在安全的位置。

6. 解密資料

使用 gcloud 指令列工具,從檔案解密密文:

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

gcloud 指令列工具從檔案讀取密文,並使用 Cloud KMS 解密。請注意,這個範例會將 --plaintext-file 引數指定為 -。這會指示 gcloud 將結果列印至終端機。

控制台會顯示 my-contents,也就是與上方檔案相同的明文值。

7. 輪替金鑰

在 Cloud KMS 中,加密編譯金鑰實際上是一組加密編譯金鑰版本。您可以建立新的加密編譯金鑰版本來執行金鑰輪替。Cloud KMS 也可以按照時間表自動輪替金鑰

如要手動輪替金鑰,請建立新的加密編譯金鑰版本,並設為主要版本:

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

日後所有傳送至加密資料的要求都會使用這個新的金鑰。舊的金鑰仍可用來解密先前已使用這些金鑰加密的資料。Cloud KMS 會自動依據提供的密文決定適當的解密金鑰,因此您無須指定解密時使用的加密編譯金鑰版本。

如要避免使用舊版加密編譯金鑰版本加密的密文值,可以停用或刪除該加密編譯金鑰版本。停用後可以復原作業,刪除後就無法復原。如何停用某個版本:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. 恭喜!

您已啟用 Cloud KMS API、建立對稱式加密金鑰,以及加密和解密資料!Cloud KMS 是功能強大的產品,加密/解密功能僅觸及其能力所及。

清理

如果試用完畢,請考慮刪除專案。

  • 前往 Cloud Platform 主控台
  • 選取您要關閉的專案,然後按一下 [刪除]。這麼做會排定將專案刪除。

瞭解詳情

授權

這項內容採用的是創用 CC 姓名標示 2.0 通用授權。