Menggunakan kunci enkripsi yang dikelola pelanggan

Secara default, Dataflow mengenkripsi konten pelanggan dalam penyimpanan. Dataflow menangani enkripsi untuk Anda tanpa tindakan tambahan dari Anda. Opsi ini disebut enkripsi default Google.

Jika ingin mengontrol kunci enkripsi, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) di Cloud KMS dengan layanan terintegrasi CMEK, termasuk Dataflow. Dengan menggunakan kunci Cloud KMS, Anda dapat mengontrol tingkat perlindungan, lokasi, jadwal rotasi, izin penggunaan dan akses, serta batas kriptografisnya. Dengan Cloud KMS, Anda juga dapat melacak penggunaan kunci, melihat log audit, dan mengontrol siklus proses kunci. Alih-alih Google yang memiliki dan mengelola kunci enkripsi kunci (KEK) simetris yang melindungi data Anda, Andalah yang mengontrol dan mengelola kunci ini di Cloud KMS.

Setelah Anda menyiapkan resource dengan CMEK, pengalaman mengakses resource Dataflow mirip dengan menggunakan enkripsi default Google. Untuk mengetahui informasi selengkapnya tentang opsi enkripsi Anda, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).

Anda dapat membuat pipeline streaming atau batch yang dilindungi dengan CMEK atau mengakses data yang dilindungi CMEK di sumber dan sink.

Kuota Cloud KMS dan Dataflow

Saat Anda menggunakan CMEK di Dataflow, project Anda dapat memakai kuota permintaan kriptografis Cloud KMS. Misalnya, pipeline Dataflow dapat menggunakan kuota ini saat pipeline Anda mengakses data yang dilindungi CMEK di sumber dan sink atau saat status pipeline yang dienkripsi CMEK diambil. Untuk informasi selengkapnya, lihat bagian Enkripsi lokasi status pipeline di halaman ini.

Operasi enkripsi dan dekripsi yang menggunakan kunci CMEK memengaruhi kuota Cloud KMS dengan cara berikut:

  • Untuk kunci software CMEK yang dihasilkan di Cloud KMS, tidak ada kuota Cloud KMS yang digunakan.
  • Untuk kunci hardware CMEK—terkadang disebut kunci Cloud HSM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud HSM dalam project yang berisi kunci tersebut.
  • Untuk kunci eksternal CMEK—terkadang disebut kunci Cloud EKM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud EKM dalam project yang berisi kunci tersebut.

Untuk informasi selengkapnya, lihat kuota Cloud KMS.

Dukungan dan batasan

  • Cloud KMS didukung dalam versi Apache Beam SDK berikut:

    • Java SDK versi 2.13.0 dan yang lebih baru
    • Python SDK versi 2.13.0 dan yang lebih baru
    • Go SDK versi 2.40.0 dan yang lebih baru
  • Cloud KMS dengan Dataflow mendukung kunci regional. Jika Anda mengganti region pekerja atau zona pipeline untuk menggunakan region selain yang terkait dengan kunci Anda, kunci regional tidak akan berfungsi.

  • Region untuk CMEK dan region untuk tugas Dataflow Anda harus sama.

  • Lokasi multi-region dan global tidak didukung. Anda tidak dapat menggunakan kunci global dan multi-regional dengan pipeline Dataflow.

Enkripsi artefak status pipeline

Data yang dibaca pipeline Dataflow dari sumber data yang ditentukan pengguna dienkripsi, kecuali untuk kunci data yang Anda tentukan untuk transformasi berbasis kunci dalam tugas streaming.

Untuk tugas batch, semua data, termasuk kunci data yang Anda tentukan untuk transformasi berbasis kunci, selalu dilindungi oleh enkripsi CMEK.

Untuk tugas streaming yang dibuat setelah 7 Maret 2024, semua data pengguna dienkripsi dengan CMEK.

Untuk tugas streaming yang dibuat sebelum 7 Maret 2024, kunci data yang digunakan dalam operasi berbasis kunci, seperti pembuatan periode, pengelompokan, dan penggabungan, tidak dilindungi oleh enkripsi CMEK. Untuk mengaktifkan enkripsi ini untuk tugas Anda, habiskan atau batalkan tugas, lalu mulai ulang.

