開始使用 Cloud KMS

Cloud KMS 是雲端託管型金鑰管理服務,能讓您比照內部部署方式,管理雲端服務加密編譯金鑰。支援使用各種金鑰類型和來源 (包括 Cloud HSM,可提供硬體支援的金鑰) 進行加密、解密、簽署及驗證。

在本教學課程中,您將瞭解如何使用 Cloud Security and Privacy API 的進階功能,包括:

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

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

學習內容

  • 如何使用金鑰管理服務 (KMS) 加密資料及管理加密金鑰

您僅得於法律許可範圍內使用我們的

  • Cloud KMS
  • Cloud Storage
  • Cloud SDK

自行設定環境

如果您還沒有 Google 帳戶 (Gmail 或 Google 應用程式),請先建立帳戶。登入 Google Cloud Platform 主控台 (console.cloud.google.com),然後建立新專案:

Screenshot from 2016-02-10 12:45:26.png

請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID

接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。

完成本程式碼研究室的費用不應超過數美元,但如果您決定使用更多資源,或是將資源繼續執行 (請參閱本文件結尾的「清除」一節),則可能會增加費用。

Google Cloud Platform 新使用者享有價值 $300 美元的免費試用期

啟動 Cloud Shell

在本程式碼研究室中,您將使用 Cloud Shell。這項服務提供免費的虛擬化環境,在 Google Cloud 上執行。在 GCP 主控台的右上角工具列中,按一下 Cloud Shell 圖示:

佈建並連線至環境的作業只需幾分鐘即可完成。完成後,您應該會看到如下的內容:

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

如要儲存本教學課程的資料,請建立 Cloud Storage bucket。由於 Cloud Storage 值區名稱不得重複,請在值區名稱前加上專案 ID:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

接著建立 bucket:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus 是大型資料庫,含有 Enron Corporation 158 位員工往來的電子郵件,數量超過 600,000 封。這份資料已複製到名為 gs://enron_emails/ 的 Cloud Storage bucket。

將其中一個電子郵件檔案下載到本機:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

檢查下載的檔案,確認檔案確實是電子郵件:

$ tail 1.

電子郵件會包含類似下列的訊息:

Attached is the Delta position for 1/18...
# ...

除了電子郵件,這個值區也包含圖片。本教學課程會使用純文字電子郵件和圖片。

如要使用 Cloud KMS,請先在專案中啟用這項服務。每項專案只需要執行一次。如要啟用 Cloud KMS 服務,請執行下列指令:

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

啟用程序最多需要一分鐘。指令完成時會回報成功。

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

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

現在,在您剛建立的金鑰環中,建立名為 enron-emails 的 CryptoKey,並將用途設為 encryption

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

開啟「加密編譯金鑰網頁版 UI」,查看新建立的資源。您可以在主選單的「IAM 與管理」下方找到這項功能。

您可以在 Cloud Console 中查看及管理金鑰環和 CryptoKey。

使用 Cloud KMS 加密先前下載的電子郵件內容。本教學課程使用 gcloud 指令列工具,但您也可以使用 Cloud KMS API 加密資料。

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

這會在磁碟 1.enc 上建立新檔案,內含加密的檔案內容。現在資料已透過 Cloud KMS 加密,請將加密檔案上傳至 Cloud Storage bucket。

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS 整合了 Google Cloud 身分與存取權管理 (IAM)。Cloud KMS IAM 角色大致可分為兩類:

  • 管理金鑰的權限
  • 使用金鑰的權限

舉例來說,具備 roles/cloudkms.admin 角色的使用者可以建立金鑰環、CryptoKey、設定 IAM 政策,以及執行管理相關作業。roles/cloudkms.cryptoKeyEncrypterDecrypter 授予持有者加密及解密資料的權限,但不包括管理權限。

IAM 角色會由父項資源繼承。如果使用者具備 Google Cloud 專案的 roles/cloudkms.admin 角色,就是該專案中所有金鑰的管理員。如果使用者擁有金鑰環的 roles/cloudkms.admin 角色,就是該金鑰環中所有金鑰的管理員。如果使用者對單一 CryptoKey 具有 roles/cloudkms.admin,則只會是該金鑰的管理員。

在這項練習中,請使用您的身分:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

使用 gcloud 指令列工具,將管理上述金鑰環中 Cloud KMS 資源的權限指派給身分:

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

roles/cloudkms.admin 角色不具備使用金鑰的權限,只能管理金鑰。如要授予身分使用 enron-emails 加密金鑰加密及解密資料的權限,請按照下列步驟操作:

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

請注意,第一個指令會授予金鑰環的 roles/cloudkms.admin 角色,其中包含任何子項 CryptoKey 資源。第二個指令會授予 roles/cloudkms.cryptoKeyEncrypterDecrypter,但僅限於 enron-emails 加密編譯金鑰。

您也可以在 Cloud Console 的 Cloud KMS 使用者介面中查看及指派角色。

除了加密單一檔案,您也可以透過部分指令碼加密檔案集合。本示例會串流 allen-p 的所有郵件,將其加密後上傳至 Cloud Storage bucket:

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

這會逐一處理範例 Cloud Storage 值區中指定目錄的所有檔案,使用 Cloud KMS 加密檔案,並上傳至 Google Cloud Storage。

指令碼執行完畢後,您可以在 Cloud Storage 使用者介面中查看已加密的檔案。畫面應如下所示:

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

如要查看 KMS 中資源的活動,請點選金鑰環並選取「查看活動」。您會前往 Cloud 活動使用者介面,應該會看到所有建立的金鑰環,以及對其所做的所有變更。

您已使用 Cloud KMS 成功加密資料,並將加密資料儲存在 Cloud Storage 中。

清除

釋放本教學課程中建立的資源。刪除稍早建立的 Cloud Storage bucket:

$ gsutil rm -r gs://${BUCKET_NAME}

無法刪除 Cloud KMS 資源。不過,您可以銷毀金鑰內容,這樣就無法再使用:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

涵蓋內容

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

後續步驟

  • 使用 Cloud KMS 加密資料庫 (例如 BigQuery) 中的資料欄
  • 在 Cloud KMS 金鑰上設定自動輪替時間表

瞭解詳情

授權

這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。