Managed Service for Apache Spark を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている永続ディスク上と Cloud Storage ステージング バケット内に保存されます。デフォルトでは、この永続ディスクとバケットに保存されるデータは、Google が生成したデータ暗号鍵(DEK)と鍵暗号鍵(KEK)を使用して暗号化されます。
鍵暗号鍵(KEK)を制御、管理する場合は、顧客管理の暗号鍵(CMEK)を使用できます(データ 暗号鍵(DEK)は引き続き Google が制御します)。Google データ暗号鍵の詳細については、 保存データの暗号化をご覧ください。
CMEK クラスタデータの暗号化
顧客管理の暗号鍵(CMEK)を使用して、次のクラスタデータを暗号化できます。
- Managed Service for Apache Spark クラスタ VM に接続された永続ディスク上のデータ
- クラスタに送信されたジョブ引数データ(Spark SQL ジョブで送信されたクエリ文字列など)
- クラスタ メタデータ、ジョブドライバ出力、 Managed Service for Apache Spark クラスタに書き込まれたその他のデータ ステージング バケット
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init
キーの作成
CMEK で Managed Service for Apache Spark リソースを保護するには、キーの作成を自動化するか、手動でキーを作成します。
キーの自動作成
Autokey を使用して、CMEK のプロビジョニング と割り当てを自動化します。Autokey は、リソースの作成時にキーリングとキーをオンデマンドで生成します。サービス エージェントは、暗号化と復号のオペレーションでキーを使用します。必要に応じて、Autokey はエージェントを作成し、必要な Identity and Access Management(IAM)(IAM)ロールを付与します。 詳細については、 Autokey の概要をご覧ください。
キーの手動作成
クラスタデータの CMEK 暗号化用のキーを手動で作成するには、次の手順を行います。
Cloud KMS を使用して 1 つ以上のキーを作成します。 次のステップで使用するリソース名(キーのリソース ID)は、次のように構成されています。
キー(CMEK)は、暗号化されたリソースと同じロケーションにある必要があります。 たとえば、projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1リージョンのリソースを暗号化するために使用する CMEK も、us-central1リージョンに配置する必要があります。Compute Engine サービス エージェント サービス アカウント、Cloud Storage サービス エージェント サービス アカウント、Managed Service for Apache Spark サービス エージェント サービス アカウントの各サービス アカウントに、Cloud KMS キーを使用してリソースを保護するために必要な権限を付与するには、プロジェクトに対する Cloud KMS CryptoKey の暗号化/復号 (
roles/cloudkms.cryptoKeyEncrypterDecrypter)IAM ロールを、Compute Engine サービス エージェント サービス アカウント、Cloud Storage サービス エージェント サービス アカウント、Managed Service for Apache Spark サービス エージェント サービス アカウントの各サービス アカウントに付与するよう管理者に依頼してください。Google Cloud CLI を使用して、Cloud KMS CryptoKey の暗号化/復号ロールを Managed Service for Apache Spark サービス エージェント サービス アカウントに割り当てる例:
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 キーを含む プロジェクトの ID。 Google CloudPROJECT_NUMBER: Managed Service for Apache Spark リソースを実行する Google Cloud プロジェクトのプロジェクト番号(プロジェクト ID ではありません)。Managed Service for Apache Spark サービス エージェントのロールが Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられていない場合は、 Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられたカスタムロールに
serviceusage.services.use権限を追加します。
CMEK を使用してクラスタを作成する
Managed Service for Apache Spark クラスタを作成するときに、キーのリソース ID を渡します。
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](/managed-spark/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) をご覧ください。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_RING_NAME/cryptoKeys/KEY_NAME ...--kms-key - Cloud Storage の Managed Service for Apache Spark ステージング バケットに書き込まれるクラスタ メタデータ、ジョブドライバ、その他の出力データを暗号化するには:
- CMEK を使用して独自のバケットを作成します。バケットにキーを追加するときは、手順 1 で作成したキーを使用します。
- クラスタの作成時にこのバケット名を
--bucketフラグに渡します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...ジョブがバケット引数を受け取る場合は、次の `cmek-bucket` の例に示すように、CMEK 対応のバケットを `gcloud dataproc jobs submit` コマンドに渡すこともできます。
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 の永続ディスクデータを暗号化するには、
ClusterConfig.EncryptionConfig.gcePdKmsKeyName
フィールドを
cluster.create
リクエストの一部として含めます。
鍵の設定は、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.EncryptionConfig.kmsKeyフィールドをcluster.create リクエストの一部として含めます。 Cluster.EncryptionConfig.kmsKey フィールドで暗号化されるジョブタイプと引数のリストについては、--kms-keyをご覧ください。鍵の設定は、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 ... - Cloud Storage の Managed Service for Apache Spark ステージング バケットに書き込まれるクラスタ メタデータ、ジョブドライバ、その他の出力データを暗号化するには:
- CMEK を使用して独自のバケットを作成します。バケットにキーを追加するときは、手順 1 で作成したキーを使用します。
- クラスタの作成時にこのバケット名を ClusterConfig.configBucket フィールドに cluster.create リクエストの一部として渡します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...ジョブがバケット引数を受け取る場合は、次の `cmek-bucket` の例に示すように、CMEK 対応のバケットを `gcloud dataproc jobs submit` コマンドに渡すこともできます。
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
ワークフロー テンプレートのデータで CMEK を使用する
Managed Service for Apache Spark ワークフロー テンプレートのジョブ引数データ(Spark SQL ジョブのクエリ文字列など)は、CMEK を使用して暗号化できます。このセクションの手順 1、2、3 に沿って、Managed Service for Apache Spark ワークフロー テンプレートで CMEK を使用します。この機能が有効になっているときに CMEK を使用して暗号化されるワークフロー テンプレート ジョブの種類と引数のリストについては、 WorkflowTemplate.EncryptionConfig.kmsKey をご覧ください。
- Cloud KMS を使用してキーを作成します。
次のステップで使用するキーのリソース名は、次のように構成されます。
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Managed Service for Apache Spark サービス アカウントでキーを使用できるようにするには:
Cloud KMS
CryptoKey Encrypter/Decrypterロールを Managed Service for Apache Spark サービス エージェント サービス アカウントに割り当てます。 ロールの割り当てには、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 を実行する プロジェクトの ID。 Google Cloud このプロジェクトには、Managed Service for Apache Spark リソースを実行するプロジェクトも指定できます。
PROJECT_NUMBER: Managed Service for Apache Spark リソースを実行する Google Cloud プロジェクトのプロジェクト番号(プロジェクト ID ではありません)。
Managed Service for Apache Spark リソースを実行するプロジェクトで Cloud KMS API を有効にします。
Managed Service for Apache Spark サービス エージェントのロールが Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられていない場合は、
serviceusage.services.use権限を Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられたカスタムロールに追加します。Managed Service for Apache Spark サービス エージェントのロールが Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられている場合は、この手順をスキップできます。
gcloud 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) を使用すると、サポートされている外部鍵管理パートナーが管理するキーを使用して、Managed Service for Apache Spark データを保護できます。 Managed Service for Apache Spark で Cloud EKM を使用する手順は、キーが 外部管理のキー の URI を指す点を除き、CMEK キーの設定に使用する手順と同じです(Cloud EKM の概要 をご覧ください)。
Cloud EKM のエラー
Cloud EKM を使用する場合、入力、Cloud EKM、外部鍵管理パートナー システム、または Cloud EKM と外部システム間の通信に関連するエラーが原因でクラスタの作成に失敗することがあります。 REST API または Google Cloud コンソールを使用すると、エラーが Cloud Logging に記録されます 。失敗したクラスタのエラーは、[ログを表示] タブで調べることができます。