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

根據預設,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 儲存在外部

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

受 CMEK 保護的項目

您可以為 Eventarc Standard 使用的管道設定 CMEK,並加密透過管道傳送的事件。啟用 CMEK 的管道會使用只有您能存取的加密金鑰,保護相關聯的資料。

在 Google Cloud 專案中為 Google 管道啟用 CMEK 時,該專案和區域中所有 Google 事件類型的 Eventarc Standard 觸發程序,都會以該 CMEK 金鑰完全加密。CMEK 金鑰無法套用至每個觸發程序。

事前準備

在 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 旗標執行指令。

Terraform

  1. 針對要用來儲存加密金鑰的專案,透過設定 google_project_service 資源啟用 Cloud KMS 和 Eventarc API:

    # Enable Cloud KMS API
    resource "google_project_service" "cloudkms" {
      service            = "cloudkms.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
  2. 設定 google_kms_key_ringgoogle_kms_crypto_key 資源,建立金鑰環和金鑰:

    resource "random_id" "default" {
      byte_length = 8
    }
    
    # Create a Cloud KMS key ring
    resource "google_kms_key_ring" "default" {
      name     = "${random_id.default.hex}-example-keyring"
      location = "us-central1"
    }
    
    # Create a Cloud KMS key
    resource "google_kms_crypto_key" "default" {
      name            = "example-key"
      key_ring        = google_kms_key_ring.default.id
      rotation_period = "7776000s"
    }

如要進一步瞭解如何使用 Terraform,請參閱 Terraform on Google Cloud 說明文件。

請注意,Cloud KMS 和 Eventarc 都是區域化服務。Cloud KMS 金鑰和受保護 Eventarc 通道的區域必須相同。

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

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

主控台

透過主控台為 Google 或第三方管道啟用 CMEK 時,系統會提示您將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予服務帳戶。如需更多資訊,請參閱本文中的「為 Google 事件類型啟用 CMEK」或「為第三方事件管道啟用 CMEK」。

gcloud

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

更改下列內容:

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

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

Terraform

  1. 設定 google_project_service_identity 資源,為 Eventarc 服務產生服務身分:

    resource "google_project_service_identity" "eventarc_sa" {
      provider = google-beta
      project  = data.google_project.default.project_id
      service  = "eventarc.googleapis.com"
    }
  2. 設定 google_kms_crypto_key_iam_member 資源,將 Cloud KMS 角色授予 Eventarc 服務帳戶:

    # Grant service account access to Cloud KMS key
    resource "google_kms_crypto_key_iam_member" "default" {
      crypto_key_id = google_kms_crypto_key.default.id
      role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
      member        = "serviceAccount:${google_project_service_identity.eventarc_sa.email}"
    }

為 Google 事件類型啟用 CMEK

Eventarc 觸發條件會將 Google 事件類型路徑發布至稱為「Google 管道」的虛擬管道,該管道專屬於特定專案和區域。所有 Eventarc 區域都提供這個虛擬管道。

在 Google Cloud 專案中為 Google 管道啟用 CMEK 時,該專案和區域中所有 Google 事件類型的 Eventarc 觸發條件,都會以該 CMEK 金鑰完全加密。您可以新增多個 CMEK 金鑰,並將每個金鑰與 Google 管道的特定區域建立關聯。CMEK 金鑰無法以觸發條件為單位套用。

主控台

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

    前往「Channels」(頻道)

  2. 按一下有 Google 供應商的頻道。

  3. 在「編輯管道」頁面中,選取「使用客戶管理的加密金鑰 (CMEK)」核取方塊。

  4. 按一下「新增加密金鑰」

  5. 選取「區域」,然後在「CMEK 加密金鑰」清單中,選取您為該區域建立的金鑰環。請注意,每個區域的頻道只能新增一個加密金鑰。

  6. 選用:如要手動輸入金鑰的資源名稱,請在「CMEK 加密金鑰」清單中,按一下「找不到您的金鑰嗎?輸入金鑰資源名稱,並以指定格式輸入金鑰名稱。

  7. 如果系統提示,請將 cloudkms.cryptoKeyEncrypterDecrypter 角色指派給 Eventarc 服務帳戶,並使用 eventarc.serviceAgent 角色。

  8. 選用:按一下「新增加密金鑰」,即可新增您為其他區域建立的金鑰環。

  9. 按一下 [儲存]

gcloud

 gcloud eventarc google-channels update \
     --location=LOCATION \
     --crypto-key=KEY

更改下列內容:

  • LOCATION:要保護的 Google 頻道區域。必須與所用金鑰的位置相符。請注意,每個區域的頻道只能新增一個加密金鑰。
  • :Cloud KMS 金鑰的完整名稱,格式為 projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAMEKEY

Terraform

在特定專案和位置中,設定 google_eventarc_google_channel_config 資源,為 GoogleChannelConfig 資源啟用 CMEK:

# Specify a CMEK key for the `GoogleChannelConfig` resource
resource "google_eventarc_google_channel_config" "default" {
  location        = "us-central1"
  name            = "googleChannelConfig"
  crypto_key_name = google_kms_crypto_key.default.id
  depends_on      = [google_kms_crypto_key_iam_member.default]
}

REST

您可以使用 projects.locations.updateGoogleChannelConfig 方法更新 GoogleChannelConfig 資源,並為特定專案和位置指定 CMEK 金鑰。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:要保護的 Google 管道區域。必須與所用金鑰的位置相符,例如 us-central1。請注意,每個區域的頻道只能新增一個加密金鑰。
  • KEY_NAME:金鑰名稱,例如 my-key
  • RING_NAME:金鑰環的名稱,例如 my-keyring

JSON 要求主體:

{
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含更新後的 GoogleChannelConfig 例項:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig",
  "updateTime": "2025-03-05T17:56:54.106390447Z",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

如果您要使用現有主題建立 Pub/Sub 觸發條件,建議您也為主題設定 KMS 金鑰,以提供全面的 CMEK 保護。詳情請參閱「設定 Pub/Sub 主題」。

確認 Cloud KMS 使用情形

如要確認頻道現在是否符合 CMEK 規定,請按照下列步驟操作:

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Triggers」(觸發條件) 頁面。

    前往「Triggers」(觸發條件)

  2. 按一下列出 Google Cloud 來源的觸發條件,該來源是您使用 CMEK 保護的「事件供應商」和「區域」

  3. 在「觸發條件詳細資料」頁面中,系統會顯示「加密」狀態和訊息 Events encrypted using Customer-managed encryption keys

gcloud

如要確認 CMEK 金鑰,可以使用 google-channels describe 指令。

 gcloud eventarc google-channels describe \
     --location=LOCATION

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

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

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

Terraform

如要確認 CMEK 金鑰,可以使用 Terraform state show 指令。

terraform state show google_eventarc_google_channel_config.default

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

# google_eventarc_google_channel_config.default:
resource "google_eventarc_google_channel_config" "default" {
    crypto_key_name = "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
    id              = "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig"
    location        = "LOCATION"
    name            = "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig"
    project         = "PROJECT_ID"
    update_time     = "2025-03-24T17:15:08.809635011Z"
}

REST

如要確認 CMEK 金鑰,可以使用 projects.locations.getGoogleChannelConfig 方法擷取 GoogleChannelConfig 資源。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:受保護 Google 頻道的區域

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含 GoogleChannelConfig 的執行個體:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig",
  "updateTime": "2025-03-05T17:56:54.106390447Z",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

為第三方管道啟用 CMEK

第三方 Eventarc 管道是一種資源,可供提供 Eventarc 來源的非Google Cloud 實體與目的地互動。這個管道專屬於特定地區,每個第三方管道只能新增一個金鑰。

如要為第三方管道啟用 CMEK,請按照下列步驟操作:

主控台

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

    前往「Channels」(頻道)

  2. 按一下有第三方「供應商」的頻道。

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

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

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

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

  6. 在「選取 Cloud KMS 金鑰」清單中,選取金鑰。請注意,每個區域的頻道只能新增一個加密金鑰。

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

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

  9. 按一下 [儲存]

gcloud

 gcloud eventarc channels update CHANNEL_NAME \
     --location=LOCATION \
     --crypto-key=KEY

更改下列內容:

  • CHANNEL_NAME:第三方頻道的名稱。 如要建立新的第三方頻道,請參閱「建立頻道」。
  • LOCATION:要保護的第三方管道區域。必須與金鑰位置相符。
  • KEY:Cloud KMS 金鑰的完整名稱,格式為 projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

Terraform

如要為第三方管道指定 CMEK 金鑰,請設定 google_eventarc_channel 資源。例如:

resource "google_eventarc_channel" "default" {
  location        = "us-central1"
  name            = "CHANNEL_NAME"
  crypto_key_name = google_kms_crypto_key.default.id
}

CHANNEL_NAME 替換為第三方頻道的名稱。

REST

您可以使用 projects.locations.channels.patch 方法更新 Channel 資源,並為特定專案和位置指定 CMEK 金鑰。

使用任何要求資料之前,請先替換以下項目:

  • CHANNEL_NAME:頻道名稱。
  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:要保護的頻道區域。必須與所用金鑰的位置相符,例如 us-central1。請注意,每個區域的頻道只能新增一個加密金鑰。
  • KEY_NAME:金鑰名稱,例如 my-key
  • RING_NAME:金鑰環的名稱,例如 my-keyring

JSON 要求主體:

{
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含新建立的 Operation 例項:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/channels/CHANNEL_NAME",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

確認 Cloud KMS 使用情形

如要確認頻道現在是否符合 CMEK 規定,請按照下列步驟操作:

主控台

  1. 在 Google Cloud 控制台中,依序前往「Eventarc」>「Triggers」(觸發條件) 頁面。

    前往「Triggers」(觸發條件)

  2. 按一下以第三方來源做為「事件供應商」的觸發條件,以及您使用 CMEK 保護的「區域」

  3. 在「觸發條件詳細資料」頁面中,「加密」的狀態會顯示訊息 Events encrypted using Customer-managed encryption keys

gcloud

 gcloud eventarc channels describe CHANNEL_NAME \
     --location=LOCATION

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

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/LOCATION/googleChannelConfig
 pubsubTopic: projects/PROJECT_ID/topics/PUBSUB_TOPIC_ID
 state: ACTIVE
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 值會顯示用於第三方頻道的 Cloud KMS 金鑰。

Terraform

如要確認 CMEK 金鑰,可以使用 Terraform state show 指令。

terraform state show google_eventarc_channel.default

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

# google_eventarc_channel.default:
resource "google_eventarc_channel" "default" {
create_time     = "2025-03-31T13:07:44.721274062Z"
crypto_key_name = "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
id              = "projects/PROJECT_ID/locations/LOCATION/channels/CHANNEL_NAME"
location        = "LOCATION"
name            = "CHANNEL_NAME"
project         = "PROJECT_ID"
pubsub_topic    = "projects/PROJECT_ID/topics/PUBSUB_TOPIC_ID"
state           = "ACTIVE"
uid             = "406302e9-1d41-4479-8f4f-2524a803790e"
update_time     = "2025-03-31T13:07:49.708241490Z"
}

REST

如要確認頻道的 CMEK 金鑰,可以使用 projects.locations.channels.get 方法擷取 Channel 資源。

使用任何要求資料之前,請先替換以下項目:

  • CHANNEL_NAME:頻道名稱。
  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:受保護頻道的區域

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含 Channel 的執行個體:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/channels/CHANNEL_NAME",
  "uid": "12f941a6-196a-457b-bfdb-ca21138859d0",
  "createTime": "2025-01-29T15:05:12.113912689Z",
  "updateTime": "2025-01-29T15:05:17.210986285Z",
  "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
  "state": "ACTIVE",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

顯示頻道使用的金鑰

您可以說明 Eventarc 管道,並顯示管道使用的 Cloud KMS 金鑰。

主控台

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

    前往「Channels」(頻道)

  2. 按一下頻道名稱。

  3. 系統會顯示用於管道的任何 CMEK 加密金鑰。

gcloud

根據管道類型執行下列指令:

Google 管道

gcloud eventarc google-channels describe \
    --location=LOCATION

第三方管道

gcloud eventarc channels describe CHANNEL_NAME \
    --location=LOCATION

輸出內容應包含類似以下的行:

cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

cryptoKeyName 值會顯示用於管道的 Cloud KMS 金鑰。

Terraform

根據管道類型執行下列指令:

Google 管道

terraform state show google_eventarc_google_channel_config.default

第三方管道

terraform state show google_eventarc_channel.default

輸出內容應包含類似以下的行:

crypto_key_name= "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"

crypto_key_name 值會顯示用於管道的 Cloud KMS 金鑰。

REST

根據管道類型提出下列要求:

Google 管道

如要確認特定專案和位置的 CMEK 金鑰,可以使用 projects.locations.getGoogleChannelConfig 方法擷取 GoogleChannelConfig 資源。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:受保護 Google 頻道的區域

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含 GoogleChannelConfig 的執行個體:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig",
  "updateTime": "2025-03-05T17:56:54.106390447Z",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

第三方管道

如要確認特定專案和位置的 CMEK 金鑰,可以使用 projects.locations.channels.get 方法擷取 Channel 資源。

使用任何要求資料之前,請先替換以下項目:

  • CHANNEL_NAME:頻道名稱。
  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:受保護頻道的區域

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含 Channel 的執行個體:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/channels/CHANNEL_NAME",
  "uid": "12f941a6-196a-457b-bfdb-ca21138859d0",
  "createTime": "2025-01-29T15:05:12.113912689Z",
  "updateTime": "2025-01-29T15:05:17.210986285Z",
  "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
  "state": "ACTIVE",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

停用 CMEK

您可以停用與頻道相關聯的 CMEK 保護機制。透過這類管道傳送的事件仍會受到 Google-owned and Google-managed encryption keys 保護。如要刪除與頻道相關聯的 CMEK 保護措施,請按照下列步驟操作:

主控台

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

    前往「Channels」(頻道)

  2. 請根據頻道類型完成下列步驟:

    Google 管道

    1. 按一下有 Google 供應商的頻道。
    2. 在「編輯頻道」頁面中,將指標懸停在「CMEK 加密金鑰」清單上,即可看到「刪除項目」按鈕
    3. 按一下「刪除項目」
    4. 按一下 [儲存]

      您可能需要重新整理頁面,才能啟用「使用客戶自行管理的加密金鑰 (CMEK)」核取方塊。

    第三方管道

    1. 按一下有第三方「供應商」的頻道。
    2. 在「頻道詳細資料」頁面中,按一下 「編輯」
    3. 在「Edit channel」(編輯管道) 頁面,選取「Encryption」(加密) 的「Google-managed encryption key」(Google 代管的加密金鑰)
    4. 按一下 [儲存]

gcloud

根據管道類型執行下列指令:

Google 管道

gcloud eventarc google-channels \
    update --clear-crypto-key

第三方管道

gcloud eventarc channels CHANNEL_NAME \
    update --clear-crypto-key

Terraform

根據管道類型,在設定 Terraform 資源時不要指定 crypto_key_name 值,即可清除該值:

Google 管道

resource "google_eventarc_google_channel_config" "default" {
  location        = "us-central1"
  name            = "googleChannelConfig"
}

第三方管道

resource "google_eventarc_channel" "default" {
  location        = "us-central1"
  name            = "CHANNEL_NAME"
}

REST

根據管道類型提出下列要求:

Google 管道

如要刪除 CMEK 金鑰,請使用 projects.locations.updateGoogleChannelConfig 方法,更新特定專案和位置的 GoogleChannelConfig 資源。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:要保護的受保護 Google 頻道區域

JSON 要求主體:

{
  "cryptoKeyName": ""
}

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含更新後的 GoogleChannelConfig 例項:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig",
  "updateTime": "2025-03-05T17:56:54.106390447Z"
}

第三方管道

如要刪除 CMEK 金鑰,可以使用 projects.locations.channels.patch 方法,更新指定專案和位置的 Channel 資源。

使用任何要求資料之前,請先替換以下項目:

  • CHANNEL_NAME:頻道名稱。
  • PROJECT_ID:您的 Google Cloud專案 ID。
  • LOCATION:受保護頻道的區域

JSON 要求主體:

{
  "cryptoKeyName": ""
}

如要傳送要求,請展開以下其中一個選項:

如果成功,回應主體會包含新建立的 Operation 例項:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/channels/CHANNEL_NAME",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

套用 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 Standard 管道。程序會失敗。

停用及啟用 Cloud KMS 金鑰

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

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

停用 Cloud KMS 金鑰

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

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

重新啟用 Cloud KMS 金鑰

如要恢復事件傳送和發布作業,請還原 Cloud KMS 的存取權

定價

除了金鑰作業費用外,此整合功能不會產生額外的費用。金鑰作業費用會計入您的 Google Cloud專案中。為管道啟用 CMEK 時,系統會根據 Pub/Sub 定價,收取 Cloud KMS 服務的存取費用。

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

後續步驟