Metadata tugas tidak dienkripsi dengan kunci Cloud KMS. Metadata tugas mencakup hal berikut:

  • Data yang disediakan pengguna, seperti Nama Tugas, nilai Parameter Tugas, dan Grafik Pipeline
  • Data yang dibuat sistem, seperti ID Tugas dan alamat IP pekerja

Enkripsi lokasi status pipeline

Lokasi penyimpanan berikut dilindungi dengan kunci Cloud KMS:

  • Persistent Disk yang terpasang ke pekerja Dataflow dan digunakan untuk penyimpanan status streaming dan shuffle berbasis Persistent Disk.
  • Status Shuffle Dataflow untuk pipeline batch.
  • Bucket Cloud Storage yang menyimpan data ekspor atau impor sementara. Dataflow hanya mendukung kunci default yang ditetapkan oleh pengguna di tingkat bucket.
  • Bucket Cloud Storage yang digunakan untuk menyimpan file biner yang berisi kode pipeline. Dataflow hanya mendukung kunci default yang ditetapkan oleh pengguna di tingkat bucket.
  • Bucket Cloud Storage yang digunakan untuk menyimpan data pipeline sampel, saat sampling data diaktifkan.
  • Status Streaming Engine Dataflow untuk pipeline streaming.

Kunci eksternal

Anda dapat menggunakan Cloud External Key Manager (Cloud EKM) untuk mengenkripsi data dalam Google Cloud menggunakan kunci eksternal yang Anda kelola.

Saat Anda menggunakan kunci Cloud EKM, Google tidak memiliki kontrol atas ketersediaan kunci yang dikelola secara eksternal. Jika kunci tidak tersedia selama periode pembuatan tugas atau pipeline, tugas atau pipeline Anda akan dibatalkan.

Untuk pertimbangan lainnya saat menggunakan kunci eksternal, lihat Cloud External Key Manager.

Sebelum memulai

  1. Pastikan Anda memiliki Apache Beam SDK untuk Java 2.13.0 atau yang lebih baru, Apache Beam SDK untuk Python 2.13.0 atau yang lebih baru, atau Apache Beam SDK untuk Go 2.40.0 atau yang lebih baru.

    Untuk informasi selengkapnya, lihat Menginstal Apache Beam SDK.

  2. Tentukan apakah Anda akan menjalankan Dataflow dan Cloud KMS di project Google Cloud yang sama atau di project yang berbeda. Halaman ini menggunakan konvensi berikut:

    • PROJECT_ID adalah project ID project yang menjalankan Dataflow.
    • PROJECT_NUMBER adalah nomor project dari project yang menjalankan Dataflow.
    • KMS_PROJECT_ID adalah project ID project yang menjalankan Cloud KMS.

    Untuk informasi tentang project ID dan nomor project Google Cloud, lihat Mengidentifikasi project.

  3. Di project Google Cloud yang ingin Anda jalankan Cloud KMS:

    1. Aktifkan Cloud KMS API.
    2. Buat key ring dan kunci seperti yang dijelaskan dalam Membuat kunci simetris. Cloud KMS dan Dataflow adalah layanan yang diregionalisasi. Region untuk CMEK dan region tugas Dataflow Anda harus sama. Jangan gunakan kunci global atau multi-regional dengan pipeline Dataflow Anda. Sebagai gantinya, gunakan kunci regional.

