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

本頁面說明如何在 Cloud Data Fusion 中使用 Cloud Key Management Service (Cloud KMS) 加密金鑰。

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

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

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

Cloud Data Fusion 支援 Instance 資源的 Cloud KMS 金鑰用途追蹤。

透過 CMEK,您可以控管租用戶專案中寫入 Google 內部資源的資料,以及 Cloud Data Fusion 管道寫入的資料,包括:

  • 管道記錄和中繼資料
  • Dataproc 叢集中繼資料
  • 各種 Cloud Storage、BigQuery、Pub/Sub 和 Spanner 資料接收器、動作和來源

Cloud Data Fusion 資源

如需支援 CMEK 的 Cloud Data Fusion 外掛程式清單,請參閱支援的外掛程式

Cloud Data Fusion 支援 Dataproc 叢集的 CMEK。Cloud Data Fusion 會建立臨時的 Dataproc 叢集,用於管道,然後在管道完成時刪除叢集。CMEK 會保護寫入下列項目的叢集中繼資料:

  • 連接至叢集 VM 的永久磁碟 (PD)
  • 工作驅動程式輸出內容和其他中繼資料,寫入自動建立或使用者建立的 Dataproc 暫存值區

設定 CMEK

建立 Cloud KMS 金鑰

在包含 Cloud Data Fusion 執行個體的 Google Cloud 專案中,或在獨立的使用者專案中建立 Cloud KMS 金鑰。Cloud KMS 金鑰環位置必須與建立執行個體的區域相符。由於 Cloud Data Fusion 一律會與特定區域建立關聯,因此不允許在執行個體層級使用多區域或全球區域金鑰。

取得金鑰的資源名稱

REST API

使用下列指令取得您建立的金鑰資源名稱:

projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

更改下列內容:

  • PROJECT_ID:代管 Cloud Data Fusion 執行個體的客戶專案
  • REGION:與您所在位置相近的 Google Cloud 區域,例如 us-east1
  • KEY_RING_NAME:將加密金鑰分組的金鑰環名稱
  • KEY_NAMECloud KMS 金鑰名稱

控制台

  1. 前往「金鑰管理」頁面。

    前往「金鑰管理」

  2. 按一下金鑰旁邊的「更多」圖示

  3. 選取「Copy Resource Name」,將資源名稱複製到剪貼簿。

更新專案的服務帳戶以使用金鑰

如要設定專案的服務帳戶以使用金鑰,請按照下列步驟操作:

  1. 必要:將 Cloud KMS CryptoKey 加密者/解密者角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予 Cloud Data Fusion 服務代理人 (請參閱「為特定資源授予服務帳戶角色」)。這個帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-datafusion.iam.gserviceaccount.com

    將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Cloud Data Fusion 服務代理,可讓 Cloud Data Fusion 使用 CMEK 加密儲存在租用戶專案中的任何客戶資料。

  2. 必要:將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Compute Engine 服務代理人 (請參閱「將 Cloud KMS 金鑰指派給 Cloud Storage 服務帳戶」)。這個帳戶預設會獲得 Compute Engine 服務代理人角色,其格式如下:

    service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

    將 Cloud KMS CryptoKey 加密者/解密者角色授予 Compute Engine 服務代理人,即可讓 Cloud Data Fusion 使用 CMEK 加密管道中執行的 Dataproc 叢集所寫入的永久磁碟 (PD) 中繼資料。

  3. 必要:將 Cloud KMS CryptoKey 加密者/解密者角色授予 Cloud Storage 服務代理人 (請參閱「將 Cloud KMS 金鑰指派給 Cloud Storage 服務代理人」)。這個服務代理的格式如下:

    service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com

    將這個角色授予 Cloud Storage 服務代理,可讓 Cloud Data Fusion 使用 CMEK 加密 Cloud Storage 值區,該值區會儲存及快取管道資訊和資料,並將資料寫入 Dataproc 叢集的值區,以及管道在專案中使用的任何其他 Cloud Storage 值區。

  4. 必要:請將 Cloud KMS CryptoKey 加密者/解密者角色授予 Google Cloud Dataproc 服務代理人。這個服務代理的格式如下:

    service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com

  5. 選用:如果管道使用 BigQuery 資源,請將 Cloud KMS CryptoKey 加密者/解密者角色授予 BigQuery 服務帳戶 (請參閱「授予加密和解密權限」)。這個帳戶的格式如下:

    bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com

  6. 選用:如果管道使用 Pub/Sub 資源,請將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Pub/Sub 服務帳戶 (請參閱「使用客戶管理的加密金鑰」)。這個帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com

  7. 選用:如果管道使用 Spanner 資源,請將 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Spanner 服務帳戶。這個帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com

