使用客戶自行管理的加密金鑰 (CMEK)

根據預設,Eventarc 會加密靜態儲存的客戶內容。Eventarc 會為您處理加密作業,您不必採取任何其他動作。這項做法稱為「Google 預設加密」

如要控管加密金鑰,您可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),搭配 Eventarc 等整合 CMEK 的服務。使用 Cloud KMS 金鑰可讓您控管保護等級、位置、輪換時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 也能查看稽核記錄,以及控管金鑰生命週期。您可以在 Cloud KMS 中控制及管理這些金鑰,而不是由 Google 擁有及管理用來保護您資料的對稱金鑰加密金鑰 (KEK)

使用 CMEK 設定資源後,存取 Eventarc 資源的體驗與使用 Google 預設加密機制類似。如要進一步瞭解加密選項,請參閱客戶管理的加密金鑰 (CMEK)

客戶代管的加密金鑰會以軟體金鑰的形式儲存在 Cloud HSM 叢集中,或透過 Cloud External Key Manager 儲存在外部

受 CMEK 保護的項目

您可以設定 CMEK,加密透過下列 Eventarc 進階資源傳送的事件訊息:

  • MessageBus - Eventarc Advanced 匯流排
  • Pipeline - Eventarc Advanced 管道
  • GoogleApiSource:Eventarc Advanced 資源,代表特定匯流排的 Google API 事件訂閱項目

詳情請參閱 Eventarc Advanced 總覽

為資源啟用 CMEK 後,系統會使用只有您能存取的加密金鑰,保護該區域中與資源相關聯的資料。

Cloud KMS 和 Eventarc 都是地區化服務。Cloud KMS 金鑰和受保護的 Eventarc Advanced 資源必須位於相同區域。

事前準備

如要在 Eventarc 中使用這項功能,請先完成下列動作:

主控台

  1. Enable the Cloud KMS and Eventarc APIs.

    Enable the APIs

  2. 建立金鑰環
  3. 為指定金鑰環建立金鑰

gcloud

  1. 更新 gcloud 元件。
    gcloud components update
  2. 針對要用來儲存加密金鑰的專案,啟用 Cloud KMS 和 Eventarc API。
    gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
  3. 建立金鑰環
  4. 為指定金鑰環建立金鑰

如要瞭解所有旗標和可能的值,請使用 --help 旗標執行指令。

授予 Eventarc 服務帳戶金鑰存取權

如要授予 Eventarc 服務帳戶 Cloud KMS 金鑰的存取權,請將服務帳戶新增為金鑰的主體,並授予服務帳戶 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

主控台

使用 Google Cloud 控制台為匯流排或管道啟用 CMEK 時,系統會提示您將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予服務帳戶。如需更多資訊,請參閱本文中的「為匯流排啟用 CMEK」或「為管道啟用 CMEK」。

gcloud

 gcloud kms keys add-iam-policy-binding KEY_NAME \
     --keyring KEY_RING \
     --location REGION \
     --member serviceAccount:SERVICE_AGENT_EMAIL \
     --role roles/cloudkms.cryptoKeyEncrypterDecrypter

更改下列內容:

  • KEY_NAME:金鑰名稱,例如 my-key
  • KEY_RING:金鑰環的名稱,例如 my-keyring
  • REGION:金鑰位置,例如 us-central1
  • SERVICE_AGENT_EMAIL:具有 eventarc.serviceAgent 角色的服務帳戶電子郵件地址

    例如:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com。詳情請參閱服務代理程式

為匯流排啟用 CMEK

為 Eventarc Advanced 匯流排啟用 CMEK 後,透過匯流排傳送的所有訊息都會以該 CMEK 金鑰完整加密。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 您可以建立巴士,或點選巴士名稱來更新巴士。

  3. 在「匯流排詳細資料」頁面中,按一下「編輯」

  4. 在「編輯匯流排」頁面中,選取「加密」的「Cloud KMS 金鑰」

  5. 在「金鑰類型」清單中,選取金鑰管理方法。

    您可以手動管理金鑰,也可以使用 Autokey 視需要產生金鑰環和金鑰。如果「Autokey」選項停用,表示尚未與目前的資源類型整合。

  6. 在「選取 Cloud KMS 金鑰」清單中,選取金鑰。

  7. 選用:如要手動輸入金鑰的資源名稱,請在「選取 Cloud KMS 金鑰」清單中,按一下「手動輸入金鑰」,然後以指定格式輸入金鑰名稱。

  8. 如果系統提示,請將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Eventarc 服務代理

  9. 按一下 [儲存]

