開始使用 Cloud KMS

Cloud KMS 是一項雲端託管金鑰管理服務,能讓您以內部部署的方式管理雲端服務的加密編譯金鑰。包括支援使用多種金鑰類型和來源進行加密、解密、簽署和驗證作業,包括使用硬體支援金鑰的 Cloud HSM

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

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

您將從 Enron Corpus 擷取資料並加密,然後將資料載入 Cloud Storage。

你可以瞭解

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

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

  • Cloud KMS
  • Cloud Storage
  • Cloud SDK

自行調整環境設定

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

2016-02-10 12:45:26.png 的螢幕擷取畫面

提醒您,專案編號是所有 Google Cloud 專案的不重複名稱 (使用上述名稱後就無法使用,敬請見諒!)此程式碼研究室稍後將稱為 PROJECT_ID

接著,您必須在 Cloud Console 中啟用計費功能,才能使用 Google Cloud 資源。

完成這個程式碼研究室的成本應該不會超過新臺幣 $300 元,但如果您決定繼續使用更多資源,或是讓資源繼續運作 (請參閱本文件結尾的「清除設定」一節),就有可能需要更多成本。

新加入 Google Cloud Platform 的使用者可免費試用 $300 美元

啟動 Cloud Shell

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

佈建和連線至環境只需要幾分鐘的時間。完成後,您應該會看到如下內容:

這部虛擬機器已載入所有您需要的開發工具。這項服務提供永久性的 5GB 主目錄,可在 Google Cloud 中運作,大幅提升網路效能和驗證效能。除非另有說明,否則請從這個殼層執行所有指令。

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

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

然後建立值區:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus 是一個大型資料庫,由 Enron 公司旗下的 158 名員工產生了超過 600,000 封電子郵件。這項資料已複製到名為 gs://enron_emails/ 的 Cloud Storage 值區。

在本機上下載其中一個電子郵件檔案:

$ 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 的加密編譯金鑰,其用途為 encryption

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

開啟 Cryptographic Keys Web UI 並查看新建立的資源。這項功能位於主選單的「IAM 與管理員」下。

您可以在 Cloud Console 中查看及管理金鑰金鑰和加密編譯金鑰。

使用先前使用 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 值區。

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

Cloud KMS 已與 Google Cloud Identity and Access Management (IAM) 整合。Cloud KMS IAM 角色主要分為兩個類別:

  • 具備管理金鑰的權限
  • 「使用」金鑰的權限

舉例來說,roles/cloudkms.admin 角色可讓擁有者建立金鑰環、加密編譯金鑰、設定 IAM 政策,以及執行管理相關作業。roles/cloudkms.cryptoKeyEncrypterDecrypter 會授予資料者加密及解密資料,但不包含管理權限。

其父項資源會繼承 IAM 角色。如果有人在 Google Cloud 專案中擁有 roles/cloudkms.admin 角色,即是該專案中所有金鑰的管理員。如果金鑰環有「roles/cloudkms.admin」,則代表這是該金鑰環中所有金鑰的管理員。如果他們只有單一加密編譯金鑰上的 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 角色不包含 use 金鑰的權限,只用來管理金鑰。要授予您的身分使用 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 角色,該金鑰會包含任何子項加密編譯金鑰。第二個指令會授予 roles/cloudkms.cryptoKeyEncrypterDecrypter,但僅限在 enron-emails 加密編譯金鑰上。

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

除了加密單一檔案以外,您也可以使用一些指令碼來對一組檔案進行加密。這個範例會串流所有 allen-p 電子郵件並加密,然後將產生的加密值上傳至 Cloud Storage 值區:

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 活動 UI,您可以在其中查看 KeyRing 的建立和修改內容。

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

清理

發布本教學課程期間建立的資源。刪除先前建立的 Cloud Storage 值區:

$ 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 金鑰的自動輪替排程

瞭解詳情

授權

本作品採用創用 CC 姓名標示 2.0 一般授權。