使用 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 worker 服务账号需要对加密密钥拥有 cloudkms.cryptoKeyVersions.useToDecrypt 权限。确保 worker 服务账号具有 Cloud KMS CryptoKey Decrypter 角色。如需了解详情,请参阅 Dataflow 安全性和权限

后续步骤