Memberikan izin Pengenkripsi/Pendekripsi

  1. Tetapkan peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Dataflow. Izin ini memberikan izin kepada akun layanan Dataflow untuk mengenkripsi dan mendekripsi dengan CMEK yang Anda tentukan. Jika Anda menggunakan konsol Google Cloud dan halaman Create job from template, izin ini akan otomatis diberikan dan Anda dapat melewati langkah ini.

    Gunakan Google Cloud CLI untuk menetapkan peran:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod. \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Ganti KMS_PROJECT_ID dengan ID project Google Cloud Anda yang menjalankan Cloud KMS, dan ganti PROJECT_NUMBER dengan nomor project (bukan project ID) project Google Cloud Anda yang menjalankan resource Dataflow.

  2. Tetapkan peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Compute Engine. Izin ini memberikan izin ke akun layanan Compute Engine Anda untuk mengenkripsi dan mendekripsi dengan CMEK yang Anda tentukan.

    Gunakan Google Cloud CLI untuk menetapkan peran:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system. \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Ganti KMS_PROJECT_ID dengan ID project Google Cloud Anda yang menjalankan Cloud KMS, dan ganti PROJECT_NUMBER dengan nomor project (bukan project ID) project Google Cloud Anda yang menjalankan resource Compute Engine.

Membuat pipeline yang dilindungi oleh Cloud KMS

Saat membuat pipeline batch atau streaming, Anda dapat memilih kunci Cloud KMS untuk mengenkripsi status pipeline. Status pipeline adalah data yang disimpan oleh Dataflow dalam penyimpanan sementara.

Antarmuka command line

Untuk membuat pipeline baru dengan status pipeline yang dilindungi oleh kunci Cloud KMS, tambahkan flag yang relevan ke parameter pipeline. Contoh berikut menunjukkan cara menjalankan pipeline penghitungan kata dengan Cloud KMS.

Java

Dataflow tidak mendukung pembuatan jalur Cloud Storage default untuk file sementara saat menggunakan kunci Cloud KMS. Penentuan gcpTempLocation wajib dilakukan.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

Dataflow tidak mendukung pembuatan jalur Cloud Storage default untuk file sementara saat menggunakan kunci Cloud KMS. Penentuan gcpTempLocation wajib dilakukan.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --region HOST_GCP_REGION \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Go

Dataflow tidak mendukung pembuatan jalur Cloud Storage default untuk file sementara saat menggunakan kunci Cloud KMS. Penentuan gcpTempLocation wajib dilakukan.

wordcount
  --project HOST_PROJECT_ID \
  --region HOST_GCP_REGION \
  --runner dataflow \
  --staging_location gs://STORAGE_BUCKET/staging \
  --temp_location gs://STORAGE_BUCKET/temp \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/output \
  --dataflow_kms_key=KMS_KEY

Konsol Google Cloud

  1. Buka antarmuka pemantauan Dataflow.
    Buka Antarmuka Web Dataflow
  2. Pilih Buat tugas dari template.
  3. Di bagian Enkripsi, pilih Kunci yang dikelola pelanggan.
Opsi enkripsi di halaman Buat tugas dari template untuk menggunakan
              kunci milik dan dikelola Google atau kunci yang dikelola pelanggan.

Saat pertama kali Anda mencoba menjalankan tugas dengan kunci Cloud KMS tertentu, akun layanan Compute Engine atau akun layanan Dataflow mungkin belum diberi izin untuk mengenkripsi dan mendekripsi menggunakan kunci tersebut. Dalam hal ini, pesan peringatan akan muncul untuk meminta Anda memberikan izin ke akun layanan.

Permintaan untuk memberikan izin mengenkripsi dan mendekripsi di akun layanan Compute Engine dan Dataflow menggunakan CMEK tertentu.

Memverifikasi penggunaan kunci Cloud KMS

Anda dapat memverifikasi apakah pipeline Anda menggunakan kunci Cloud KMS menggunakan Konsol Google Cloud atau Google Cloud CLI.

Konsol

  1. Buka antarmuka pemantauan Dataflow.
    Buka Antarmuka Web Dataflow
  2. Untuk melihat detail tugas, pilih tugas Dataflow Anda.
  3. Di panel samping Info tugas, untuk melihat jenis kunci, centang kolom Jenis enkripsi.

    • Untuk Jenis enkripsi: "Kunci yang Dikelola Google"
      Panel samping info tugas yang mencantumkan detail tugas Dataflow.
      Jenis kunci yang digunakan tugas Anda tercantum di kolom Jenis enkripsi.
    • Untuk Jenis enkripsi: "Kunci yang Dikelola Pelanggan"
      Panel samping info tugas yang mencantumkan detail tugas Dataflow.
      Jenis kunci yang digunakan tugas Anda tercantum di kolom Jenis enkripsi.