使用 CMEK 建立 Cloud Data Fusion 執行個體

CMEK 適用於 Cloud Data Fusion 6.5.0 以上版本的所有版本。

REST API

  1. 如要使用客戶管理的加密金鑰建立執行個體,請設定下列環境變數:

    export PROJECT=PROJECT_ID
    export LOCATION=REGION
    export INSTANCE=INSTANCE_ID
    export DATA_FUSION_API_NAME=datafusion.googleapis.com
    export KEY=KEY_NAME
    

    更改下列內容:

    • PROJECT_ID:代管 Cloud Data Fusion 執行個體的客戶專案
    • REGION: Google Cloud 與您所在位置相近的區域,例如 us-east1
    • INSTANCE_ID:Cloud Data Fusion 執行個體的名稱
    • KEY_NAMECMEK 金鑰的完整資源名稱
  2. 執行下列指令,建立 Cloud Data Fusion 執行個體:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1/projects/$PROJECT/locations/$LOCATION/instances?instance_id=INSTANCE -X POST -d '{"description": "CMEK-enabled CDF instance created through REST.", "type": "BASIC", "cryptoKeyConfig": {"key_reference": "$KEY"} }'
    

控制台

  1. 前往 Cloud Data Fusion 頁面。

  2. 依序按一下「Instances」和「Create an instance」

    前往「Instances」(執行個體)

  3. 在「Advanced options」中,選取「Use a customer-managed encryption key (CMEK)」

  4. 在「Select a customer-managed key」(選取客戶管理的金鑰) 欄位中,選取金鑰的資源名稱

    選取加密金鑰名稱

  5. 輸入所有執行個體詳細資料後,按一下「建立」。執行個體準備就緒後,會顯示在「Instances」頁面上。

檢查執行個體是否已啟用 CMEK

控制台

查看執行個體詳細資料:

  1. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 頁面。

  2. 按一下「Instances」(執行個體) ,然後點選執行個體名稱,前往「Instance details」(執行個體詳細資料) 頁面。

    前往「Instances」(執行個體)

如果已啟用 CMEK,系統會將「加密金鑰」欄位顯示為「可用」

如果停用 CMEK,系統會將「加密金鑰」欄位顯示為「不可用」

搭配支援的外掛程式使用 CMEK

設定加密金鑰名稱時,請使用以下格式:

projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

加密金鑰名稱

下表說明支援 CMEK 的 Cloud Data Fusion 外掛程式中鍵的行為。

支援的外掛程式 按鍵行為
Cloud Data Fusion 匯出來源
Cloud Storage 將資料加密,並寫入外掛程式建立的任何值區。如果已存在桶,系統會忽略這個值。
Cloud Storage 多檔案 將資料加密,並寫入外掛程式建立的任何值區。
BigQuery 將資料寫入由外掛程式建立的任何儲存格、資料集或資料表時,會對資料進行加密。
BigQuery 多資料表 將資料寫入由外掛程式建立的任何儲存格、資料集或資料表時,會對資料進行加密。
Pub/Sub 將資料寫入外掛程式建立的任何主題時,會進行加密。如果主題已存在,系統會忽略這個值。
Spanner 將資料寫入外掛程式建立的任何資料庫時,會先加密資料。如果資料庫已存在,系統會忽略這個值。
Cloud Data Fusion 動作
Cloud Storage 建立
Cloud Storage 複製
Cloud Storage 移動
Cloud Storage 完成檔案標記
將資料加密,並寫入外掛程式建立的任何值區。如果值已存在,系統會忽略這個值。
BigQuery 執行 將資料寫入外掛程式建立的資料集或資料表,以便儲存查詢結果。只有在您將查詢結果儲存在 BigQuery 資料表中時,才能使用這項功能。
Cloud Data Fusion 來源
BigQuery 來源 將資料加密,並寫入外掛程式建立的任何值區。如果已存在桶,系統會忽略這個值。
Cloud Data Fusion SQL 引擎
BigQuery Pushdown Engine 將資料寫入由外掛程式建立的任何值區、資料集或資料表時,會對資料進行加密。

