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),然後建立新專案:
請記住專案 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 金鑰上設定自動輪替時間表
瞭解詳情
- 進一步瞭解如何輪替加密金鑰
- 瞭解信封式加密
- 瞭解 Cloud Storage bucket 的伺服器端加密
- 在 Stackoverflow 上使用 google-cloud-kms 標記發布問題並尋找解答
授權
這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。