Dataproc を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている永続ディスク上と Cloud Storage ステージング バケット内に保存されます。この永続ディスクとバケットに保存されるデータは、Google が生成したデータ暗号鍵(DEK)と鍵暗号鍵(KEK)を使用して暗号化されます。
CMEK 機能によって、ユーザー側で鍵暗号鍵(KEK)の作成、使用、取り消しを行うことができます。データ暗号鍵(DEK)は Google が管理します。Google データ暗号鍵の詳細については、保存データの暗号化をご覧ください。
クラスタデータで CMEK を使用する
顧客管理の暗号鍵(CMEK)を使用して、次のクラスタデータを暗号化できます。
- Dataproc クラスタ内の VM に接続された永続ディスク上のデータ
- クラスタに送信されたジョブ引数データ(Spark SQL ジョブで送信されたクエリ文字列など)
- クラスタ メタデータ、ジョブドライバ出力、作成した Dataproc ステージング バケットに書き込まれたその他のデータ
クラスタデータの暗号化で CMEK を使用する手順は次のとおりです。
- Cloud Key Management Service を使用して 1 つ以上の鍵を作成します。次のステップで使用するリソース名(鍵のリソース ID)は、次のように構成されています。projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME 
- 次のサービス アカウントに次のロールを割り当てます。 - Compute Engine → Cloud KMS 鍵によるリソースの保護 → 始める前にの項目 5 に従って、Cloud KMS CryptoKey の暗号化 / 復号ロールを Compute Engine サービス エージェントのサービス アカウントに割り当てます。
- Cloud KMS CryptoKey の暗号化 / 復号ロールを Cloud Storage サービス エージェントのサービス アカウントに割り当てます。 
- Cloud KMS CryptoKey の暗号化 / 復号ロールを 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 サービス エージェント サービス アカウントに関連付けられている場合は、この手順をスキップできます。
 
- 鍵のリソース 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 ... 
- 鍵を使用してクラスタの永続ディスクデータとジョブ引数データを暗号化するには、クラスタの作成時に鍵のリソース 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 を使用して独自のバケットを作成します。バケットに鍵を追加するには、ステップ 1 で作成した鍵を使用します。
- クラスタの作成時にこのバケット名を --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 に沿って、Dataproc ワークフロー テンプレートで CMEK を使用します。この機能が有効になっているときに 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 サービス エージェント サービス アカウントに関連付けられていない場合は、Dataproc サービス エージェント サービス アカウントに関連付けられたカスタムロールに - serviceusage.services.use権限を追加します。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- workflowTemplates.create リクエストの一部として WorkflowTemplate.EncryptionConfig.kmsKey を使用します。 - 鍵の設定を確認するには、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)(EKM)を使用すると、サポートされている外部鍵管理パートナーが管理する鍵を使用して、Dataproc データを保護できます。Dataproc で EKM を使用する手順は、鍵が 外部管理の鍵の URI を指す点を除き、CMEK 鍵の設定に使用する手順と同じです(Cloud EKM の概要をご覧ください)。
Cloud EKM のエラー
Cloud EKM を使用する場合、入力、Cloud EKM、外部鍵管理パートナー システム、または EKM と外部システム間の通信に関連するエラーが原因でクラスタの作成に失敗することがあります。REST API または Google Cloud コンソールを使用すると、エラーが Logging に記録されます。失敗したクラスタのエラーは、[ログを表示] タブで調べることができます。