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),然後建立新專案:
提醒您,專案編號是所有 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 金鑰的自動輪替排程
瞭解詳情
- 進一步瞭解如何輪替加密金鑰
- 瞭解信封式加密
- 瞭解 Cloud Storage 值區的伺服器端加密。
- 在 Stack Overflow 上張貼問題並在 google-cloud-kms 標記中尋找解答
授權
本作品採用創用 CC 姓名標示 2.0 一般授權。