…
Saat mengadopsi komputasi awan, salah satu permintaan utama terutama di dalam industri yang diatur (misalnya keuangan, perawatan kesehatan, pemerintah, telekomunikasi, dll.) Adalah kemampuan untuk memiliki kendali penuh atas data. Dalam pengalaman saya dengan tim jasa keuangan, kontrol penuh atas data biasanya diterjemahkan menjadi
- Mengontrol lokasi pemrosesan data dan sistem penyimpanan data
- Mengontrol kunci untuk mengenkripsi pipa data
Memiliki kontrol penuh pada lokasi dan enkripsi adalah mode operasi yang relatif baik untuk sistem penyimpanan baik di dalam maupun di luar premis. Namun mengelola lokasi dan enkripsi untuk streaming analitik membutuhkan sedikit lebih banyak pertimbangan karena melibatkan banyak komponen dalam pemrosesan dan dalam analisis streaming Anda perlu melindungi data saat istirahat serta selama pemrosesan.
Posting blog ini adalah upaya saya untuk menunjukkan bagaimana pipa analitik streaming di Google Cloud menggunakan Pubsub, Apache Beam (pada Dataflow Runner), Cloud Storage dan BigQuery dapat dieksekusi di satu wilayah dan dilindungi ujung ke ujung menggunakan Kunci Enkripsi yang dikelola pelanggan (CMEK). Pipa ini cukup sederhana seperti yang ditunjukkan di bawah ini.
Untuk menjalankan pipa ini, saya perlu mengatur cincin dan kunci kunci enkripsi serta sumber, wastafel, dan komponen lainnya.
Tetapkan metadata tingkat proyek
PROJECT_ID=XXXXXXXXXXXXXX PROJECT_NUMBER=nnnnnnnnnnn REGION=europe-west2 TOPIC_NAME=str-pl-pubsub-topic DATASET_NAME=da_streaming_pipeline TABLE_NAME_1=cc_account_info STAGING_LOCATION=gs://da_streaming_pipeline/stage TEMP_LOCATION=gs://da_streaming_pipeline/temp export PROJECT_ID PROJECT_NUMBER REGION TOPIC_NAME DATASET_NAME TABLE_NAME_1 STAGING_LOCATION TEMP_LOCATION
Kunci Enkripsi Pengaturan
Di sini saya akan membuat dua set kunci enkripsi. Satu kunci regional untuk topik pubsub dan dataset BigQuery dan kunci global untuk DataFlow. Kunci global diperlukan karena DataFlow tidak memiliki titik akhir di Eropa-West2 (London). Untuk memproses data menggunakan node pekerja di Eropa-West2 (London), konfigurasi adalah menggunakan titik akhir Dataflow di Eropa-West1 (Belgia) dan Zone for Worker Node di Eropa-West2 (London). Kunci global tidak diperlukan dalam skenario di mana node pekerja Dataflow berada di wilayah yang sama dengan titik akhir regionalnya.
Create a CMEK key in London which should be used by PubSub and BigQuery.
gcloud kms keyrings create str-pl-london-kr --location ${REGION}
gcloud kms keys create str-pl-london-key01 --location ${REGION} --keyring str-pl-london-kr --purpose encryption
Create a Global CMEK key which should be used by Dataflow.
gcloud kms keyrings create str-pl-global-kr --location global
gcloud kms keys create str-pl-global-key01 --location global --keyring str-pl-global-kr --purpose encryption
Hibah izin yang diperlukan untuk akun layanan
Hibah izin untuk mengenkripsi dan mendekripsi data menggunakan CMEK ke akun layanan untuk pubsub, bigquery dan dataflow
Grant permission to PubSub service account
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" --role="roles/cloudkms.cryptoKeyEncrypterDecrypter"
Grant permission to BigQuery service accounts
gcloud kms keys add-iam-policy-binding --project=data-analytics-bk --member serviceAccount:bq-${PROJECT_NUMBER}@bigquery-encryption.iam.gserviceaccount.com --role roles/cloudkms.cryptoKeyEncrypterDecrypter --location=${REGION} --keyring=str-pl-london-kr str-pl-london-key01
Grant permission to Dataflow and Compute engine service accounts as required by Dataflow.
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:service-${PROJECT_NUMBER}@dataflow-service-producer-prod.iam.gserviceaccount.com --role roles/cloudkms.cryptoKeyEncrypterDecrypter
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:service-${PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Grant permission to Storage Service account to use Cloud KMS key
gsutil kms authorize -p ${PROJECT_ID} -k projects/${PROJECT_ID}/locations/${REGION}/keyRings/str-pl-london kr/cryptoKeys/str-pl-london-key01
Mengatur topik pubsub untuk konsumsi data
Build KEY Resource ID
KEY_ID=projects/${PROJECT_ID}/locations/${REGION}/keyRings/str-pl-london-kr/cryptoKeys/str-pl-london-key01
export KEY_ID
Create PubSub Topic
gcloud pubsub topics create ${TOPIC_NAME} --message-storage-policy-allowed-regions=${REGION} --topic-encryption-key=$KEY_ID
Confirm that the key has been created using
gcloud pubsub topics describe ${TOPIC_NAME}
Mengatur Dataset dan Tabel BigQuery
Create a dataset (da_streaming_pipeline) in London region with default encryption using CMEK key ${KEY_ID}.
bq --location=${REGION} mk --dataset --description "dataset for streaming pipeline sink" --default_kms_key ${KEY_ID} ${PROJECT_ID}:${DATASET_NAME}
Create Sink TABLE for Raw data
bq query --use_legacy_sql=false "
CREATE TABLE ${DATASET_NAME}.${TABLE_NAME_1}
(
name STRING,
address STRING,
country_code STRING,
city STRING,
bank_iban STRING,
company STRING,
credit_card INT64,
credit_card_provider STRING,
credit_card_expires STRING,
date_record_created DATETIME,
employement STRING,
emp_id STRING,
name_prefix STRING,
phone_number STRING
)
OPTIONS(
description='Sink table to collect data after processing by dataflow for streaming pipeline'
)
"
Mengatur ember GCS yang dilindungi CMEK
Setup CMEK protected GCS buckets for Staging and Temp locations
gsutil mb -c regional -l europe-west2 gs://da_streaming_pipeline
gsutil kms encryption -k projects/${PROJECT_ID}/locations/${REGION}/keyRings/str-pl-london-kr/cryptoKeys/str-pl-london-key01 gs://da_streaming_pipeline
Menjalankan pipa streaming
Untuk pipa ini saya menggunakan balok Python SDK versi 2.16 dengan Python 2.7. Pipa ini cukup sederhana seperti yang dijelaskan di atas. Skrip generator data yang ditulis dalam Python menghasilkan detail pelanggan bank termasuk alamat dan informasi kartu kredit menggunakan Paket Python Faker dan mendorong ke topik pubsub. Kode untuk generator data ini tersedia dari saya Repositori GitHub.
Menghasilkan data dan konsumsi ke pubsub
./datagen.py -d pubsub -p data-analytics-bk -t str-pl-pubsub-topic -n 100000
Mulai Pipa Pemrosesan Data Menggunakan DataFlow Runner
Kode untuk pipa ini tersedia dari saya Repositori GitHub. Kode pipa inti ditunjukkan di bawah ini. Perlu dicatat bahwa kode pipa balok atau opsi pipa tidak memiliki instruksi khusus untuk menangani enkripsi yang dikelola pelanggan atau pembatasan geo. Itu adalah parameter konfigurasi sumber, wastafel dan dataflow.
with beam.Pipeline(options=pipeline_options) as pipeline:
(
pipeline
| "Read PubSub messages" >> beam.io.ReadFromPubSub(topic=pubsub_topic)
| "Decode PubSub messages" >> beam.Map(lambda x: x.decode('utf-8'))
| "Convert to Dictionary" >> beam.ParDo(convertToDict())
| "Write to BigQuery" >> beam.io.WriteToBigQuery('penyimpanan:da_streaming_pipeline.cc_account_info'.format(project_name), schema=schema, write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND)
)
Perintah berikut akan memulai pipa streaming menggunakan Google Dataflow Runner.
python -m streaming_simple_pipeline \ --project_name XXXXXXXXXXXXXX \ --pubsub_topic projects/XXXXXXXXXXXX/topics/str-pl-pubsub-topic \ --streaming \ --runner Dataflow \ --staging_location gs://da_streaming_pipeline/stage \ --temp_location gs://da_streaming_pipeline/temp \ --region europe-west1 --zone=europe-west2-b \ --dataflow_kms_key projects/XXXXXXXXXXXX/locations/global/keyRings/str-pl-global-kr/cryptoKeys/str-pl-global-key01
Dari Cloud Dataflow Console, Anda dapat melihat bahwa pipa menggunakan kunci yang dikelola pelanggan dan dieksekusi di zona tertentu di wilayah GCP Eropa-West2 (London).

Mencabut kunci
Untuk menghentikan akses ke data, kunci enkripsi dapat dicabut yang akan mengakibatkan kegagalan pipa dataflow. Selain itu, setiap upaya untuk mengakses data dari wastafel akan mengembalikan kesalahan.
Revoke keys gcloud kms keys versions disable 1 --location europe-west2 --keyring str-pl-london-kr --key str-pl-london-key01 gcloud kms keys versions disable 1 --location global --keyring str-pl-global-kr --key str-pl-global-key01
Kesalahan Pipa Dataflow:

Kesalahan dikembalikan dari BigQuery:

Pengamatan lainnya
Biasanya kinerja adalah salah satu kekhawatiran saat mengenkripsi dan mendekripsi data. Dalam tes kecil saya, saya tidak mengamati perbedaan kinerja saat menggunakan CMEK vs Google Managed Key untuk pipa. Namun kinerja, sampai batas tertentu, akan tergantung pada jenis dan volume data dan beban kerja dan karenanya layak menghabiskan beberapa siklus pengujian untuk menguji kinerja pipa saat menggunakan CMEK.
Semoga posting ini bermanfaat bagi orang-orang yang mempertimbangkan untuk mengembangkan dan menggunakan pipa streaming berbasis balok Apache di Google Cloud dengan restriksi geo dan memiliki kebutuhan untuk melindungi menggunakan CMEK. Terima kasih sudah membaca.