Menggunakan kunci enkripsi yang dikelola pelanggan

Halaman ini menjelaskan cara menggunakan kunci enkripsi Cloud Key Management Service (Cloud KMS) dengan Dataflow. Kunci enkripsi yang dikelola pelanggan (CMEK) memungkinkan enkripsi data dalam penyimpanan dengan kunci yang dapat Anda kontrol melalui Cloud KMS. Anda dapat membuat pipeline streaming atau batch yang dilindungi dengan CMEK atau mengakses data yang dilindungi CMEK di sumber dan sink.

Anda juga dapat menggunakan kunci Cloud EKM atau Cloud HSM. Saat Anda menggunakan CMEK di Dataflow, project Anda dapat memakai kuota permintaan kriptografi 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 mengetahui informasi selengkapnya, lihat bagian Enkripsi lokasi status pipeline di halaman ini. Operasi enkripsi dan dekripsi menggunakan kunci CMEK memengaruhi kuota Cloud KMS hanya jika Anda menggunakan kunci hardware (Cloud HSM) atau kunci eksternal (Cloud EKM). Untuk informasi lebih lanjut, lihat Kuota Cloud KMS.

Dengan Cloud External Key Manager (Cloud EKM), Anda dapat menggunakan kunci yang Anda kelola dalam partner pengelolaan kunci eksternal yang didukung untuk melindungi data dalam Google Cloud. Anda dapat melindungi data dalam penyimpanan di layanan integrasi CMEK yang didukung atau dengan memanggil Dataflow API secara langsung.

Untuk mengetahui informasi selengkapnya, lihat opsi enkripsi di Google Cloud.

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 multiregional 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 windowing, pengelompokan, dan penggabungan, tidak dilindungi oleh enkripsi CMEK. Untuk mengaktifkan enkripsi ini bagi tugas Anda, kuras atau batalkan tugas, lalu mulai ulang tugas.

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 dihasilkan 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 pengacakan 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 pada level bucket.
  • Bucket Cloud Storage yang digunakan untuk menyimpan file biner yang berisi kode pipeline. Dataflow hanya mendukung kunci default yang ditetapkan oleh pengguna pada level bucket.
  • Bucket Cloud Storage yang digunakan untuk menyimpan sampel data pipeline, jika sampling data diaktifkan.
  • Status Dataflow Streaming Engine 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 menjadi 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 versi yang lebih baru.

    Untuk mengetahui 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 dari project yang menjalankan Dataflow.
    • PROJECT_NUMBER adalah nomor project untuk project yang menjalankan Dataflow.
    • KMS_PROJECT_ID adalah project ID untuk project yang menjalankan Cloud KMS.

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

  3. Pada project Google Cloud yang Anda inginkan untuk menjalankan Cloud KMS:

    1. Aktifkan Cloud KMS API.
    2. Buat key ring dan kunci seperti yang dijelaskan dalam Membuat kunci simetris. Cloud KMS dan Dataflow merupakan layanan regional. 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 Encrypter/Decrypter

  1. Tetapkan peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Dataflow. Izin ini memberikan izin ke akun layanan Dataflow Anda untuk mengenkripsi dan mendekripsi dengan CMEK yang Anda tentukan. Jika Anda menggunakan konsol Google Cloud dan halaman Create job from template, izin ini diberikan secara otomatis 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.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

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

  2. Tetapkan peran Cloud KMS CryptoKey Encrypter/Decrypter ke akun layanan Compute Engine. Dengan izin ini, akun layanan Compute Engine Anda memiliki izin untuk mengenkripsi dan mendekripsi informasi dengan CMEK yang ditentukan.

    Gunakan Google Cloud CLI untuk menetapkan peran:

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

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

Membuat pipeline yang dilindungi oleh Cloud KMS

Saat membuat pipeline streaming atau batch, 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 jumlah kata dengan Cloud KMS.

Java

Dataflow tidak mendukung pembuatan jalur Cloud Storage default untuk file sementara saat menggunakan kunci Cloud KMS. gcpTempLocation harus ditentukan.

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. gcpTempLocation harus ditentukan.

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. gcpTempLocation harus ditentukan.

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 Create job from template.
  3. Di bagian Enkripsi, pilih Kunci yang dikelola pelanggan.
Opsi enkripsi di halaman Buat tugas dari template untuk menggunakan kunci yang 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 Anda mungkin tidak diberi izin untuk mengenkripsi dan mendekripsi data menggunakan kunci tersebut. Dalam hal ini, pesan peringatan akan muncul untuk meminta Anda memberikan izin ke akun layanan Anda.

Perintah untuk memberikan izin enkripsi dan dekripsi di akun layanan Compute Engine dan Dataflow Anda 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, periksa kolom Jenis enkripsi.

    • Untuk jenis Enkripsi: "Kunci yang dikelola Google"
      Panel samping info tugas yang mencantumkan detail tugas Dataflow.
      Jenis kunci yang digunakan oleh 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 oleh 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 menggunakan halaman konsol Google Cloud serta alat 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 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 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. Jika ingin, Anda juga dapat menghancurkan materi versi kunci agar Dataflow dan layanan lainnya tidak 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 dapat ditagih atau batasan kuota, sehingga keberadaannya yang berkelanjutan tidak memengaruhi biaya atau batas produksi.

Tugas Dataflow secara berkala memvalidasi apakah akun layanan Dataflow dapat 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 terpasang 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 Dataflow CMEK 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.iam.gserviceaccount.com
  • BigQuery: bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Pub/Sub: service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

Jika Anda ingin melindungi bucket staging dan sementara 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() untuk 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 IO tidak mendukung penggunaan kunci kms di Go.

Pub/Sub

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

Untuk membaca 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 ke dalam log, seperti mengenkripsi dan mendekripsi. Dataflow memberikan ID tugas sebagai konteks untuk pemanggil Cloud KMS. ID ini memungkinkan Anda melacak setiap instance jika kunci Cloud KMS tertentu digunakan untuk tugas Dataflow.

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

Cloud KMS menulis log audit Aktivitas Admin untuk tugas Dataflow Anda dengan enkripsi CMEK. Operasi pencatatan log ini 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 ditagihkan 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 melewati jalur kunci lengkap. Namanya seperti 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 tersebut.

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.