使用 Cloud KMS Autokey 輕鬆加密資源

1. 簡介

Cloud KMS Autokey 透過自動佈建和指派功能,簡化了建立及使用客戶自行管理的加密金鑰 (CMEK) 的程序。有了 Autokey,您就不必在需要金鑰環、金鑰和服務帳戶時才規劃和佈建這些項目。相反地,Autokey 會在建立資源時視需要產生金鑰,並依賴委派權限,而非 Cloud KMS 管理員。

使用 Autokey 產生的金鑰可協助您符合業界標準和資安方面的建議做法,包括 HSM 防護等級、權責劃分、金鑰輪替、位置和金鑰明確性。Autokey 會根據與 Cloud KMS Autokey 整合的 Google Cloud 服務,根據資源類型製訂適用的一般規範和規範建立金鑰。建立後,使用 Autokey 要求的金鑰,其功能與其他採用相同設定的 Cloud HSM 金鑰完全相同。

建構項目

在本程式碼研究室中,您會透過 Cloud KMS Autokey 來建立以下內容,藉此啟動受保護的資源:

  • 資料夾資源
  • 包含金鑰的專案
  • 服務代理,做為您的金鑰管理助理
  • 代管受保護資源的專案
  • 使用 Cloud KMS Autokey 加密的 BigQuery 資料集、永久磁碟和 Cloud Storage 值區

軟硬體需求

2. 建立資料夾

資料夾為 Cloud Platform 資源階層中的節點。資料夾可包含專案、其他資料夾,或兩者兼具。在階層結構中的機構資源節點下,機構資源可以利用資料夾將專案分門別類。要建立資料夾:

  1. 前往 Google Cloud 控制台中的「管理資源」頁面
  2. 在頁面頂端的機構下拉式清單中選取機構資源名稱。
  3. 按一下「建立資料夾」

9328ef3bd4840817.png

  1. 選取標準資料夾

20a094fe0c7a0924.png

  1. 在「資料夾名稱」方塊中輸入新資料夾的名稱。在本研究室中,請考慮使用「Autokey-Folder」
  2. 按一下「目的地」下方的「瀏覽」,然後選取要在其中建立新資料夾的機構資源或資料夾。
  3. 按一下「建立」。

3. 建立資源專案

請務必建立資源專案,其中包含您要使用 Cloud KMS Autokey 加密的資源,例如 BigQuery 資料集、持久性磁碟和 Cloud Storage 值區。如果您嘗試在金鑰專案中建立受 Autokey 保護的資源,Autokey 會拒絕新金鑰的要求。如要建立資源專案,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「管理資源」 頁面。
  2. 按一下「建立專案」。

93e4e224322c68a7.png

  1. 在頁面頂端的 [選取機構] 下拉式清單中,選取 [自動資料夾資料夾]資料夾。
  2. 在隨即顯示的「新增專案」視窗中,輸入專案名稱並選取適當的帳單帳戶。在本研究室中,請考慮使用「Autokey Encrypted Resources」
  3. 在「位置」方塊中,選取「Autokey-Folder」資料夾。該資源將成為新專案的階層父項。設定內容應該會類似這樣:

187ece37daf50835.png

  1. 複製專案 ID (上例中的專案 ID 為「causal-hour-43319-m4」,但您的 ID 可能不同),並將其複製到所選文字編輯器中。
  2. 點選 [建立]
  3. 選取畫面右上角的 Cloud Shell 圖示

16c8476c4991f448.png

  1. Cloud Shell 啟用後,請執行下列指令,將 Autokey 專案 ID 儲存為變數:
export RESOURCE_PROJECT=<paste your Resource Project ID>

因為我的專案 ID 是「key-management-433319」我的指令如下所示:

export AUTOKEY_PROJECT=causal-hour-43319-m4
  1. 執行下列指令,從金鑰專案執行指令:
gcloud config set project $RESOURCE_PROJECT

系統顯示提示時,點選「授權」來授權 Cloud Shell

a6c755d4921bc728.png

  1. 由於這個專案會包含資源,我們需要為 Autokey 要保護的服務啟用 API。執行下列指令:
gcloud services enable storage.googleapis.com bigquery.googleapis.com compute.googleapis.com

