顧客管理の暗号鍵(CMEK)

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 を使用するには、次の手順を行います。

  1. Cloud Key Management Service を使用して 1 つ以上の鍵を作成します。リソース名(次のステップで使用する鍵のリソース ID とも呼ばれます)は、次のように作成されます。
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. 次のサービス アカウントに次のロールを割り当てます。

    1. Compute Engine → Cloud KMS 鍵によるリソースの保護 → 始める前にの項目 5 に従って、Cloud KMS の CryptoKey Encrypter/Decrypter のロールを Compute Engine サービス エージェントのサービス アカウントに割り当てます。
    2. Cloud KMS の CryptoKey の暗号化 / 復号のロールを Cloud Storage サービス エージェントのサービス アカウントに割り当てます。

    3. 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 ではありません)。

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

  3. 鍵のリソース 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 は 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-KEY_RING_NAME-name/cryptoKeys/KEY_NAME
      ...
      

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

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

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

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

    1. 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 ではありません)。

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

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