gcloud

使用 gcloud beta eventarc message-buses update 指令為匯流排啟用 CMEK:

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --crypto-key=KEY

更改下列內容:

  • BUS_NAME:公車的 ID 或完整識別碼
  • REGION支援的 Eventarc Advanced 位置
  • KEY:Cloud KMS 金鑰的完整名稱,格式為 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    金鑰的 REGION 必須與要保護的匯流排位置相符。

確認 Cloud KMS 使用情形

確認匯流排現在符合 CMEK 規定。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 按一下您使用 CMEK 保護的匯流排名稱。

  3. 在「匯流排詳細資料」頁面中,「加密」狀態會指出使用的客戶代管加密金鑰。您可以點選金鑰,前往 Security Command Center 查看。

    否則,狀態訊息為 Event messages encrypted using Google-managed encryption keys

gcloud

使用 gcloud beta eventarc message-buses describe 指令描述匯流排:

 gcloud beta eventarc message-buses describe BUS_NAME \
     --location=REGION

畫面會顯示如下的輸出內容:

 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
 updateTime: '2022-06-28T17:24:56.365866104Z'

cryptokeyName 值會顯示用於匯流排的 Cloud KMS 金鑰。

停用匯流排的 CMEK

您可以停用與匯流排相關聯的 CMEK 保護。透過匯流排傳送的事件仍受 Google-owned and Google-managed encryption keys 保護。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 按一下匯流排名稱。

  3. 在「匯流排詳細資料」頁面中,按一下「編輯」

  4. 在「Edit bus」(編輯匯流排) 頁面,選取「Encryption」(加密) 的「Google-managed encryption key」(Google 代管的加密金鑰)

  5. 按一下 [儲存]

gcloud

使用 gcloud beta eventarc message-buses update 指令停用匯流排的 CMEK:

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --clear-crypto-key

為管道啟用 CMEK