4. 建立主要專案

建議您建立專案,納入 Autokey 建立的 Cloud KMS 資源。這將是日後的「重要專案」。您可以在要啟用 Autokey 的同一個資料夾中建立金鑰專案。請勿在金鑰專案中建立其他資源。如果您嘗試在金鑰專案中建立受 Autokey 保護的資源,Autokey 會拒絕新金鑰的要求。建立金鑰專案的方法如下:

  1. 前往 Google Cloud 控制台中的「管理資源」頁面
  2. 按一下「建立專案」。

93e4e224322c68a7.png

  1. 在頁面頂端的 [選取機構] 下拉式清單中,選取 [自動資料夾資料夾]資料夾。
  2. 在顯示的「New Project」視窗中,輸入專案名稱並選取適當的帳單帳戶。在本實驗室中,請考慮使用「Key Management」
  3. 在「位置」方塊中,選取「Autokey-Folder」資料夾。該資源將成為新專案的階層父項。設定應類似下圖:

157894b5c9048c06.png

  1. 複製專案 ID (上例中的專案 ID 為「key-management-433319」,但您的 ID 可能會不同),並將其複製到所選文字編輯器中。
  2. 按一下「建立」。

5. 準備 Autokey 金鑰專案

每個專案都已建立完成,接著請設定金鑰專案以使用 Cloud KMS Autokey。

  1. 選取畫面右上角的 Cloud Shell 圖示

16c8476c4991f448.png

  1. Cloud Shell 啟用後,請執行下列指令,將 Autokey 專案 ID 儲存為變數:
export AUTOKEY_PROJECT=<paste your Autokey Project ID>

因為我的專案 ID 是「key-management-433319」我的指令如下所示:

export AUTOKEY_PROJECT=key-management-433319
  1. 執行下列指令,從金鑰專案執行指令:
gcloud config set project $AUTOKEY_PROJECT

系統顯示提示時,點選「授權」來授權 Cloud Shell

a6c755d4921bc728.png

  1. 執行下列指令來啟用 Cloud KMS API
gcloud services enable cloudkms.googleapis.com  kmsinventory.googleapis.com
  1. 執行下列指令,將專案編號儲存為 AUTOKEY_PROJECT_NUMBER 變數
export AUTOKEY_PROJECT_NUMBER=$(gcloud projects list \
--filter="$(gcloud config get-value project)" \
--format="value(PROJECT_NUMBER)")
  1. 執行下列指令,將主體的電子郵件儲存為變數:
export KEY_ADMIN_EMAIL=<paste your Principal's email>
  1. 將金鑰專案的 Cloud KMS 管理員權限授予 Cloud KMS 管理員使用者
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=user:$KEY_ADMIN_EMAIL

6. 設定 Cloud KMS 服務代理

金鑰專案的 Cloud KMS 服務代理人會代表 Cloud KMS 管理員,在建立資源時建立金鑰並套用 IAM 政策繫結。Cloud KMS 服務代理人必須具備 Cloud KMS 管理員權限,才能建立及指派金鑰。

  1. 請使用下列指令尋找機構 ID:
gcloud organizations list | grep -P -i 'ID:' | grep -i '[0-9]'
  1. 複製機構 ID - 這是以紅色醒目顯示的數字結果
  2. 將機構 ID 儲存為名為 ORG_ID 的變數:
export ORG_ID=<paste your Organization ID>
  1. 執行下列指令,建立 Cloud KMS 服務代理:
gcloud beta services identity create --service=cloudkms.googleapis.com \
    --project=$AUTOKEY_PROJECT_NUMBER
  1. 將 Cloud KMS 管理員角色授予服務代理人:
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=serviceAccount:service-$AUTOKEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
  1. 新增 IAM 政策繫結,以便查看 Cloud KMS 金鑰用量。「金鑰使用方式」提供每組金鑰的資訊,包括受保護的資源、專案數量,以及使用該金鑰的專屬 Google Cloud 產品數量。凡是金鑰的 Cloud KMS 檢視者角色,皆可查看這類詳細資料。執行下列指令:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
    --member="serviceAccount:service-org-$ORGANIZATION_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. 授予 Cloud KMS 服務帳戶機構資源的 Cloud KMS 機構服務代理人 (cloudkms.orgServiceAgent) 角色。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="serviceAccount:service-org-$ORG_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. 將您機構資源的 Cloud KMS 受保護的資源檢視者角色授予任何需要查看金鑰使用情形詳細資料的使用者。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="user:$KEY_ADMIN_EMAIL" \
    --role='roles/cloudkms.protectedResourcesViewer'

