為避免 API 金鑰和密碼等機密憑證以純文字形式出現在 Dataflow 工作設定中,您可以使用 Cloud Key Management Service (Cloud KMS) 加密 Google 提供的範本參數。請參考下列資訊,使用 Cloud KMS 金鑰加密參數值,並將經過打亂的文字 (密文) 傳遞至管道。
總覽
部分 Google 提供的範本可讓您加密範本參數中的機密資料,例如使用者名稱、密碼、JDBC 連線字串和 API 金鑰。如果支援,這些範本會包含指定 Cloud KMS 加密金鑰的參數,例如:
KMSEncryptionKeytokenKMSEncryptionKeyapiKeyKMSEncryptionKey
如要搭配這些範本使用 Cloud KMS 加密金鑰,請執行下列步驟:
- 將 Cloud KMS CryptoKey 解密者角色授予 Dataflow worker 服務帳戶。
- 建立加密金鑰。
- 使用金鑰加密資料。
- 對加密資料進行 Base64 編碼。
- 執行範本時,請指定加密金鑰,並使用加密的參數值。
如果指定加密金鑰,則必須加密所有支援加密的參數。如要瞭解哪些參數可以加密,請參閱特定範本的說明文件。
範例
下列範例使用 MySQL 到 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/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 解密者角色。詳情請參閱「Dataflow 安全性與權限」。
後續步驟
- 進一步瞭解 Cloud Key Management Service。
- 請參閱 Google 提供的範本清單。