本页面介绍了如何通过将加密密钥与 Cloud KMS 搭配使用来加密 Google 提供的模板参数中的敏感数据。
概览
某些 Google 提供的模板可让您对模板参数中的敏感数据(例如用户名、密码、JDBC 连接字符串和 API 密钥)进行加密。如果支持,这些模板会包含一个参数来指定 Cloud KMS 加密密钥,例如:
KMSEncryptionKey
tokenKMSEncryptionKey
apiKeyKMSEncryptionKey
如需将 Cloud KMS 加密密钥与这些模板搭配使用,请执行以下步骤:
- 向 Dataflow 工作器服务账号授予 Cloud KMS CryptoKey Decrypter 角色。
- 创建加密密钥。
- 使用密钥对数据进行加密。
- 对加密数据进行 Base64 编码。
- 运行模板时,请指定加密密钥并使用加密的参数值。
如果您指定了加密密钥,则必须加密所有支持加密的参数。如需了解哪些参数可以加密,请参阅特定模板的文档。
示例
以下示例使用 MySQL to BigQuery 模板。
创建密钥环。
gcloud kms keyrings create "KEY_RING_NAME" \ --location "global"
创建加密密钥。
gcloud kms keys create "KEY_NAME" \ --location "global" \ --keyring "KEY_RING_NAME" \ --purpose "encryption"
对用户名、密码和 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`
运行模板
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 安全性和权限。
后续步骤
- 详细了解 Cloud Key Management Service。
- 参阅 Google 提供的模板列表。