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

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

概要

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

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

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

  1. Dataflow のワーカー サービス アカウントCloud KMS CryptoKey 復号のロールを付与します。
  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 復号のロールが付与されていることを確認します。詳細については、Dataflow のセキュリティと権限をご覧ください。

次のステップ