搭配使用 CMEK 與 Dataproc 叢集中繼資料

預先建立的運算設定檔會使用在建立執行個體時提供的 CMEK 金鑰,加密在管道中執行的 Dataproc 叢集所寫入的持久性磁碟 (PD) 和暫存值區中繼資料。您可以透過下列任一方式修改為使用其他鍵:

  • 建議:建立新的 Dataproc 運算設定檔 (僅限 Enterprise 版)。
  • 編輯現有的 Dataproc 運算設定檔 (開發人員版、基本版或企業版)。

控制台

  1. 開啟 Cloud Data Fusion 執行個體:

    1. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 頁面。

    2. 如要在 Cloud Data Fusion Studio 中開啟執行個體,請依序按一下「Instances」和「View instance」

      前往「Instances」(執行個體)

  2. 依序點選「系統管理員」>「設定」

  3. 按一下「System Compute Profiles」下拉式選單。

  4. 按一下「建立新設定檔」,然後選取「Dataproc」

  5. 輸入「設定檔標籤」、「設定檔名稱」和「說明」

  6. 根據預設,每當 Cloud Data Fusion 建立暫時叢集時,Dataproc 就會建立暫存和臨時值區。Cloud Data Fusion 支援在運算設定檔中將 Dataproc 暫存值區做為引數傳遞。如要加密暫存值區,請建立支援 CMEK 的值區,並在運算設定檔中將其做為引數傳遞給 Dataproc。

  7. 根據預設,Cloud Data Fusion 會自動建立 Cloud Storage 值區,以便將 Dataproc 使用的依附元件暫存。如果您想使用專案中現有的 Cloud Storage 值區,請按照下列步驟操作:

    1. 在「一般設定」部分,在「Cloud Storage Bucket」欄位中輸入現有的 Cloud Storage 值區。

    2. 將 Cloud KMS 金鑰新增至 Cloud Storage 值區

  8. 取得 Cloud KMS 金鑰的資源 ID。在「一般設定」專區的「Encryption Key Name」欄位中,輸入資源 ID。

  9. 按一下 [建立]。

  10. 如果「Configuration」分頁的「System Compute Profiles」部分列出多個設定檔,請將游標懸停在設定檔名稱欄位上,然後按一下顯示的星號,將新的 Dataproc 設定檔設為預設設定檔。

    選取預設設定檔。

搭配其他資源使用 CMEK

在建立 Cloud Data Fusion 執行個體時,系統會將提供的 CMEK 金鑰設為系統偏好設定。這項服務會用於將資料加密,並寫入由管道接收器 (例如 Cloud Storage、BigQuery、Pub/Sub 或 Spanner 接收器) 新建的資源。

這個鍵只適用於新建的資源。如果管道執行前資源已存在,請手動將 CMEK 金鑰套用至這些現有資源。

您可以執行下列任一操作來變更 CMEK 金鑰:

  • 使用執行階段引數。
  • 設定 Cloud Data Fusion 系統偏好設定。

執行階段引數

  1. 在 Cloud Data Fusion 的「Pipeline Studio」頁面中,按一下「Run」按鈕右側的下拉式箭頭。
  2. 在「Name」(名稱) 欄位中輸入 gcp.cmek.key.name
  3. 在「Value」欄位中,輸入鍵的「資源 ID」
    選取 Data Fusion 版本。
  4. 按一下 [儲存]

    您在此處設定的執行階段引數只會套用至目前管道的執行作業。

偏好設定

  1. 在 Cloud Data Fusion UI 中,按一下「系統管理員」
  2. 按一下 [設定] 標籤。
  3. 按一下「系統偏好設定」下拉式選單。
  4. 按一下「編輯系統偏好設定」
  5. 在「Key」欄位中輸入 gcp.cmek.key.name
  6. 在「Value」欄位中,輸入鍵的「資源 ID」
    選取 Data Fusion 版本。
  7. 按一下「儲存並關閉」