本页介绍了如何将加密密钥与 Cloud KMS 搭配使用,以加密 Google 提供的模板参数中的敏感数据。
概览
借助一些 Google 提供的模板,您可以对模板参数中的敏感数据(例如用户名、密码、JDBC 连接字符串和 API 密钥)进行加密。如果受支持,这些模板会包含用于指定 Cloud KMS 加密密钥的参数,例如:
KMSEncryptionKey
tokenKMSEncryptionKey
apiKeyKMSEncryptionKey
如需将 Cloud KMS 加密密钥与这些模板搭配使用,请执行以下步骤:
- 向 Dataflow worker 服务账号授予 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 提供的模板列表。