顧客管理暗号鍵(CMEK)

Dataproc を使用する場合、クラスタデータとジョブデータは、クラスタ内の Compute Engine VM に関連付けられている Persistent Disk(PD)上と Cloud Storage ステージング バケット内に保存されます。PD とバケットに保存されるデータは、Google によって生成されるデータ暗号鍵(DEK)と鍵暗号鍵(KEK)を使用して暗号化されます。CMEK 機能によって、ユーザー側で鍵暗号鍵(KEK)の作成、使用、取り消しを行うことができます。データ暗号鍵(DEK)は Google が管理します。Google データ暗号鍵の詳細については、保存データの暗号化をご覧ください。

CMEK の使用

CMEK を使用すると、Cloud Dataproc クラスタ内の VM に関連付けられた PD や、Dataproc ステージング バケットに書き込まれたクラスタ メタデータとジョブドライバ出力のデータを暗号化できます。手順 1 と 2 を行った後に、CMEK をクラスタの PD に使用する場合は手順 3 を、Cloud Storage バケットに使用する場合は手順 4 を、その両方に使用する場合は手順 5 を行ってください。

  1. Cloud Key Management Service(Cloud KMS)を使用して鍵を作成します。以降の手順で使用するため、リソース名をコピーします。リソース名は次のように構成されています。
        projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
        
  2. Compute Engine と Cloud Storage のサービス アカウントで鍵を使用できるようにします。
    1. Compute Engine → Cloud KMS 鍵によるリソースの保護 → 始める前にの項目 5 に従って、Cloud KMS の CryptoKey Encrypter/Decrypter の役割を Compute Engine のサービス アカウントに割り当てます。
    2. Cloud KMS の CryptoKey Encrypter/Decrypter の役割を Cloud Storage のサービス アカウントに割り当てます
  3. たとえば、gcloud コマンドライン ツールまたは 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 \
            --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
        
        ...
        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"
        }
        },
        
  4. Cloud Dataproc によって使用される Cloud Storage バケットで CMEK を使用して、クラスタとジョブのデータの読み取りや書き込みを行うには、CMEK を使用してバケットを作成します。注: バケットで鍵を追加するには、手順 1 で作成した鍵を使用します。このバケットの名前を、gcloud beta dataproc clusters create コマンドでクラスタを作成するときに渡します。

    :

        gcloud dataproc clusters create my-cluster \
            --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 \
            --cluster clustername \
            -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        
  5. CMEK をクラスタ内の PD に使用し、Cloud Dataproc で使用される Cloud Storage バケットにも使用するには、手順 3 と 4 で説明した --gce-pd-kms-key フラグと --bucket フラグの両方を gcloud dataproc clusters create コマンドに渡します。PD データとバケットデータには、それぞれ異なる鍵を作成して使用できます。