為 Eventarc Advanced 管道啟用 CMEK 後,管道傳送的所有訊息都會以該 CMEK 金鑰完整加密。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Pipelines」(管道) 頁面。

    前往 Pipelines

  2. 您可以建立管道,或是點按管道名稱來更新管道。

  3. 在「Pipeline details」(管道詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit pipeline」(編輯管道) 頁面中,選取「Encryption」(加密) 的「Cloud KMS key」(Cloud KMS 金鑰)

  5. 在「金鑰類型」清單中,選取金鑰管理方法。

    您可以手動管理金鑰,也可以使用 Autokey 視需要產生金鑰環和金鑰。如果 Autokey 選項停用,表示尚未與目前的資源類型整合。

  6. 在「選取 Cloud KMS 金鑰」清單中,選取金鑰。

  7. 選用:如要手動輸入金鑰的資源名稱,請在「選取 Cloud KMS 金鑰」清單中,按一下「手動輸入金鑰」,然後以指定格式輸入金鑰名稱。

  8. 如果系統提示,請將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Eventarc 服務代理

  9. 按一下 [儲存]

gcloud

使用 gcloud beta eventarc pipelines update 指令為管道啟用 CMEK:

 gcloud beta eventarc pipelines update PIPELINE_NAME \
     --location=REGION \
     --crypto-key=KEY

更改下列內容:

  • PIPELINE_NAME:管道的 ID 或完整 ID
  • REGION支援的 Eventarc Advanced 位置
  • KEY:Cloud KMS 金鑰的完整名稱,格式為 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    金鑰的 REGION 必須與要保護的管道位置相符。

確認 Cloud KMS 使用情形

確認管道現在符合 CMEK 規定。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Pipelines」(管道) 頁面。

    前往 Pipelines

  2. 按一下您使用 CMEK 保護的管道名稱。

  3. 在「管道詳細資料」頁面中,「加密」狀態會指出使用的客戶代管加密金鑰。您可以點選金鑰,前往 Security Command Center 查看。

    否則,狀態訊息為 Event messages encrypted using Google-managed encryption keys

gcloud

使用 gcloud beta eventarc pipelines describe 指令驗證管道的 CMEK:

 gcloud beta eventarc pipelines describe PIPELINE_NAME \
     --location=REGION

畫面會顯示如下的輸出內容:

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 destinations: ...
 name: projects/PROJECT_ID/locations/REGION/pipelines/PIPELINE_NAME
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值會顯示管道使用的 Cloud KMS 金鑰。

停用管道的 CMEK

您可以停用與管道相關聯的 CMEK 保護機制。透過管道傳送的事件仍受 Google-owned and Google-managed encryption keys 保護。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Pipelines」(管道) 頁面。

    前往 Pipelines

  2. 按一下管道名稱。

  3. 在「Pipeline details」(管道詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit pipeline」(編輯管道) 頁面,選取「Encryption」(加密) 的「Google-managed encryption key」(Google 代管的加密金鑰)

  5. 按一下 [儲存]

gcloud

使用 gcloud beta eventarc pipelines update 指令,為管道停用 CMEK:

gcloud beta eventarc pipelines update PIPELINE_NAME \
    --location=REGION \
    --clear-crypto-key

為 Google API 來源啟用 CMEK

GoogleApiSource 資源啟用 CMEK 後,系統會使用 CMEK 金鑰,為該資源收集的所有訊息進行完整加密。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 您可以建立巴士,或點選巴士名稱來更新巴士。

  3. 在「匯流排詳細資料」頁面中,按一下「編輯」

  4. 如要新增訊息來源,請按一下 「新增來源」

    如果訊息來源已存在,您必須先刪除,然後新增訊息來源。

  5. 在「新增訊息來源」窗格中,針對 Google API 訊息提供者,接受預設值 google-api-source

  6. 在「Encryption」(加密) 中,選取「Cloud KMS key」(Cloud KMS 金鑰),然後執行下列操作:

    1. 在「金鑰類型」清單中,選取金鑰管理方法。

      您可以手動管理金鑰,也可以使用 Autokey 視需要產生金鑰環和金鑰。如果 Autokey 選項停用,表示尚未與目前的資源類型整合。

    2. 在「選取 Cloud KMS 金鑰」中,選取金鑰。

      您必須先選取區域,才能查看客戶自行管理的金鑰。

    3. 選用:如要手動輸入金鑰的資源名稱,請在「選取 Cloud KMS 金鑰」清單中按一下「手動輸入金鑰」,然後以指定格式輸入金鑰名稱。

    4. 如果系統提示,請將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Eventarc 服務代理

  7. 點選「建立」

    啟用這項功能後,系統會自動收集直接來自 Google 來源的事件,且所有事件訊息都會以 CMEK 金鑰完整加密。

    只有與GoogleApiSource位於相同 Google Cloud 專案的資源事件會發布。詳情請參閱「從 Google 來源發布事件」。

  8. 按一下 [儲存]

gcloud

使用 gcloud beta eventarc google-api-sources update 指令,為 GoogleApiSource 資源啟用 CMEK:

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --crypto-key=KEY

更改下列內容:

  • GOOGLE_API_SOURCE_NAMEGoogleApiSource 資源的 ID 或完整 ID
  • REGION支援的 Eventarc Advanced 位置
  • KEY:Cloud KMS 金鑰的完整名稱,格式為 projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

    金鑰的 REGION 必須與要保護的資源位置相符。

確認 Cloud KMS 使用情形

確認資源現在符合 CMEK 規定。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 按一下訊息來源已使用 Cloud KMS 金鑰保護的匯流排名稱。

  3. 在「匯流排詳細資料」頁面中,按一下「編輯」

    系統會列出加密訊息來源的金鑰。您可以點選金鑰,前往 Security Command Center 查看。

    否則,「加密」狀態訊息為 Event messages encrypted using Google-managed encryption keys

gcloud

使用 gcloud beta eventarc google-api-sources describe 指令,驗證 GoogleApiSource 資源的 CMEK:

  gcloud beta eventarc google-api-sources describe GOOGLE_API_SOURCE_NAME \
      --location=REGION

畫面會顯示如下的輸出內容:

  createTime: '2022-06-28T18:05:52.403999904Z'
  cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
  destination: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
  name: projects/PROJECT_ID/locations/REGION/googleApiSources/GOOGLE_API_SOURCE_NAME
  uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
  updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值會顯示管道使用的 Cloud KMS 金鑰。

停用 Google API 來源的 CMEK

您可以停用與 Google API 來源相關聯的 CMEK 保護機制。透過 GoogleApiSource 資源收集的事件仍受 Google-owned and Google-managed encryption keys 保護。

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Bus」(匯流排) 頁面。

    前往「Bus」(匯流排) 頁面

  2. 按一下訊息來源已使用 CMEK 保護的匯流排名稱。

  3. 在「匯流排詳細資料」頁面中,按一下「編輯」

  4. 如要刪除以 Cloud KMS 金鑰加密的訊息來源,請按一下 「刪除資源」

  5. 如有需要,請重新新增訊息來源。

gcloud

使用 gcloud beta eventarc google-api-sources update 指令,為 GoogleApiSource 資源停用 CMEK:

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --clear-crypto-key

套用 CMEK 機構政策

Eventarc 整合了兩項組織政策限制,可協助確保整個機構使用 CMEK:

  • constraints/gcp.restrictNonCmekServices 用於要求 CMEK 保護措施。
  • constraints/gcp.restrictCmekCryptoKeyProjects 用於限制用於 CMEK 保護措施的 Cloud KMS 金鑰。

這項整合功能可讓您為機構中的 Eventarc 資源指定下列加密法規遵循需求:

套用機構政策的注意事項

套用任何 CMEK 組織政策前,請先瞭解下列事項。

  • 為傳播延遲做好準備

    設定或更新機構政策後,新政策最多可能需要 15 分鐘才會生效。

  • 考量現有資源

    現有資源不受新建立的機構政策影響。 舉例來說,機構政策不會追溯套用至現有管道。您仍可存取這些資源,且如果適用,系統仍會使用現有金鑰加密。

  • 確認設定機構政策的必要權限

    為測試目的設定或更新機構政策的權限可能難以取得。您必須獲授予機構政策管理員角色,這個角色只能在機構層級授予 (而非專案或資料夾層級)。

    雖然必須在機構層級授予角色,但仍可指定僅適用於特定專案或資料夾的政策。

要求新 Eventarc 資源使用 CMEK

您可以使用 constraints/gcp.restrictNonCmekServices 限制,要求使用 CMEK 保護機構中的新 Eventarc 資源。

如果設定這項機構政策,所有未指定 Cloud KMS 金鑰的資源建立要求都會失敗。

設定這項政策後,只會套用至專案中的新資源。如果現有資源未套用 Cloud KMS 金鑰,這些資源仍會存在,且可正常存取。

主控台

  1. 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。

    前往「機構政策」

  2. 使用「篩選器」搜尋下列限制:

    constraints/gcp.restrictNonCmekServices
    
  3. 在「名稱」欄中,按一下「限制哪些服務可以在沒有 CMEK 的情況下建立資源」

  4. 按一下「管理政策」圖示

  5. 在「編輯政策」頁面的「政策來源」下方,選取「覆寫父項政策」

  6. 在「規則」下方,按一下「新增規則」

  7. 在「政策值」清單中,選取「自訂」

  8. 在「政策類型」清單中,選取「拒絕」

  9. 在「自訂值」欄位中輸入下列內容:

    is:eventarc.googleapis.com
    
  10. 依序按一下「完成」和「設定政策」

gcloud

  1. 建立暫存檔案 /tmp/policy.yaml 來儲存政策:

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:eventarc.googleapis.com

    PROJECT_ID 替換為要套用這項限制的專案 ID。

  2. 請執行 org-policies set-policy 指令。

    gcloud org-policies set-policy /tmp/policy.yaml

如要確認政策是否已成功套用,請嘗試在專案中建立 Eventarc 進階管道。除非指定 Cloud KMS 金鑰,否則程序會失敗。

限制 Eventarc 專案的 Cloud KMS 金鑰

您可以使用 constraints/gcp.restrictCmekCryptoKeyProjects 限制,禁止在 Eventarc 專案中使用特定 Cloud KMS 金鑰保護資源。

舉例來說,您可以指定類似下列的規則:「對於 projects/my-company-data-project 中適用的 Eventarc 資源,這個專案中使用的 Cloud KMS 金鑰必須來自 projects/my-company-central-keysprojects/team-specific-keys。」

主控台

  1. 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。

    前往「機構政策」

  2. 使用「篩選器」搜尋下列限制:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. 在「名稱」欄中,按一下「限制哪些專案可提供 CMEK 的 KMS CryptoKey」

  4. 按一下「管理政策」圖示

  5. 在「編輯政策」頁面的「政策來源」下方,選取「覆寫父項政策」

  6. 在「規則」下方,按一下「新增規則」

  7. 在「政策值」清單中,選取「自訂」

  8. 在「政策類型」清單中,選取「允許」

  9. 在「自訂值」欄位中輸入下列內容:

    under:projects/KMS_PROJECT_ID
    

    KMS_PROJECT_ID 替換為您要使用的 Cloud KMS 金鑰所在專案的 ID。

    例如 under:projects/my-kms-project

  10. 依序按一下「完成」和「設定政策」

gcloud

  1. 建立暫存檔案 /tmp/policy.yaml 來儲存政策:

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    取代下列項目

    • PROJECT_ID:您要套用這項限制的專案 ID。
    • KMS_PROJECT_ID:您要使用的 Cloud KMS 金鑰所在專案的 ID。
  2. 請執行 org-policies set-policy 指令。

    gcloud org-policies set-policy /tmp/policy.yaml

如要確認政策是否已順利套用,您可以嘗試使用其他專案的 Cloud KMS 金鑰,建立 Eventarc 進階管道。程序會失敗。

停用及啟用 Cloud KMS 金鑰

金鑰版本會儲存加密編譯金鑰內容,用於加密、解密、簽署及驗證資料。您可以停用這個金鑰版本,這樣就無法存取以該金鑰加密的資料。

如果 Eventarc 無法存取 Cloud KMS 金鑰,事件路由作業就會失敗並顯示 FAILED_PRECONDITION 錯誤,事件傳送作業也會停止。您可以啟用「已停用」狀態的金鑰,以便再次存取加密資料。

停用 Cloud KMS 金鑰

如要防止 Eventarc 使用金鑰加密或解密事件資料,請執行下列任一操作:

雖然這兩項作業都無法保證立即撤銷存取權,但 Identity and Access Management (IAM) 變更通常會更快傳播。詳情請參閱「Cloud KMS 資源一致性」和「存取權變更傳播」。

重新啟用 Cloud KMS 金鑰

如要恢復事件傳送和路由,請還原 Cloud KMS 的存取權

稽核記錄和疑難排解

當金鑰啟用、停用,或由 Eventarc 進階版資源用於加密及解密訊息時,Cloud KMS 會產生稽核記錄。詳情請參閱 Cloud KMS 稽核記錄資訊

如要解決使用 Cloud KMS 和 Eventarc 時可能遇到的問題,請參閱「排解問題」。

如要解決透過 Cloud External Key Manager (Cloud EKM) 使用外部代管金鑰時可能發生的問題,請參閱 Cloud EKM 錯誤參考資料

定價

除了金鑰作業費用外,匯流排整合功能不會產生額外的費用。金鑰作業費用會計入您的 Google Cloud 專案中。管道使用 CMEK 時,存取 Cloud KMS 服務會產生費用,費用依據 Pub/Sub 定價計算。

如要進一步瞭解最新定價資訊,請參閱 Cloud KMS 定價

後續步驟