Tutorial ini menunjukkan cara melakukan de-identifikasi data saat membuat kueri tabel dari BigQuery menggunakan fungsi jarak jauh dan Perlindungan Data Sensitif. Pendekatan ini berguna untuk membersihkan hasil kueri real-time guna meminimalkan akses ke data yang tidak diperlukan untuk analisis.
Tutorial ini menunjukkan enkripsi dan dekripsi data dalam pengiriman. Untuk informasi tentang penggunaan Perlindungan Data Sensitif untuk mengenkripsi data dalam penyimpanan, lihat De-identifikasi data sensitif dalam penyimpanan.
Tutorial ini ditujukan untuk audiens yang tanggung jawabnya mencakup keamanan data, pemrosesan data, atau analisis data. Panduan ini mengasumsikan bahwa Anda sudah memahami pemrosesan data dan privasi data; Anda tidak perlu menjadi ahlinya. Panduan ini juga mengasumsikan bahwa Anda dapat menjalankan skrip Cloud Shell dan SQL dasar.
Tutorial ini menggunakan fungsi berbasis SQL, BigQuery, fungsi jarak jauh, Cloud Run, dan Sensitive Data Protection.
Teknik de-identifikasi, seperti enkripsi, mengaburkan ID sensitif mentah dalam data Anda. Teknik ini memungkinkan Anda mempertahankan utilitas data Anda untuk bergabung atau menganalisis, sekaligus mengurangi risiko penanganan data.
Perusahaan mungkin memiliki kebijakan atau persyaratan peraturan untuk hanya menyimpan data yang dideidentifikasi di data warehouse cloud mereka. Selain itu, mereka mungkin perlu mengidentifikasi ulang data yang dide-identifikasi secara efisien untuk pembuatan laporan.
Untuk meminimalkan risiko penanganan data sensitif dalam jumlah besar, Anda dapat menggunakan pipeline transformasi data otomatis untuk membuat set data yang tidak teridentifikasi. Anda dapat menggunakan tutorial ini untuk mengganti pipeline tersebut dengan kueri SQL hanya untuk re-identifikasi atau de-identifikasi dan re-identifikasi. Tutorial ini membantu Anda melakukan de-identifikasi dan re-identifikasi menggunakan layanan pusat yang dihosting di Cloud Run. Anda dapat menggunakan layanan pusat ini di seluruh organisasi tanpa perlu menyiapkan atau mengelola cluster Dataflow.
Perlindungan Data Sensitif dapat mengklasifikasikan set data dengan memeriksa data untuk menemukan informasi sensitif. Sensitive Data Protection memiliki lebih dari 150 pengklasifikasi bawaan, yang disebut infoTypes. Penggunaan Cloud Data Loss Prevention API untuk melakukan de-identifikasi data memerlukan pipeline data dan aplikasi. Tutorial ini bertujuan untuk membantu analis, engineer, atau ilmuwan data Anda mencapai hasil yang sama melalui fungsi SQL.
Di akhir tutorial ini, Anda akan dapat menulis kueri yang mirip dengan berikut; data sensitif akan dideidentifikasi dan diidentifikasi ulang dalam hasil kueri.
SELECT
pii_column,
fns.dlp_freetext_encrypt(pii_column) AS dlp_encrypted,
fns.dlp_freetext_decrypt(fns.dlp_freetext_encrypt(pii_column)) AS dlp_decrypted
FROM
UNNEST(
[
'My name is John Doe. My email is john.doe@example.com']) AS pii_column
Outputnya mirip dengan hal berikut ini:
Baris | pii_column |
dlp_encrypted |
dlp_decrypted |
---|---|---|---|
1 |
My name is John Doe. My email is john.doe@example.com |
My name is John Doe. My email is
BQ_TRF_EMAIL(40):AQy6lGvwKR+AiiRqJpEr+nBzZUzOcjXkXamUugU= |
My name is John Doe. My email is john.doe@example.com |
Arsitektur
Diagram berikut menunjukkan cara tutorial ini menggunakan BigQuery sebagai data warehouse, Sensitive Data Protection untuk melakukan de-identifikasi dan mengidentifikasi ulang data, dan Cloud Run untuk menghosting fungsi jarak jauh.
Tujuan
- Deploy layanan Cloud Run yang menyediakan fungsi penghapusan identitas dari Perlindungan Data Sensitif.
- Buat fungsi jarak jauh BigQuery yang menggunakan template de-identifikasi Sensitive Data Protection.
- Memverifikasi enkripsi data di BigQuery menggunakan kueri SQL.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Artifact Registry, BigQuery, BigQuery Connection API, Cloud Build, Cloud Data Loss Prevention API, Cloud Key Management Service, Cloud Run, Container Registry, Identity and Access Management, Resource Manager, Secret Manager, and Service Usage:
gcloud services enable artifactregistry.googleapis.com
bigquery.googleapis.com bigqueryconnection.googleapis.com cloudbuild.googleapis.com cloudkms.googleapis.com cloudresourcemanager.googleapis.com containerregistry.googleapis.com dlp.googleapis.com iam.googleapis.com run.googleapis.com secretmanager.googleapis.com serviceusage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Artifact Registry, BigQuery, BigQuery Connection API, Cloud Build, Cloud Data Loss Prevention API, Cloud Key Management Service, Cloud Run, Container Registry, Identity and Access Management, Resource Manager, Secret Manager, and Service Usage:
gcloud services enable artifactregistry.googleapis.com
bigquery.googleapis.com bigqueryconnection.googleapis.com cloudbuild.googleapis.com cloudkms.googleapis.com cloudresourcemanager.googleapis.com containerregistry.googleapis.com dlp.googleapis.com iam.googleapis.com run.googleapis.com secretmanager.googleapis.com serviceusage.googleapis.com
Menyiapkan lingkungan
Pada Cloud Shell, clone repositori sumber:
git clone https://github.com/GoogleCloudPlatform/bigquery-dlp-remote-function.git
Buka direktori untuk tutorial ini:
cd bigquery-dlp-remote-function/
Men-deploy resource menggunakan skrip
Jika Anda ingin menggunakan skrip deployment tanpa melakukan penyesuaian, ikuti langkah-langkah berikut. Jika Anda ingin menyesuaikan deployment, lewati bagian ini dan lihat Men-deploy solusi yang disesuaikan secara manual.
Tetapkan nilai untuk kolom PROJECT_ID dan REGION:
# Project ID of the Google Cloud project PROJECT_ID="PROJECT_ID" # Google Cloud region to use for deployment of resources # Refer to https://cloud.google.com/about/locations REGION="REGION"
Ganti kode berikut:
- PROJECT_ID: ID project untuk tutorial ini.
- REGION: region tempat
Anda ingin menyimpan dan memproses data—misalnya,
us-west1
. Berikan region, bukan zona.
Opsional: Jika Anda memiliki template pemeriksaan yang ingin digunakan, tetapkan kolom DLP_INSPECT_TEMPLATE ke nama resource lengkap template pemeriksaan tersebut. Template inspeksi harus berada di region yang sama dengan yang Anda tetapkan di kolom REGION.
Pastikan template pemeriksaan menyertakan semua infoTypes yang digunakan dalam template de-identifikasi.
Jika Anda melewati langkah ini, Sensitive Data Protection akan memeriksa data dengan kumpulan detektor infoType default sistem.
DLP_INSPECT_TEMPLATE="DLP_INSPECT_TEMPLATE"
Ganti DLP_INSPECT_TEMPLATE dengan nama resource lengkap template pemeriksaan Anda—misalnya,
projects/PROJECT_ID/locations/REGION/inspectTemplates/TEMPLATE_ID
.Lakukan autentikasi menggunakan Kredensial Default Aplikasi:
gcloud auth application-default login && \ gcloud auth application-default set-quota-project "${PROJECT_ID}"
Lakukan inisialisasi dan jalankan skrip Terraform untuk membuat semua resource:
terraform init && \ terraform apply \ -var "project_id=${PROJECT_ID}" \ -var "region=${REGION}" \ -var "dlp_inspect_template_full_path=${DLP_INSPECT_TEMPLATE}"
Sistem menampilkan semua tindakan yang akan dilakukan Terraform. Tinjau tindakan. Untuk melanjutkan, masukkan
yes
.Verifikasi bahwa data dapat dienkripsi dan didekripsi.
Men-deploy solusi yang disesuaikan secara manual
Jika Anda ingin menyesuaikan deployment, ikuti langkah-langkah berikut. Jika Anda ingin menggunakan skrip deployment yang disediakan tanpa penyesuaian atau langkah-langkah manual, lihat Men-deploy resource menggunakan skrip.
Menetapkan variabel lingkungan
Di Cloud Shell, tetapkan variabel lingkungan berikut:
PROJECT_ID="PROJECT_ID"
REGION="REGION"
CLOUD_RUN_SERVICE_NAME="CLOUD_RUN_SERVICE_NAME"
ARTIFACT_REGISTRY_NAME="ARTIFACT_DOCKER_REGISTRY_NAME"
Ganti kode berikut:
- PROJECT_ID: ID project untuk tutorial ini.
- REGION: region tempat
Anda ingin menyimpan dan memproses data—misalnya,
us-west1
. Berikan region, bukan zona. - CLOUD_RUN_SERVICE_NAME: nama untuk layanan Cloud Run baru. Masukkan maksimum 15 karakter.
- ARTIFACT_REGISTRY_NAME: nama untuk Artifact Registry baru untuk menyimpan image container.
Membuat akun layanan untuk layanan Cloud Run
Buat akun layanan:
RUNNER_SA_NAME="${CLOUD_RUN_SERVICE_NAME}-runner" RUNNER_SA_EMAIL="${RUNNER_SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" gcloud iam service-accounts create "${RUNNER_SA_NAME}" \ --project="${PROJECT_ID}" \ --description "Runner for BigQuery remote function execution" \ --display-name "${RUNNER_SA_NAME}"
Berikan peran yang diperlukan untuk Perlindungan Data Sensitif.
Berikan peran DLP Reader:
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${RUNNER_SA_EMAIL}" \ --role='roles/dlp.reader'
Berikan peran Pengguna DLP:
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${RUNNER_SA_EMAIL}" \ --role='roles/dlp.user'
Men-deploy layanan Cloud Run
Untuk men-deploy aplikasi, ikuti langkah-langkah berikut:
Opsional: Anda dapat mengubah nilai default dengan mengubah variabel lingkungan atau memperbarui file
src/main/resources/aes.properties
.Buat repositori Artifact Registry untuk menyimpan image container fungsi:
gcloud artifacts repositories create "${ARTIFACT_REGISTRY_NAME}" \ --repository-format=docker \ --location="${REGION}" \ --description="Container images repository for BigQuery Functions" \ --project="${PROJECT_ID}"
Kompilasi aplikasi dan deploy di Cloud Run menggunakan Cloud Build:
gcloud builds submit \ --project ${PROJECT_ID} \ --substitutions=_CONTAINER_IMAGE_NAME="${REGION}-docker.pkg.dev/${PROJECT_ID}/${ARTIFACT_REGISTRY_NAME}/${CLOUD_RUN_SERVICE_NAME}:latest" \ --machine-type=e2-highcpu-8 && \ gcloud beta run deploy ${CLOUD_RUN_SERVICE_NAME} \ --image="${REGION}-docker.pkg.dev/${PROJECT_ID}/${ARTIFACT_REGISTRY_NAME}/${CLOUD_RUN_SERVICE_NAME}:latest" \ --execution-environment=gen2 \ --platform=managed \ --region="${REGION}" \ --service-account="${RUNNER_SA_EMAIL}" \ --cpu=4 \ --memory=8Gi \ --no-allow-unauthenticated \ --project ${PROJECT_ID} \ --update-env-vars=PROJECT_ID=${PROJECT_ID}
Akhir outputnya mirip dengan yang berikut ini:
ID: 403a276e-b0c6-41f3-aaed-f0ec9f9cedba CREATE_TIME: 2023-02-04T01:52:15+00:00 DURATION: 1M59S SOURCE: gs://PROJECT_ID_cloudbuild/source/1675475534.124241-9c43787f64e04cfd9e4a1979d3324fe0.tgz IMAGES: gcr.io/PROJECT_ID/CLOUD_RUN_SERVICE_NAME (+1 more) STATUS: SUCCESS Deploying container to Cloud Run service [CLOUD_RUN_SERVICE_NAME] in project [PROJECT_ID] region [REGION] OK Deploying new service... Done. OK Creating Revision... Revision deployment finished. Checking container heal th. OK Routing traffic... Done. Service [CLOUD_RUN_SERVICE_NAME] revision [CLOUD_RUN_SERVICE_NAME-00001-tat] has been deployed and is serving 100 percent of traffic. Service URL: https://CLOUD_RUN_SERVICE_NAME-j2bpjx2xoq-uw.a.run.app
Ambil URL Cloud Run dan simpan ke variabel lingkungan Anda:
RUN_URL="$(gcloud run services describe ${CLOUD_RUN_SERVICE_NAME} --region \ ${REGION} --project ${PROJECT_ID} --format="get(status.address.url)")"
Membuat template de-identifikasi Perlindungan Data Sensitif
Template de-identifikasi Perlindungan Data Sensitif membantu Anda menyimpan setelan de-identifikasi sehingga Anda dapat menggunakannya kembali di beberapa operasi dan sumber data.
Langkah ini menggunakan file sample_dlp_deid_config.json
, yang berisi contoh
template de-identifikasi.
Di Cloud Shell, buat template:
DEID_TEMPLATE=$(curl -X POST \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: ${PROJECT_ID}" \
--data-binary "@sample_dlp_deid_config.json" \
"https://dlp.googleapis.com/v2/projects/${PROJECT_ID}/locations/${REGION}/deidentifyTemplates")
DEID_TEMPLATE_NAME="$(echo ${DEID_TEMPLATE} | jq -r '.name')"
Google merekomendasikan agar Anda menggunakan kunci gabungan saat melakukan enkripsi Sensitive Data Protection pada workload sensitif yang sebenarnya. Untuk tujuan demonstrasi, tutorial ini menggunakan kunci yang tidak digabungkan. Untuk informasi selengkapnya tentang cara membuat kunci yang digabungkan dan menggunakannya dalam permintaan de-identifikasi dan identifikasi ulang, lihat Mende-identifikasi dan mengidentifikasi ulang data sensitif.
Membuat koneksi BigQuery ke Cloud Run
Di Cloud Shell, buat koneksi BigQuery untuk mengakses Cloud Run:
bq mk --connection \ --display_name='External transform function connection' \ --connection_type=CLOUD_RESOURCE \ --project_id="${PROJECT_ID}" \ --location="${REGION}" \ ext-${CLOUD_RUN_SERVICE_NAME}
Temukan dan tetapkan akun layanan BigQuery yang digunakan untuk koneksi:
CONNECTION_SA="$(bq --project_id ${PROJECT_ID} --format json show \ --connection ${PROJECT_ID}.${REGION}.ext-${CLOUD_RUN_SERVICE_NAME} \ | jq -r '.cloudResource.serviceAccountId')"
Berikan peran Cloud Run Invoker ke akun layanan:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${CONNECTION_SA}" \ --role='roles/run.invoker'
Membuat set data BigQuery untuk fungsi jarak jauh
Tentukan set data BigQuery untuk fungsi jarak jauh:
BQ_FUNCTION_DATASET="fns"
Buat set data jika belum ada:
bq mk --dataset \ --project_id ${PROJECT_ID} \ --location ${REGION} \ ${BQ_FUNCTION_DATASET}
Membuat fungsi jarak jauh Perlindungan Data Sensitif
Opsional: Jika Anda memiliki template pemeriksaan yang ingin digunakan, tetapkan variabel DLP_INSPECT_TEMPLATE ke nama resource lengkap template pemeriksaan tersebut. Template inspeksi harus berada di region yang sama dengan yang Anda tetapkan di variabel lingkungan REGION.
Pastikan template pemeriksaan menyertakan semua infoTypes yang digunakan dalam template de-identifikasi.
Jika Anda melewati langkah ini, Sensitive Data Protection akan memeriksa data dengan kumpulan detektor infoType default sistem.
DLP_INSPECT_TEMPLATE="DLP_INSPECT_TEMPLATE"
Ganti DLP_INSPECT_TEMPLATE dengan nama resource lengkap template pemeriksaan Anda—misalnya,
projects/PROJECT_ID/locations/REGION/inspectTemplates/TEMPLATE_ID
.Buat fungsi de-identifikasi Perlindungan Data Sensitif:
bq query --project_id ${PROJECT_ID} \ --use_legacy_sql=false \ "CREATE OR REPLACE FUNCTION ${BQ_FUNCTION_DATASET}.dlp_freetext_encrypt(v STRING) RETURNS STRING REMOTE WITH CONNECTION \`${PROJECT_ID}.${REGION}.ext-${CLOUD_RUN_SERVICE_NAME}\` OPTIONS (endpoint = '${RUN_URL}', user_defined_context = [('mode', 'deidentify'),('algo','dlp'),('dlp-deid-template','${DEID_TEMPLATE_NAME}'),('dlp-inspect-template', '${DLP_INSPECT_TEMPLATE}')]);"
Buat fungsi identifikasi ulang Perlindungan Data Sensitif:
bq query --project_id ${PROJECT_ID} \ --use_legacy_sql=false \ "CREATE OR REPLACE FUNCTION ${BQ_FUNCTION_DATASET}.dlp_freetext_decrypt(v STRING) RETURNS STRING REMOTE WITH CONNECTION \`${PROJECT_ID}.${REGION}.ext-${CLOUD_RUN_SERVICE_NAME}\` OPTIONS (endpoint = '${RUN_URL}', user_defined_context = [('mode', 'reidentify'),('algo','dlp'),('dlp-deid-template','${DEID_TEMPLATE_NAME}'),('dlp-inspect-template', '${DLP_INSPECT_TEMPLATE}')]);"
Memverifikasi de-identifikasi dan re-identifikasi
Untuk memverifikasi apakah solusi tersebut melakukan de-identifikasi dan identifikasi ulang data, lakukan hal berikut:
Konsol
Di konsol Google Cloud, buka BigQuery.
BigQuery akan terbuka di project yang terakhir Anda akses.
Untuk membuka editor kueri, klik
Compose a new query.Masukkan kueri berikut:
SELECT pii_column, fns.dlp_freetext_encrypt(pii_column) AS dlp_encrypted, fns.dlp_freetext_decrypt(fns.dlp_freetext_encrypt(pii_column)) AS dlp_decrypted FROM UNNEST( [ 'My name is John Doe. My email is john.doe@example.com', 'Some non PII data', '650-253-0000', 'some script with simple number 1234']) AS pii_column
Klik Run.
bq
Tetapkan variabel lingkungan untuk set data:
BQ_FUNCTION_DATASET="fns"
Jalankan kueri:
bq query --project_id ${PROJECT_ID} \ --use_legacy_sql=false \ " SELECT pii_column, ${BQ_FUNCTION_DATASET}.dlp_freetext_encrypt(pii_column) AS dlp_encrypted, ${BQ_FUNCTION_DATASET}.dlp_freetext_decrypt(${BQ_FUNCTION_DATASET}.dlp_freetext_encrypt(pii_column)) AS dlp_decrypted FROM UNNEST( [ 'My name is John Doe. My email is john.doe@example.com', 'Some non PII data', '650-253-0000', 'some script with simple number 1234']) AS pii_column"
Outputnya mirip dengan hal berikut ini:
Baris | pii_column |
dlp_encrypted |
dlp_decrypted |
---|---|---|---|
1 |
My name is John Doe. My email is john.doe@example.com |
My name is John Doe. My email is
BQ_TRF_EMAIL(40):AQy6lGvwKR+AiiRqJpEr+nBzZUzOcjXkXamUugU= |
My name is John Doe. My email is john.doe@example.com |
2 |
Some non PII data |
Some non PII data |
Some non PII data |
3 |
650-253-0000 |
BQ_TRF_PH(40):AeKpGU5KBXaTyecCun7dv1hHht5w5Q2PTpvkRC4= |
650-253-0000 |
4 |
some script with simple number 1234 |
some script with simple number 1234 |
some script with simple number 1234 |
Pertimbangan
Saat menyesuaikan tutorial ini dengan kebutuhan Anda, pertimbangkan hal berikut:
- De-identifikasi dan identifikasi ulang diproses melalui layanan Cloud Run. Sediakan CPU dan memori Cloud Run sesuai dengan persyaratan komputasi Anda. Untuk mengetahui detailnya, lihat batas CPU dan batas memori untuk Cloud Run.
- Saat menggunakan Perlindungan Data Sensitif, pertimbangkan batas penggunaan dan rekomendasi untuk mengontrol biaya.
Untuk membantu mengontrol biaya dan total konsumsi kuota Perlindungan Data Sensitif, batasi item yang Anda teruskan melalui fungsi jarak jauh Perlindungan Data Sensitif menjadi 10.000 atau kurang. Solusi ini dapat otomatis mengelompokkan permintaan untuk menangani batas permintaan Perlindungan Data Sensitif berikut dengan baik:
- Jumlah maksimum nilai tabel: 50.000
- Batas ukuran permintaan default: 0,5 MB
Hasil akhir dan hasil yang difilter dari kueri harus diteruskan ke fungsi Sensitive Data Protection, bukan sumbernya.
Untuk solusi ini, setiap nilai di kolom
pii_column
adalah item—misalnya,My name is John Doe. My email is john.doe@example.com
adalah satu item.Pastikan set data BigQuery, layanan Cloud Run, dan template Sensitive Data Protection Anda berada di region cloud yang sama.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project Google Cloud:
gcloud projects delete PROJECT_ID
Langkah selanjutnya
- Pelajari fungsi jarak jauh BigQuery lebih lanjut.
- Pelajari cara melakukan de-identifikasi data sensitif.
- Pelajari contoh yang menunjukkan cara membuat kunci yang digabungkan, membuat token konten, dan mengidentifikasi ulang konten yang di-token.
- Pelajari cara menangani de-identifikasi dan identifikasi ulang PII dalam set data berskala besar menggunakan Sensitive Data Protection.
- Pelajari Cloud KMS lebih lanjut.