顧客管理の暗号鍵(CMEK)

Managed Service for Apache Spark を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている Persistent Disk と Cloud Storage ステージング バケットに保存されます。デフォルトでは、この Persistent Disk とバケットに保存されるデータは、Google が生成したデータ暗号鍵(DEK)と鍵暗号鍵(KEK)を使用して暗号化されます。

鍵暗号鍵(KEK)を制御、管理する場合は、顧客管理の暗号鍵(CMEK)を使用できます(Google はデータ暗号鍵(DEK)の制御を継続します)。Google データ暗号鍵の詳細については、保存データの暗号化をご覧ください。

CMEK クラスタデータの暗号化

顧客管理の暗号鍵(CMEK)を使用して、次のクラスタデータを暗号化できます。

  • Managed Service for Apache Spark クラスタ VM に接続された永続ディスク上のデータ
  • クラスタに送信されたジョブ引数データ(Spark SQL ジョブで送信されたクエリ文字列など)
  • クラスタ メタデータ、ジョブドライバ出力、Managed Service for Apache Spark クラスタのステージング バケットに書き込まれたその他のデータ

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Google Cloud CLI をインストールします。

  6. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  7. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Google Cloud CLI をインストールします。

  12. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  13. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init

キーの作成

CMEK で Managed Service for Apache Spark リソースを保護するには、鍵の作成を自動化するか、鍵を手動で作成します。

鍵の自動作成

Autokey を使用して、CMEK のプロビジョニングと割り当てを自動化します。Autokey は、リソースの作成時にキーリングと鍵をオンデマンドで生成します。サービス エージェントは、暗号化と復号のオペレーションで鍵を使用します。必要に応じて、Autokey はエージェントを作成し、必要な Identity and Access Management(IAM)(IAM)ロールを付与します。詳細については、Autokey の概要をご覧ください。

手動での鍵の作成

クラスタデータの CMEK 暗号化用の鍵を手動で作成する手順は次のとおりです。

  1. Cloud KMS を使用して 1 つ以上の鍵を作成します。次のステップで使用するリソース名(鍵のリソース ID)は、次のように構成されています。

    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
    鍵(CMEK)は、暗号化されたリソースと同じロケーションにある必要があります。たとえば、us-central1 リージョン内のリソースを暗号化するために使用される CMEK も、us-central1 リージョン内にある必要があります。

  2. 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 を使用して、Managed Service for Apache Spark サービス エージェントのサービス アカウントに Cloud KMS CryptoKey の暗号化/復号ロールを割り当てる例:

    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。

    PROJECT_NUMBER: Managed Service for Apache Spark リソースを実行する Google Cloud プロジェクトのプロジェクト番号(プロジェクト ID ではありません)。

  3. 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](/dataproc/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 は gcePdKmsKeyNamekmsKey に設定され、クラスタの永続ディスクとジョブ引数データの暗号化で鍵が使用されます。

    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 ステージング バケットに書き込まれるクラスタ メタデータ、ジョブドライバ、その他の出力データを暗号化するには:
    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 は gcePdKmsKeyNamekmsKey に設定され、クラスタの永続ディスクとジョブ引数データの暗号化で鍵が使用されます。

    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 ステージング バケットに書き込まれるクラスタ メタデータ、ジョブドライバ、その他の出力データを暗号化するには:
    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
          

ワークフロー テンプレートのデータで CMEK を使用する

Managed Service for Apache Spark ワークフロー テンプレートのジョブ引数データ(Spark SQL ジョブのクエリ文字列など)は、CMEK を使用して暗号化できます。このセクションの手順 1、2、3 に沿って、Managed Service for Apache Spark ワークフロー テンプレートで CMEK を使用します。この機能が有効になっているときに CMEK を使用して暗号化されるワークフロー テンプレート ジョブの種類と引数のリストについては、WorkflowTemplate.EncryptionConfig.kmsKey をご覧ください。

  1. Cloud KMS を使用して鍵を作成します。次のステップで使用する鍵のリソース名は、次のように構成されます。
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Managed Service for Apache Spark サービス アカウントで鍵を使用できるようにするには:

    1. 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 を実行する Google Cloud プロジェクトの ID。このプロジェクトには、Managed Service for Apache Spark リソースを実行するプロジェクトも指定できます。

      PROJECT_NUMBER: Managed Service for Apache Spark リソースを実行する Google Cloud プロジェクトのプロジェクト番号(プロジェクト ID ではありません)。

    2. Managed Service for Apache Spark リソースを実行するプロジェクトで Cloud KMS API を有効にします。

    3. Managed Service for Apache Spark サービス エージェントのロールManaged Service for Apache Spark サービス エージェント サービス アカウントに関連付けられていない場合は、Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられたカスタムロールに serviceusage.services.use 権限を追加します。Managed Service for Apache Spark サービス エージェントのロールが Managed Service for Apache Spark サービス エージェント サービス アカウントに関連付けられている場合は、この手順をスキップできます。

  3. 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 に記録されます。失敗したクラスタのエラーは、[ログを表示] タブで調べることができます。