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 值區
軟硬體需求
- Google Cloud 機構
- 您的 Google Cloud 主體必須具備機構層級的下列角色,才能完成這個研究室:
- Cloud KMS Autokey 管理員 (roles/cloudkms.autokeyAdmin)
- 資料夾 IAM 管理員 (roles/resourcemanager.folderIamAdmin)
- 帳單帳戶使用者 (roles/billing.user)
- 已啟用帳單的 Google Cloud 專案
- 基本 Linux 體驗
2. 建立資料夾
資料夾為 Cloud Platform 資源階層中的節點。資料夾可包含專案、其他資料夾,或兩者兼具。在階層結構中的機構資源節點下,機構資源可以利用資料夾將專案分門別類。要建立資料夾:
- 選取標準資料夾
- 在「Folder name」(資料夾名稱) 方塊中輸入新資料夾的名稱。在本研究室中,請考慮使用「Autokey-Folder」
- 按一下「目的地」下方的「瀏覽」,然後選取要在其中建立新資料夾的機構資源或資料夾。
- 按一下「建立」。
3. 建立資源專案
請務必建立包含資源 (例如 BigQuery 資料集、永久磁碟和 Cloud Storage 值區) 的資源專案,以便使用 Cloud KMS Autokey 加密。如果您嘗試在金鑰專案中建立受 Autokey 保護的資源,Autokey 會拒絕新金鑰的要求。如要建立資源專案,請按照下列步驟操作:
- 在頁面頂端的 [選取機構] 下拉式清單中,選取 [自動資料夾資料夾]資料夾。
- 在顯示的「New Project」視窗中,輸入專案名稱並選取適當的帳單帳戶。在本研究室中,請考慮使用「Autokey Encrypted Resources」
- 在「位置」方塊中,選取「自動資料夾資料夾」資料夾。該資源會成為新專案的階層父項。設定內容應該會類似這樣:
- 複製專案 ID。在上述範例中,專案 ID 為「causal-hour-43319-m4」但你的 ID 會儲存於你選用的文字編輯器
- 點選 [建立]
- 選取畫面右上角的 Cloud Shell 圖示
- Cloud Shell 啟用後,請執行下列指令,將您的 Autokey 專案 ID 儲存為變數:
export RESOURCE_PROJECT=<paste your Resource Project ID>
因為我的專案 ID 是「key-management-433319」我的指令如下所示:
export AUTOKEY_PROJECT=causal-hour-43319-m4
- 執行下列指令,從金鑰專案執行指令:
gcloud config set project $RESOURCE_PROJECT
系統提示時,點選「授權」來授權 Cloud Shell
- 由於這項專案會包含資源,因此我們必須為 Autokey 保護的服務啟用相關 API。執行下列指令:
gcloud services enable storage.googleapis.com bigquery.googleapis.com compute.googleapis.com
4. 建立金鑰專案
建議您建立專案,納入 Autokey 建立的 Cloud KMS 資源。這稱為「金鑰專案」。您可以在要啟用 Autokey 的同一個資料夾中建立金鑰專案。請勿在金鑰專案中建立其他資源。如果您嘗試在金鑰專案中建立受 Autokey 保護的資源,Autokey 會拒絕新金鑰的要求。如要建立金鑰專案,請按照下列步驟操作:
- 在頁面頂端的 [選取機構] 下拉式清單中,選取 [自動資料夾資料夾]資料夾。
- 在顯示的「New Project」視窗中,輸入專案名稱並選取適當的帳單帳戶。在本研究室中,請考慮使用「金鑰管理」
- 在「位置」方塊中,選取「自動資料夾資料夾」資料夾。該資源會成為新專案的階層父項。設定內容應該會類似這樣:
- 複製專案 ID。在上述範例中,專案 ID 為「key-management-433319」但你的 ID 會儲存於你選用的文字編輯器
- 按一下「建立」。
5. 準備 Autokey 專案
每個專案都已建立完成,接著請設定金鑰專案以使用 Cloud KMS Autokey。
- 選取畫面右上角的 Cloud Shell 圖示
- Cloud Shell 啟用後,請執行下列指令,將您的 Autokey 專案 ID 儲存為變數:
export AUTOKEY_PROJECT=<paste your Autokey Project ID>
因為我的專案 ID 是「key-management-433319」我的指令如下所示:
export AUTOKEY_PROJECT=key-management-433319
- 執行下列指令,從金鑰專案執行指令:
gcloud config set project $AUTOKEY_PROJECT
系統提示時,點選「授權」來授權 Cloud Shell
- 執行下列指令來啟用 Cloud KMS API
gcloud services enable cloudkms.googleapis.com kmsinventory.googleapis.com
- 執行下列指令,將專案編號儲存為 AUTOKEY_PROJECT_NUMBER 變數
export AUTOKEY_PROJECT_NUMBER=$(gcloud projects list \
--filter="$(gcloud config get-value project)" \
--format="value(PROJECT_NUMBER)")
- 執行下列指令,將主體的電子郵件儲存為變數:
export KEY_ADMIN_EMAIL=<paste your Principal's email>
- 將金鑰專案的 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 管理員權限,才能建立及指派金鑰。
- 使用下列指令找出機構 ID:
gcloud organizations list | grep -P -i 'ID:' | grep -i '[0-9]'
- 複製機構 ID,這是以紅色醒目顯示的數字結果
- 將機構 ID 儲存為名為 ORG_ID 的變數:
export ORG_ID=<paste your Organization ID>
- 執行下列指令,建立 Cloud KMS 服務代理:
gcloud beta services identity create --service=cloudkms.googleapis.com \
--project=$AUTOKEY_PROJECT_NUMBER
- 將 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
- 新增 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'
- 將機構資源中的 Cloud KMS 機構服務代理 (cloudkms.orgServiceAgent) 角色授予 Cloud KMS 服務帳戶。
gcloud organizations add-iam-policy-binding $ORG_ID \
--member="serviceAccount:service-org-$ORG_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
--role='roles/cloudkms.orgServiceAgent'
- 將您機構資源的 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。
- 請使用下列指令尋找資料夾 ID:
gcloud projects describe $AUTOKEY_PROJECT | grep 'id' | grep -P -i '[0-9]+'
- 複製資料夾 ID:這是以紅色醒目顯示的部分
- 將資料夾 ID 儲存為名為 FOLDER_ID 的變數
export FOLDER_ID=<paste the folder ID>
為配合本研究室的學習目標,我們會將主要管理員定義為 Autokey 使用者。不過,如果是在正式環境使用,或在有多人的機構中,主要管理員必須與使用 Autokey 的開發人員不同。
- 在資料夾層級授予 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。
- 前往 Google Cloud 控制台中的 KMS 控制項頁面。
- 按一下「選取資料夾」
- 在內容挑選器中,選取要啟用 Autokey 的資料夾。也就是您先前建立的資料夾,內含您的資源專案和金鑰管理專案。看起來應該像這樣:
- 按一下「啟用」。
- 點選「瀏覽」,選取金鑰專案
- 選取金鑰管理專案,然後按一下「提交」。
系統會顯示訊息,確認資料夾已啟用 Cloud KMS Autokey。KMS 控制項頁面應如下所示:
9. 使用 Cloud KMS Autokey 建立受保護的資源
Compute Engine 永久磁碟
Autokey 會針對要建立的資源位於相同位置,為每個磁碟、映像檔和機器映像檔建立新的金鑰。
如要建立磁碟,請完成下列步驟:
- 在「金鑰類型」部分,選取使用 Autokey 的 Cloud KMS,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立並可供使用。
- 如要完成磁碟建立程序,請點選「建立」。
您可以按照類似的程序建立受保護的 VM 執行個體、映像檔和機器映像檔資源。
Google Cloud Storage 值區
Autokey 在與值區相同的位置中建立新的金鑰。Autokey 建立的金鑰會指派為值區預設金鑰。
Autokey 不會為物件建立鍵。根據預設,在值區中建立的物件會使用值區預設金鑰。如果您想以值區預設金鑰以外的金鑰加密物件,可以手動建立 CMEK,並在建立物件時使用該金鑰。
- 按一下「選擇保護物件資料的方式」展開這個部分
- 展開「資料加密」專區,然後選取 Cloud KMS 金鑰。
- 在「金鑰類型」部分,選取使用 Autokey 的 Cloud KMS,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立並可供使用。
- 如要完成值區建立程序,請點選「建立」。如果出現提示訊息,說明「系統會禁止公開存取」按一下「確認」。
BigQuery 資料集
Autokey 會在與資源本身相同的位置,針對每個新資料集建立新索引鍵,並成為資料集預設金鑰。Autokey 不會為資料表、查詢、臨時資料表或模型建立鍵。根據預設,這些資源會受到資料集預設金鑰的保護。如要以資料集預設金鑰以外的金鑰保護資料集內的資源,您可以手動建立 CMEK,並在建立資源時使用該金鑰。
如要建立 BigQuery 資料集,您必須先具備 BigQuery 使用者角色。
- 返回 Cloud Shell
- 設定 Cloud Shell 以執行資源專案中的指令
gcloud config set project $RESOURCE_PROJECT
- 執行下列指令,將專案編號儲存為名為 RESOURCE_PROJECT_NUMBER 的變數
export RESOURCE_PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
- 將 BigQuery 使用者角色授予自己
gcloud projects add-iam-policy-binding $RESOURCE_PROJECT_NUMBER \
--role=roles/bigquery.user \
--member=user:$KEY_ADMIN_EMAIL
您已具備 BigQuery 使用者角色,因此可以開始建立資料集,並使用 Autokey 加以保護!
- 前往 Google Cloud 控制台的「BigQuery」頁面。
- 請按照操作說明建立資料集,直到進入「進階選項」為止 >加密。
- 在「加密」下方,選取 Cloud KMS 金鑰。
- 在「金鑰類型」部分,選取使用 Autokey 的 Cloud KMS,然後按一下「要求新金鑰」。畫面上會顯示訊息,指出金鑰已成功建立並可供使用。
- 如要完成資料集建立程序,請按一下「建立資料集」。
10. 探索鑰匙
在這個步驟中,您將前往「Key Inventory」頁面,探索為您建立的 Cloud KMS Autokey 金鑰。「Key Inventory」頁面提供專案中加密編譯金鑰的完整資訊。請注意,資料可能會延遲顯示。舉例來說,如果您建立新的受保護的資源,系統就不會將受保護的資源和相關金鑰版本立即新增至「用量追蹤」分頁。詳情請參閱這裡的限制。
- 前往 Google Cloud 控制台的「Key Inventory」(金鑰庫存) 頁面。
- 選用:如要篩選鍵清單,請在 filter_list 篩選器方塊中輸入搜尋字詞,然後按下 Enter 鍵。舉例來說,您可以依據位置、金鑰環、狀態或其他金鑰屬性進行篩選。
- 按一下您要查看用量資訊的金鑰名稱。
- 按一下「總覽」。請注意,每個已建立的資源都有一個金鑰。每個金鑰名稱都包含金鑰所保護資源名稱 (例如「compute-disk」或「storage-bucket」)。Cloud KMS Autokey 會確保每個金鑰在建立後 365 天內安排輪替,且已為每個金鑰指派「HSM」防護等級。
- 按一下「使用情況追蹤」分頁標籤。請注意顯示的資訊層級:這裡會顯示金鑰正在加密的各項資源、專案、位置和建立日期。
- 選用:如要篩選受保護的資源清單,請在 filter_list Filter 方塊中輸入搜尋字詞,然後按下 Enter 鍵。
11. 恭喜
恭喜!您已成功建立 Google Cloud 資源,並使用 Cloud KMS Autokey 視需要自動加密這些資源!
您已瞭解設定 Autokey 所需的重要步驟,並透過 Cloud KMS 金鑰自動加密資源。
12. 接下來要做什麼?
將資料上傳至 Autokey 加密資源
- 建立 Google Compute Engine (GCE) 執行個體
- 將受 Autokey 保護的永久磁碟連接至 GCE 執行個體
- 將資料上傳至 BigQuery 資料集
- 將物件上傳至 Google Cloud Storage 值區
- 將 Google Cloud Storage 資料載入 BigQuery