7. 授予 Autokey 使用者角色

您必須先授予開發人員必要的角色,他們才能使用 Autokey。您可以在資料夾層級或專案層級授予角色。這個角色可讓開發人員在該資料夾或專案中建立資源時,向 Cloud KMS 服務代理要求金鑰。

授予角色的第一步是儲存資料夾 ID。

  1. 使用下列指令找出資料夾 ID:
gcloud projects describe $AUTOKEY_PROJECT | grep 'id' | grep -P -i '[0-9]+'
  1. 複製資料夾 ID:這是以紅色醒目顯示的部分
  2. 將資料夾 ID 儲存為 FOLDER_ID 變數
export FOLDER_ID=<paste the folder ID>

在本研究室中,我們將將主要管理員定義為 Autokey 使用者。不過,如果是在正式環境使用,或在有多人的機構中,主要管理員必須與使用 Autokey 的開發人員不同。

  1. 在資料夾層級授予 roles/cloudkms.autokeyUser 角色:
gcloud resource-manager folders add-iam-policy-binding \
    $FOLDER_ID --role=roles/cloudkms.autokeyUser \
    --member=user:$KEY_ADMIN_EMAIL

8. 在資源資料夾上啟用 Cloud KMS Autokey

在這個步驟中,您將在資源資料夾啟用 Cloud KMS Autokey,並識別含有該資料夾 Autokey 資源的 Cloud KMS 專案。在這個資料夾中啟用 Autokey 後,資料夾內的所有資源專案都會啟用 Autokey。

  1. 在 Google Cloud 控制台中,前往「KMS controls」頁面。
  2. 按一下「選取資料夾」

785f338e1860029c.png

  1. 在內容挑選器中,選取要啟用 Autokey 的資料夾。這個資料夾就是您先前建立的資料夾,其中包含資源專案和金鑰管理專案。看起來應該像這樣:

f0ee5141dc6fa40e.png

  1. 按一下「啟用」。
  2. 按一下「瀏覽」選取金鑰專案
  3. 選取金鑰管理專案,然後按一下「提交」。

5acd9e68eb972e15.png

系統會顯示訊息,確認資料夾已啟用 Cloud KMS Autokey。KMS 控制項頁面應如下所示:

8bddb3d688ba842d.png

9. 使用 Cloud KMS Autokey 建立受保護的資源

Compute Engine 永久磁碟

Autokey 會為每個磁碟、映像檔和機器映像檔建立新的金鑰,位置與建立的資源相同。

如要建立磁碟,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「磁碟」頁面。
  2. 按一下「建立磁碟」,然後輸入新磁碟的屬性。
  3. 在「Encryption」(加密) 下方,選取「Cloud KMS key」(Cloud KMS 金鑰)。

dcc63e9ae03c5fbe.png

  1. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新的金鑰」。畫面上會顯示訊息,指出金鑰已成功建立並可供使用。

4b2283a0d52cc98d.png

  1. 按一下「建立」即可完成磁碟建立程序。

您可以按照類似的程序建立受保護的 VM 執行個體、映像檔和機器映像檔資源。

Google Cloud Storage 值區

Autokey 在與值區相同的位置中建立新的金鑰。Autokey 建立的金鑰會指派為值區預設金鑰。

Autokey 不會為物件建立鍵。根據預設,在值區中建立的物件會使用值區預設金鑰。如果您想以值區預設金鑰以外的金鑰加密物件,可以手動建立 CMEK,並在建立物件時使用該金鑰。

  1. 前往 Google Cloud 控制台的「Create a bucket」(建立值區) 頁面。
  2. 請挑選一個全域不重複的永久名稱。
  3. 選擇資料位置。
  4. 前往「選擇保護物件資料的方式」區段

e31bbeff5c7aabdf.png

  1. 按一下「Choose how to protect object data」(選擇保護物件資料的方式) 展開該部分

