使用 Cloud KMS 加密範本參數

本頁面說明如何使用 Cloud KMS 的加密金鑰,加密 Google 提供的範本參數中的機密資料。

總覽

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

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

如要在這些範本中使用 Cloud KMS 加密金鑰,請按照下列步驟操作:

  1. Cloud KMS CryptoKey 解密者角色授予 Dataflow 工作站服務帳戶
  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-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 工作者服務帳戶必須具備加密金鑰的 cloudkms.cryptoKeyVersions.useToDecrypt 權限。請確認工作者服務帳戶具備 Cloud KMS CryptoKey 解密者角色。詳情請參閱「Dataflow 安全性與權限」。

後續步驟