Dataproc を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている Persistent Disk 上と Cloud Storagee ステージング バケット内に保存されます。この Persistent Disk とバケットに保存されるデータは、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 Encrypter/Decrypter のロールを 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 サービス エージェント サービス アカウントに関連付けられていない場合は、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 に記録されます。失敗したクラスタのエラーは、[ログを表示] タブで調べることができます。