Mengenkripsi parameter template menggunakan Cloud KMS

Halaman ini menjelaskan cara mengenkripsi data sensitif dalam parameter template yang disediakan Google, dengan menggunakan kunci enkripsi dengan Cloud KMS.

Ringkasan

Beberapa template yang disediakan Google memungkinkan Anda mengenkripsi data sensitif dalam parameter template, seperti nama pengguna, sandi, string koneksi JDBC, dan kunci API. Jika didukung, template ini menyertakan parameter untuk menentukan kunci enkripsi Cloud KMS, seperti:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Untuk menggunakan kunci enkripsi Cloud KMS dengan template ini, lakukan langkah-langkah berikut:

  1. Berikan peran Cloud KMS CryptoKey Decrypter ke akun layanan pekerja Dataflow.
  2. Buat kunci enkripsi.
  3. Gunakan kunci untuk mengenkripsi data.
  4. Mengenkode data terenkripsi dengan base64.
  5. Saat Anda menjalankan template, tentukan kunci enkripsi dan gunakan nilai parameter yang dienkripsi.

Jika menentukan kunci enkripsi, Anda harus mengenkripsi semua parameter yang mendukung enkripsi. Untuk memahami parameter mana yang dapat dienkripsi, lihat dokumentasi untuk template tertentu.

Contoh

Contoh berikut menggunakan template MySQL ke BigQuery.

  1. Buat key ring.

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Buat kunci enkripsi.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Enkripsi dan enkode base64 nama pengguna, sandi, dan string koneksi JDBC.

    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. Jalankan template.

    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
    

Pemecahan masalah

Bagian ini berisi informasi pemecahan masalah untuk mengenkripsi parameter template.

Izin ditolak

Saat menjalankan tugas, Anda akan melihat error PERMISSION_DENIED dalam log tugas, yang mirip dengan berikut ini:

PERMISSION_DENIED: Permission cloudkms.cryptoKeyVersions.useToDecrypt denied on
resource RESOURCE_PATH (or it may not exist)

Untuk mendekripsi data, akun layanan pekerja Dataflow memerlukan izin cloudkms.cryptoKeyVersions.useToDecrypt untuk kunci enkripsi. Pastikan akun layanan pekerja memiliki peran Cloud KMS CryptoKey Decrypter. Untuk mengetahui informasi selengkapnya, lihat Keamanan dan izin Dataflow.

Langkah selanjutnya