CLI

Jalankan perintah describe menggunakan gcloud CLI:

gcloud dataflow jobs describe JOB_ID

Telusuri baris yang berisi serviceKmsKeyName. Informasi ini menunjukkan bahwa kunci Cloud KMS digunakan untuk enkripsi status pipeline Dataflow.

Anda dapat memverifikasi penggunaan kunci Cloud KMS untuk mengenkripsi sumber dan sink dengan menggunakan halaman dan alat konsol Google Cloud dari sumber dan sink tersebut, termasuk Pub/Sub, Cloud Storage, dan BigQuery. Anda juga dapat memverifikasi penggunaan kunci Cloud KMS dengan melihat log audit Cloud KMS.

Menonaktifkan atau menghancurkan kunci

Jika karena alasan apa pun Anda mungkin perlu menonaktifkan atau menghancurkan kunci, Anda dapat menggunakan konsol Google Cloud. Operasi nonaktifkan dan hancurkan akan membatalkan tugas yang menggunakan kunci tersebut. Operasi ini bersifat permanen.

Jika Anda menggunakan Cloud EKM, nonaktifkan atau hancurkan kunci di pengelola kunci eksternal Anda.

Jika Anda menggunakan opsi Streaming Engine, sebaiknya ambil snapshot tugas sebelum menonaktifkan kunci.

Menghapus akses Dataflow ke kunci Cloud KMS

Anda dapat menghapus akses Dataflow ke kunci Cloud KMS dengan menggunakan langkah-langkah berikut:

  1. Cabut peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Dataflow menggunakan Konsol Google Cloud atau gcloud CLI.
  2. Cabut peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Compute Engine menggunakan konsol Google Cloud atau gcloud CLI.
  3. Secara opsional, Anda juga dapat menghancurkan materi versi kunci untuk lebih mencegah Dataflow dan layanan lainnya mengakses status pipeline.

Meskipun Anda dapat menghancurkan materi versi kunci, Anda tidak dapat menghapus kunci dan key ring. Key ring dan kunci tidak memiliki biaya yang akan ditagihkan atau batasan kuota, sehingga keberadaan keduanya tidak memengaruhi biaya atau batas produksi.

Tugas Dataflow secara berkala memvalidasi apakah akun layanan Dataflow berhasil menggunakan kunci Cloud KMS yang diberikan. Jika permintaan enkripsi atau dekripsi gagal, layanan Dataflow akan menghentikan semua penyerapan dan pemrosesan data sesegera mungkin. Dataflow akan segera mulai membersihkan resource Google Cloud yang dilampirkan ke tugas Anda.

Menggunakan sumber dan sink yang dilindungi dengan kunci Cloud KMS

Dataflow dapat mengakses sumber dan sink Google Cloud yang dilindungi oleh kunci Cloud KMS. Jika tidak membuat objek baru, Anda tidak perlu menentukan kunci Cloud KMS dari sumber dan sink tersebut. Jika pipeline Dataflow dapat membuat objek baru di sink, Anda harus menentukan parameter pipeline. Parameter ini menentukan kunci Cloud KMS untuk sink tersebut dan meneruskan kunci Cloud KMS ini ke metode konektor I/O yang sesuai.

Untuk sumber dan sink pipeline Dataflow yang tidak mendukung CMEK yang dikelola oleh Cloud KMS, setelan CMEK Dataflow tidak relevan.

Izin kunci Cloud KMS

Saat mengakses layanan yang dilindungi dengan kunci Cloud KMS, pastikan Anda telah menetapkan peran Cloud KMS CryptoKey Encrypter/Decrypter ke layanan tersebut. Akun tersebut memiliki bentuk berikut:

  • Cloud Storage: service-{project_number}@gs-project-accounts.
  • BigQuery: bq-{project_number}@bigquery-encryption.
  • Pub/Sub: service-{project_number}@gcp-sa-pubsub.

Cloud Storage

