Agar kredensial sensitif seperti kunci API dan sandi tidak muncul dalam teks biasa di konfigurasi tugas Dataflow, Anda dapat mengenkripsi parameter template yang disediakan Google menggunakan Cloud Key Management Service (Cloud KMS). Gunakan informasi berikut untuk mengenkripsi parameter value dengan kunci Cloud KMS dan meneruskan ciphertext (ciphertexts) ke pipeline Anda.
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:
KMSEncryptionKeytokenKMSEncryptionKeyapiKeyKMSEncryptionKey
Untuk menggunakan kunci enkripsi Cloud KMS dengan template ini, lakukan langkah-langkah berikut:
- Berikan peran Cloud KMS CryptoKey Decrypter kepada akun layanan worker Dataflow.
- Buat kunci enkripsi.
- Gunakan kunci untuk mengenkripsi data.
- Enkode data terenkripsi dengan base64.
- 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.
Buat key ring.
gcloud kms keyrings create "KEY_RING_NAME" \ --location "global"Membuat kunci enkripsi.
gcloud kms keys create "KEY_NAME" \ --location "global" \ --keyring "KEY_RING_NAME" \ --purpose "encryption"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`Jalankan template.
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
Pemecahan masalah
Bagian ini berisi informasi pemecahan masalah untuk mengenkripsi parameter template.
Izin ditolak
Saat menjalankan tugas, Anda akan melihat error PERMISSION_DENIED di 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 worker Dataflow memerlukan izin cloudkms.cryptoKeyVersions.useToDecrypt untuk kunci enkripsi. Pastikan akun layanan worker memiliki peran Cloud KMS CryptoKey Decrypter. Untuk mengetahui informasi selengkapnya, lihat Keamanan dan izin Dataflow.
Langkah berikutnya
- Pelajari Cloud Key Management Service lebih lanjut.
- Lihat daftar template yang disediakan Google.