使用 Dataproc 時,叢集和工作資料會儲存在與叢集中的 Compute Engine VM 相關聯的永久磁碟,以及 Cloud Storage 暫存值區中。這個永久磁碟和值區資料會經過 Google 產生的資料加密金鑰 (DEK) 和金鑰加密金鑰 (KEK) 加密。
CMEK 功能可讓您建立、使用及撤銷金鑰加密金鑰 (KEK)。Google 仍會控管資料加密金鑰 (DEK)。如要進一步瞭解 Google 資料加密金鑰,請參閱「靜態資料加密」。
搭配使用 CMEK 與叢集資料
您可以使用客戶自行管理的加密金鑰 (CMEK) 加密下列叢集資料:
- 連結至 Dataproc 叢集 VM 的永久磁碟資料
- 提交至叢集的工作引數資料,例如透過 Spark SQL 工作提交的查詢字串
- 叢集中繼資料、工作驅動程式輸出內容,以及寫入您建立的 Dataproc 暫存值區的其他資料
如要使用 CMEK 加密叢集資料,請按照下列步驟操作:
- 使用 Cloud Key Management Service 建立一或多個金鑰。
資源名稱 (也稱為金鑰的資源 ID) 會在後續步驟中使用,其構造如下:
projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
將下列角色指派給下列服務帳戶:
- 請按照「Compute Engine→使用 Cloud KMS 金鑰保護資源→事前準備」中第 5 項的說明,將 Cloud KMS CryptoKey Encrypter/Decrypter 角色指派給 Compute Engine 服務代理人服務帳戶。
將 Cloud KMS CryptoKey Encrypter/Decrypter 角色指派給 Cloud Storage 服務代理人服務帳戶。
將 Cloud KMS CryptoKey Encrypter/Decrypter 角色指派給 Dataproc 服務代理人服務帳戶。您可以使用 Google Cloud CLI 指派角色:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KMS_PROJECT_ID
:執行 Cloud KMS 的 Google Cloud 專案 ID。這個專案也可以是執行 Dataproc 資源的專案。PROJECT_NUMBER
:執行 Dataproc 資源的 Google Cloud 專案編號 (不是專案 ID)。在執行 Dataproc 資源的專案中啟用 Cloud KMS API。
如果Dataproc 服務代理人角色未附加至 Dataproc 服務代理人服務帳戶,請將
serviceusage.services.use
權限新增至附加至 Dataproc 服務代理人服務帳戶的自訂角色。如果 Dataproc 服務代理人角色已附加至 Dataproc 服務代理人服務帳戶,可以略過這個步驟。
將金鑰的資源 ID 傳遞至 Google Cloud CLI 或 Dataproc API,即可用於叢集資料加密。
gcloud CLI
- 如要使用金鑰加密叢集永久磁碟資料,請在建立叢集時,將金鑰的資源 ID 傳遞至
--gce-pd-kms-key
旗標。gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...
您可以使用
gcloud
指令列工具驗證金鑰設定。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
指令輸出程式碼片段:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ...
- 如要使用金鑰加密叢集 Persistent Disk 資料和工作引數資料,請在建立叢集時,將金鑰的資源 ID 傳遞至
--kms-key
旗標。如要查看以--kms-key
標記加密的工作類型和引數清單,請參閱 Cluster.EncryptionConfig.kmsKey。gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...
您可以使用 gcloud CLI
dataproc clusters describe
指令驗證金鑰設定。金鑰資源 ID 會在gcePdKmsKeyName
和kmsKey
上設定,以便使用金鑰加密叢集永久磁碟和工作引數資料。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
指令輸出程式碼片段:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/key-KEY_RING_NAME-name/cryptoKeys/KEY_NAME ...
- 如要加密寫入 Cloud Storage 中 Dataproc 暫存值區的叢集中繼資料、工作驅動程式和其他輸出資料,請按照下列步驟操作:
- 使用 CMEK 建立自己的 bucket。將金鑰新增至值區時,請使用您在步驟 1 中建立的金鑰。
- 建立叢集時,請將 bucket 名稱傳送至
--bucket
標記。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...
如果工作採用值區引數,您還可以將啟用 CMEK 功能的值區傳送至 `gcloud dataproc jobs submit` 指令,如下列 `cmek-bucket` 範例所示:
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
REST API
- 如要使用金鑰加密叢集 VM 永久磁碟資料,請在 cluster.create 要求中加入 ClusterConfig.EncryptionConfig.gcePdKmsKeyName 欄位。
您可以使用 gcloud CLI
dataproc clusters describe
指令驗證金鑰設定。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
指令輸出程式碼片段:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
- 如要使用金鑰加密叢集 VM 永久磁碟資料和工作引數資料,請在 cluster.create 要求中加入
Cluster.EncryptionConfig.kmsKey
欄位。如要查看使用--kms-key
欄位加密的工作類型和引數清單,請參閱「Cluster.EncryptionConfig.kmsKey」。您可以使用 gcloud CLI
dataproc clusters describe
指令驗證金鑰設定。金鑰資源 ID 會在gcePdKmsKeyName
和kmsKey
上設定,以便使用金鑰加密叢集永久磁碟和工作引數資料。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
指令輸出程式碼片段:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
- To encrypt cluster metadata, job driver, and other output data written to your
Dataproc staging bucket in Cloud Storage:
- Create your own bucket with CMEK. When adding the key to the bucket, use a key that you created in Step 1.
- Pass the bucket name to the ClusterConfig.configBucket field as part of a cluster.create request.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAMEt \ other arguments ...
如果工作採用值區引數,您還可以將啟用 CMEK 功能的值區傳送至 `gcloud dataproc jobs submit` 指令,如下列 `cmek-bucket` 範例所示:
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
- 如要使用金鑰加密叢集永久磁碟資料,請在建立叢集時,將金鑰的資源 ID 傳遞至
搭配使用 CMEK 與工作流程範本資料
Dataproc 工作流程範本工作引數資料 (例如 Spark SQL 工作的查詢字串) 可以使用 CMEK 加密。請按照本節中的步驟 1、2 和 3,將 CMEK 用於 Dataproc 工作流程範本。如要查看啟用這項功能時,使用 CMEK 加密的工作流程範本工作類型和引數清單,請參閱 WorkflowTemplate.EncryptionConfig.kmsKey。
- 使用 Cloud Key Management Service (Cloud KMS) 建立金鑰。
您會在後續步驟中使用金鑰的資源名稱,該名稱的構造如下:
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
如要讓 Dataproc 服務帳戶使用您的金鑰,請按照下列步驟操作:
將 Cloud KMS
CryptoKey Encrypter/Decrypter
角色指派給 Dataproc 服務代理人服務帳戶。您可以使用 gcloud CLI 指派角色:gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KMS_PROJECT_ID
:執行 Cloud KMS 的 Google Cloud 專案 ID。這個專案也可以是執行 Dataproc 資源的專案。PROJECT_NUMBER
:執行 Dataproc 資源的 Google Cloud 專案編號 (不是專案 ID)。在執行 Dataproc 資源的專案中啟用 Cloud KMS API。
如果Dataproc 服務代理人角色未附加至 Dataproc 服務代理人服務帳戶,請將
serviceusage.services.use
權限新增至附加至 Dataproc 服務代理人服務帳戶的自訂角色。如果 Dataproc 服務代理人角色已附加至 Dataproc 服務代理人服務帳戶,則可以略過這個步驟。
您可以使用 Google Cloud CLI 或 Dataproc API,在工作流程中設定您在步驟 1 中建立的金鑰。在工作流程中設定金鑰後,系統會使用該金鑰,針對 WorkflowTemplate.EncryptionConfig.kmsKey 中列出的任何工作類型和引數,加密所有工作流程工作引數和查詢。
gcloud CLI
使用 gcloud dataproc workflow-templates create 指令建立工作流程範本時,將金鑰的資源 ID 傳送到
--kms-key
標記。範例:
您可以使用gcloud dataproc workflow-templates create my-template-name \ --region=region \ --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \ other arguments ...
gcloud
指令列工具驗證金鑰設定。gcloud dataproc workflow-templates describe TEMPLATE_NAME \ --region=REGION
... id: my-template-name encryptionConfig: kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
REST API
使用 WorkflowTemplate.EncryptionConfig.kmsKey 做為 workflowTemplates.create 要求的一部分。
您可以發出 workflowTemplates.get 要求來驗證金鑰設定。傳回的 JSON 包含下列清單:
kmsKey
... "id": "my-template-name", "encryptionConfig": { "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name" },
Cloud External Key Manager
Cloud External Key Manager (Cloud EKM) 可讓您使用支援的外部金鑰管理合作夥伴代管的金鑰,保護 Dataproc 資料。在 Dataproc 中使用 EKM 的步驟與設定 CMEK 金鑰的步驟相同,但有以下差異:您的金鑰會指向外部管理金鑰的 URI (請參閱「Cloud EKM 總覽」)。
Cloud EKM 錯誤
使用 Cloud EKM 時,嘗試建立叢集可能會因輸入內容、Cloud EKM、外部金鑰管理合作夥伴系統,或 EKM 與外部系統之間的通訊相關錯誤而失敗。如果您使用 REST API 或 Google Cloud 控制台,系統會將錯誤記錄在 Logging 中。您可以透過「查看記錄」分頁,檢查叢集失敗的原因。