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

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

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

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

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

受 CMEK 保護的內容

您可以設定 CMEK,以便加密經過下列 Eventarc Advanced 資源的事件訊息:

  • 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 加密者/解密者 角色授予服務帳戶。如需更多資訊,請參閱本文件中的「為匯流排啟用 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. 在「Bus details」(巴士詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit bus」頁面中,針對「Encryption」選取「Cloud KMS key」

  5. 在「Key type」清單中,選取管理金鑰的方法。

    您可以手動管理金鑰,也可以使用 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 或完整修飾 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. 在「Bus details」頁面上,「Encryption」狀態會顯示目前使用的客戶代管加密金鑰。您可以按一下鍵,前往 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. 在「Bus details」(巴士詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit bus」頁面,針對「Encryption」選取「Google-managed encryption key」

  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

  2. 您可以建立管道,如果要更新管道,請按一下管道名稱。

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

  4. 在「編輯管道」頁面中,針對「加密」選取「Cloud KMS 金鑰」

  5. 在「Key type」清單中,選取管理金鑰的方法。

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

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

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

  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

  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

  2. 按一下管道名稱。

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

  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. 在「Bus details」(巴士詳細資料) 頁面中,按一下 「Edit」(編輯)

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

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

  5. 在「Add message source」窗格中,針對 Google API 訊息提供者,接受預設的 google-api-source

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

    1. 在「Key type」清單中,選取管理金鑰的方法。

      您可以手動管理金鑰,也可以使用 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. 在「Bus details」(巴士詳細資料) 頁面中,按一下 「Edit」(編輯)

    系統應會列出用於加密訊息來源的金鑰。您可以按一下鍵,前往 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. 在「Bus details」(巴士詳細資料) 頁面中,按一下 「Edit」(編輯)

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

  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 分鐘才會生效。

  • 考量現有資源

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

  • 驗證設定機構政策所需的權限

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

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

要求新的 Eventarc 資源使用 CMEK

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

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

設定這項政策後,它只會套用至專案中的新資源。任何未套用 Cloud KMS 金鑰的現有資源,都會繼續存在,且可正常存取。

主控台

  1. 在 Google Cloud 控制台中,前往「Organization policies」(機構政策) 頁面。

    前往「機構政策」

  2. 使用「Filter」搜尋下列限制條件:

    constraints/gcp.restrictNonCmekServices
    
  3. 在「Name」(名稱) 欄中,按一下「Restrict which services may create resources without CMEK」(限制哪些服務可以在沒有 CMEK 的情況下建立資源)

  4. 按一下 「管理政策」

  5. 在「Edit policy」(編輯政策) 頁面的「Policy source」(政策來源) 下方,選取「Override parent's policy」(覆寫父項政策)

  6. 在「規則」下方,點選「新增規則」

  7. 在「Policy values」清單中,選取「Custom」

  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 Advanced 管道。除非指定 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. 使用「Filter」搜尋下列限制條件:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. 在「Name」(名稱) 欄中,按一下「Restrict which projects may supply KMS CryptoKeys for CMEK」(限制哪些專案可提供 CMEK 的 KMS CryptoKey)

  4. 按一下 「管理政策」

  5. 在「Edit policy」(編輯政策) 頁面的「Policy source」(政策來源) 下方,選取「Override parent's policy」(覆寫父項政策)

  6. 在「規則」下方,點選「新增規則」

  7. 在「Policy values」清單中,選取「Custom」

  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 Advanced 管道。這項程序將會失敗。

停用及啟用 Cloud KMS 金鑰

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

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

停用 Cloud KMS 金鑰

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

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

重新啟用 Cloud KMS 金鑰

如要恢復事件傳送和路由功能,請恢復 Cloud KMS 存取權

稽核記錄和疑難排解

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

如要解決在 Eventarc 中使用 Cloud KMS 時可能遇到的問題,請參閱疑難排解問題

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

定價

除了金鑰作業費用外,此匯入功能不會產生額外的費用。金鑰作業費用會計入您的 Google Cloud 專案中。如果管道使用 CMEK,您就必須根據 Pub/Sub 定價支付 Cloud KMS 服務的存取費用。

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

後續步驟