Cloud KMS を使用してテンプレートのパラメータを暗号化する

このページでは、Cloud KMS で暗号鍵を使用して、Google 提供のテンプレートのパラメータに含まれる機密データを暗号化する方法について説明します。

概要

一部の Google 提供のテンプレートでは、ユーザー名、パスワード、JDBC 接続文字列、API キーなど、テンプレートのパラメータに含まれる機密データを暗号化できます。サポートされている場合、これらのテンプレートには、以下のような Cloud KMS 暗号鍵を指定するためのパラメータが含まれます。

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

これらのテンプレートで Cloud KMS 暗号鍵を使用するには、次の操作を行います。

  1. Dataflow ワーカー サービス アカウントCloud KMS CryptoKey Decrypter ロールを付与します。
  2. 暗号鍵を作成します
  3. 鍵を使用してデータを暗号化します。
  4. 暗号化されたデータを Base64 でエンコードします。
  5. テンプレートを実行するときに、暗号鍵を指定し、暗号化されたパラメータ値を使用します。

暗号鍵を指定する場合は、暗号化をサポートするすべてのパラメータを暗号化する必要があります。暗号化できるパラメータについては、特定のテンプレートのドキュメントをご覧ください。

次の例では、MySQL to BigQuery テンプレートを使用します。

  1. キーリングを作成します。

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. 暗号鍵を作成します。

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. ユーザー名、パスワード、JDBC 接続文字列を暗号化して Base64 でエンコードします。

    export USER_NAME=`echo -n "USER_NAME" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export PASSWORD=`echo -n "PASSWORD" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export CONNECTION_STRING=`echo -n "CONNECTION_STRING" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    
  4. テンプレートを実行します。

    gcloud dataflow flex-template run mysql-job \
     --project=PROJECT_ID \
     --region=us-central1 \
     --template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/MySQL_to_BigQuery \
     --parameters \
    connectionURL="$CONNECTION_STRING",\
    query="SOURCE_SQL_QUERY",\
    outputTable=PROJECT_ID:DATASET.TABLE_NAME,\
    bigQueryLoadingTemporaryDirectory=CLOUD_STORAGE_PATH,\
    username="$USER_NAME",\
    password="$PASSWORD",\
    KMSEncryptionKey=projects/PROJECT_ID/locations/global/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

トラブルシューティング

このセクションでは、テンプレートのパラメータの暗号化に関するトラブルシューティング情報について説明します。

アクセスの拒否

ジョブを実行すると、次のような PERMISSION_DENIED エラーがジョブログに表示されます。

PERMISSION_DENIED: Permission cloudkms.cryptoKeyVersions.useToDecrypt denied on
resource RESOURCE_PATH (or it may not exist)

データを復号するには、Dataflow ワーカー サービス アカウントに、暗号鍵に対する cloudkms.cryptoKeyVersions.useToDecrypt 権限が必要です。ワーカー サービス アカウントに Cloud KMS CryptoKey Decrypter ロールが付与されていることを確認します。詳細については、Dataflow のセキュリティと権限をご覧ください。

次のステップ