使用 Cloud KMS 加密範本參數

為避免 API 金鑰和密碼等機密憑證以純文字形式出現在 Dataflow 工作設定中,您可以使用 Cloud Key Management Service (Cloud KMS) 加密 Google 提供的範本參數。請參考下列資訊,使用 Cloud KMS 金鑰加密參數值,並將經過打亂的文字 (密文) 傳遞至管道。

總覽

部分 Google 提供的範本可讓您加密範本參數中的機密資料,例如使用者名稱、密碼、JDBC 連線字串和 API 金鑰。如果支援,這些範本會包含指定 Cloud KMS 加密金鑰的參數,例如:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

如要搭配這些範本使用 Cloud KMS 加密金鑰,請執行下列步驟:

  1. 將 Cloud KMS CryptoKey 解密者角色授予 Dataflow worker 服務帳戶。
  2. 建立加密金鑰。
  3. 使用金鑰加密資料。
  4. 對加密資料進行 Base64 編碼。
  5. 執行範本時,請指定加密金鑰,並使用加密的參數值。

如果指定加密金鑰,則必須加密所有支援加密的參數。如要瞭解哪些參數可以加密,請參閱特定範本的說明文件。

範例

下列範例使用 MySQL 到 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/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 安全性與權限」。

後續步驟