Jika Anda ingin melindungi bucket sementara dan staging yang ditentukan dengan parameter pipeline TempLocation/temp_location dan stagingLocation/staging_location, lihat menyiapkan bucket Cloud Storage yang dilindungi CMEK.

BigQuery

Java

Gunakan metode with_kms_key() pada nilai yang ditampilkan dari BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows(), dan BigQueryIO.write().

Anda dapat menemukan contohnya di repositori GitHub Apache Beam.

Python

Gunakan argumen kms_key di BigQuerySource dan BigQuerySink.

Anda dapat menemukan contohnya di repositori GitHub Apache Beam.

Go

BigQuery IOs tidak mendukung penggunaan kunci kms di Go.

Pub/Sub

Dataflow menangani akses ke topik yang dilindungi CMEK menggunakan konfigurasi CMEK topik Anda.

Untuk membaca dari dan menulis ke topik Pub/Sub yang dilindungi CMEK, lihat petunjuk Pub/Sub untuk menggunakan CMEK.

Logging audit untuk penggunaan kunci Cloud KMS

Dataflow memungkinkan Cloud KMS menggunakan Cloud Audit Logs untuk mencatat operasi kunci, seperti mengenkripsi dan mendekripsi. Dataflow menyediakan ID tugas sebagai konteks ke pemanggil Cloud KMS. ID ini memungkinkan Anda melacak setiap instance kunci Cloud KMS tertentu yang digunakan untuk tugas Dataflow.

Cloud Audit Logs menyimpan log audit untuk setiap project, folder, dan organisasi Google Cloud. Anda memiliki beberapa opsi untuk melihat log audit Cloud KMS.

Cloud KMS menulis log audit Aktivitas Admin untuk tugas Dataflow Anda dengan enkripsi CMEK. Log ini mencatat operasi yang mengubah konfigurasi atau metadata resource. Anda tidak dapat menonaktifkan log audit Aktivitas Admin.

Jika diaktifkan secara eksplisit, Cloud KMS akan menulis log audit Akses Data untuk tugas Dataflow Anda dengan enkripsi CMEK. Log audit Akses Data berisi panggilan API yang membaca konfigurasi atau metadata resource. Log ini juga berisi panggilan API berbasis pengguna yang membuat, mengubah, atau membaca data resource yang disediakan pengguna. Untuk melihat petunjuk cara mengaktifkan sebagian atau semua log audit Akses Data Anda, buka Mengonfigurasi Log akses data.

Harga

Anda dapat menggunakan kunci enkripsi Cloud KMS dengan Dataflow di semua region Dataflow tempat Cloud KMS tersedia.

Integrasi ini tidak menimbulkan biaya tambahan di luar operasi kunci, yang ditagih ke project Google Cloud Anda. Setiap kali akun layanan Dataflow menggunakan kunci Cloud KMS Anda, operasi akan ditagih sesuai tarif operasi kunci Cloud KMS.

Untuk mengetahui informasi selengkapnya, lihat detail harga Cloud KMS.

Pemecahan masalah

Gunakan saran di bagian ini untuk memecahkan masalah error.

Cloud KMS tidak dapat divalidasi

Alur kerja Anda mungkin gagal dengan error berikut:

Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.

Untuk memperbaiki masalah ini, pastikan Anda telah meneruskan jalur kunci lengkap. Sepertinya projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Cari kemungkinan kesalahan ketik di jalur kunci.

Izin kunci Cloud KMS ditolak

Alur kerja Anda mungkin gagal dengan error berikut:

Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.

Untuk memperbaiki masalah ini, pastikan project ID yang disebutkan di jalur kunci sudah benar. Selain itu, pastikan Anda memiliki izin untuk menggunakan kunci.

Lokasi kunci Cloud KMS tidak cocok dengan lokasi tugas Dataflow

Alur kerja Anda mungkin gagal dengan error berikut:

Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Make sure the region of the KMS key matches the Dataflow region.

Untuk memperbaiki masalah ini, jika Anda menggunakan kunci regional, pastikan kunci Cloud KMS berada di region yang sama dengan tugas Dataflow.