Dataproc を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている Persistent Disk(PD)上と Cloud Storage ステージング バケット内に保存されます。PD とバケットに保存されるデータは、Google によって生成されるデータ暗号鍵(DEK)と鍵暗号鍵(KEK)を使用して暗号化されます。CMEK 機能によって、ユーザー側で鍵暗号鍵(KEK)の作成、使用、取り消しを行うことができます。データ暗号鍵(DEK)は引き続き、Google が管理します。Google データ暗号鍵の詳細については、保存データの暗号化をご覧ください。
CMEK の使用
CMEK を使用すると、Dataproc クラスタ内の VM に関連付けられた PD や、Dataproc ステージング バケットに書き込まれたクラスタ メタデータとジョブドライバ出力のデータを暗号化できます。手順 1 と 2 を行った後に、CMEK をクラスタの PD に使用する場合は手順 3、Cloud Storage バケットに使用する場合は手順 4、その両方に使用する場合は手順 5 を行ってください。
- Cloud Key Management Service(Cloud KMS)を使用して鍵を作成します。以降の手順で使用するため、リソース名をコピーします。リソース名は次のように構成されています。
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Compute Engine と Cloud Storage のサービス アカウントで鍵を使用できるようにします。
- Compute Engine → Cloud KMS 鍵によるリソースの保護 → 始める前にの項目 5 に沿って、Cloud KMS の
CryptoKey Encrypter/Decrypter
ロールを Compute Engine のサービス アカウントに割り当てます。 - Cloud KMS の
CryptoKey Encrypter/Decrypter
ロールを Cloud Storage のサービス エージェントに割り当てます。
- Compute Engine → Cloud KMS 鍵によるリソースの保護 → 始める前にの項目 5 に沿って、Cloud KMS の
Google Cloud CLI または Dataproc API を使用して、手順 1 で作成した鍵を Dataproc クラスタ内の VM に関連付けられた PD に設定できます。
gcloud コマンド
gcloud dataproc clusters create コマンドでクラスタを作成するときに、手順 1 で取得した Cloud KMS リソース ID を
--gce-pd-kms-key
フラグに渡します。例:
gcloud dataproc clusters create my-cluster-name \ --region=region \ --gce-pd-kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \ other args ...
キーの設定を確認するには、
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 ...
REST API
cluster.create リクエストの一部として ClusterConfig.EncryptionConfig.gcePdKmsKeyName を使用します。
鍵の設定を確認するには、clusters.get リクエストを発行します。次のように、レスポンスとして返される JSON に
gcePdKmsKeyName
が含まれています。... { "projectId": "project-id", "clusterName": "cluster-name", "config": { "encryptionConfig": { "gcePdKmsKeyName": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name" } },
Dataproc が使用する Cloud Storage バケットで CMEK を使用して、クラスタとジョブのデータの読み取りや書き込みを行うには、CMEK を使用してバケットを作成します。注: バケットで鍵を追加するには、手順 1 で作成した鍵を使用します。 次に、クラスタを作成する際、このバケットの名前を、gcloud beta dataproc clusters create コマンドに渡します。
例:
gcloud dataproc clusters create my-cluster \ --region=region \ --bucket=name-of-CMEK-bucket \ other args ...
ジョブがバケット引数を受け取る場合には、CMEK を有効化したバケットを
例:gcloud dataproc jobs submit
コマンドに渡すこともできます。次の例では...cmek-bucket...
バケット引数を PySpark ジョブの送信時に渡しています。gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
クラスタ内の PD と Dataproc で使用される Cloud Storage バケットで CMEK を使用するには、手順 3 と 4 で説明したように、
--gce-pd-kms-key
フラグと--bucket
フラグの両方をgcloud dataproc clusters create
コマンドに渡します。PD データとバケットデータには、それぞれ異なる鍵を作成して使用できます。
Cloud External Key Manager
Cloud External Key Manager(EKM)を使用すると、サポートされている外部鍵管理パートナーが管理する鍵を使用して、Dataproc データを保護できます。Dataproc で EKM を使用する手順は、鍵が 外部管理の鍵の URI を指す点を除き、CMEK 鍵の設定に使用する手順と同じです(Cloud EKM の概要をご覧ください)。
Cloud EKM のエラー
Cloud EKM を使用する場合、入力、Cloud EKM、外部鍵管理パートナー システム、EKM と外部システム間の通信が原因で、クラスタの作成が失敗します。REST API または Cloud コンソールを使用すると、エラーが Logging に記録されます。失敗したクラスタのエラーは、[ログを表示] タブで確認できます。