9c68ce19dac932de.png

  1. 展開「資料加密」部分,然後選取 Cloud KMS 金鑰。d8caca08891be9dc.png
  2. 在「金鑰類型」中,選取「使用 Autokey 的 Cloud KMS」,然後按一下「要求新的金鑰」。系統會在車鑰成功建立並可供使用時顯示訊息。

a10d1ae243c44811.png

  1. 如要完成值區建立程序,請點選「建立」。如果出現「系統會禁止公開存取」的對話方塊,請按一下「確認」。

BigQuery 資料集

Autokey 會為每個新資料集建立新的金鑰,並放在資源所在的位置,這會成為資料集的預設金鑰。Autokey 不會為資料表、查詢、臨時資料表或模型建立鍵。根據預設,這些資源會受到資料集預設金鑰保護。如要以資料集預設金鑰以外的金鑰保護資料集內的資源,您可以手動建立 CMEK,並在建立資源時使用該金鑰。

如要建立 BigQuery 資料集,您必須先具備 BigQuery 使用者角色。

  1. 返回 Cloud Shell
  2. 設定 Cloud Shell 以執行資源專案中的指令
gcloud config set project $RESOURCE_PROJECT
  1. 執行下列指令,將專案編號儲存為名為 RESOURCE_PROJECT_NUMBER 的變數
export RESOURCE_PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
  1. 將 BigQuery 使用者角色授予自己
gcloud projects add-iam-policy-binding $RESOURCE_PROJECT_NUMBER \
    --role=roles/bigquery.user \
    --member=user:$KEY_ADMIN_EMAIL

有了 BigQuery 使用者角色,您就可以建立資料集,並使用 Autokey 加以保護!

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。
  2. 按照操作說明建立資料集,直到看到「進階選項」>「加密」為止。
  3. 在「Encryption」(加密) 下方,選取「Cloud KMS key」(Cloud KMS 金鑰)。
  4. 在「金鑰類型」部分,選取使用 Autokey 的 Cloud KMS,然後按一下「要求新金鑰」。系統會在金鑰成功建立並可供使用時顯示訊息。
  5. 如要完成資料集建立程序,請按一下「建立資料集」。

10. 探索你的車鑰

在這個步驟中,您將前往「金鑰清單」頁面,查看 Cloud KMS Autokey 代您建立的金鑰。「Key Inventory」頁面會提供專案中密碼金鑰的完整資訊。請注意,資料可能會延遲。舉例來說,如果您建立新的受保護資源,系統不會立即將受保護資源和相關的金鑰版本加入「使用情形追蹤」分頁。如要進一步瞭解限制,請參閱這篇文章

  1. 前往 Google Cloud 控制台的「Key Inventory」(金鑰庫存) 頁面
  2. 選用步驟:如要篩選鍵值清單,請在「filter_list」篩選器方塊中輸入搜尋字詞,然後按下 Enter 鍵。舉例來說,您可以依據位置、金鑰環、狀態或其他金鑰屬性進行篩選。
  3. 按一下要查看使用資訊的金鑰名稱。
  4. 按一下「總覽」。請注意,每個已建立的資源都有一個金鑰。每個金鑰名稱都包含金鑰所保護資源名稱 (例如「compute-disk」或「storage-bucket」)。Cloud KMS Autokey 會確保每個金鑰在建立後 365 天內安排輪替,且已為每個金鑰指派「HSM」防護等級。

9acbce68acb653d4.png

  1. 按一下「用量追蹤」分頁標籤。請注意顯示的資訊層級:此處會顯示金鑰加密的每個資源,以及專案、位置和建立日期。
  2. 選用:如要篩選受保護的資源清單,請在 filter_list Filter 方塊中輸入搜尋字詞,然後按下 Enter 鍵。

7def6fe9a023d063.png

11. 恭喜

恭喜!您已成功建立 Google Cloud 資源,並使用 Cloud KMS Autokey 視需要自動加密這些資源!

您現在已瞭解設定 Autokey 的必要步驟,並瞭解如何使用 Autokey 自動使用 Cloud KMS 金鑰加密資源。

12. 接下來要做什麼?

將資料上傳至 Autokey 加密的資源

參考文件