使用 Cloud KMS 加密模板参数

本页介绍了如何将加密密钥与 Cloud KMS 搭配使用,以加密 Google 提供的模板参数中的敏感数据。

概览

借助一些 Google 提供的模板,您可以对模板参数中的敏感数据(例如用户名、密码、JDBC 连接字符串和 API 密钥)进行加密。如果受支持,这些模板会包含用于指定 Cloud KMS 加密密钥的参数,例如:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

如需将 Cloud KMS 加密密钥与这些模板搭配使用,请执行以下步骤:

  1. 向 Dataflow worker 服务账号授予 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 安全性和权限

后续步骤