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 mengetahui informasi cara menggunakan Perlindungan Data Sensitif guna mengenkripsi data dalam penyimpanan, lihat De-identifikasi data sensitif di penyimpanan.
Tutorial ini ditujukan untuk audiens yang tanggung jawabnya mencakup keamanan data, pemrosesan data, atau analisis data. Panduan ini mengasumsikan bahwa Anda telah terbiasa dengan pemrosesan data dan privasi data, tanpa perlu menjadi ahli. 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 Perlindungan Data Sensitif.
Teknik de-identifikasi, seperti enkripsi, meng-obfuscate ID sensitif mentah di data Anda. Teknik ini memungkinkan Anda mempertahankan utilitas data untuk bergabung atau menganalisis, sekaligus mengurangi risiko penanganan data.
Perusahaan mungkin memiliki kebijakan atau persyaratan peraturan untuk hanya menyimpan data yang dide-identifikasi di cloud data warehouse (CDW) 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 telah dide-identifikasi. Anda dapat menggunakan tutorial ini untuk mengganti pipeline tersebut dengan kueri SQL hanya untuk identifikasi ulang atau de-identifikasi dan identifikasi ulang. Tutorial ini membantu Anda melakukan de-identifikasi dan mengidentifikasi ulang menggunakan layanan pusat yang dihosting di Cloud Run. Anda dapat menggunakan layanan pusat ini di seluruh organisasi tanpa perlu menyiapkan atau memelihara cluster Dataflow.
Perlindungan Data Sensitif dapat mengklasifikasikan set data dengan memeriksa informasi sensitif pada data. Perlindungan Data Sensitif memiliki lebih dari 150 pengklasifikasi bawaan, yang disebut infoTypes. Penggunaan Cloud Data Loss Prevention API guna melakukan de-identifikasi data memerlukan pipeline data dan aplikasi. Tutorial ini bertujuan untuk membantu analis data, engineer, atau ilmuwan Anda mencapai hasil yang sama melalui fungsi SQL.
Di akhir tutorial ini, Anda akan dapat menulis kueri yang mirip dengan berikut ini; data sensitif akan dide-identifikasi 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, Perlindungan Data Sensitif untuk melakukan de-identifikasi dan mengidentifikasi ulang data, serta Cloud Run untuk menghosting fungsi jarak jauh.
Tujuan
- Deploy layanan Cloud Run yang menyediakan fungsi de-identifikasi dari Perlindungan Data Sensitif.
- Membuat fungsi jarak jauh BigQuery yang menggunakan template de-identifikasi Perlindungan Data Sensitif.
- Verifikasi enkripsi data di BigQuery dengan 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 Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Browser-based sign-in with the gcloud 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, dan Penggunaan Layanan:
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.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Browser-based sign-in with the gcloud 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, dan Penggunaan Layanan:
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 membuat penyesuaian, ikuti langkah-langkah berikut. Jika Anda ingin menyesuaikan deployment, lewati bagian ini dan lihat Men-deploy solusi kustom 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
. Sediakan region, bukan zona.
Opsional: Jika Anda memiliki template pemeriksaan yang ingin digunakan, tetapkan kolom DLP_INSPECT_TEMPLATE ke nama resource lengkap dari 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 di template de-identifikasi.
Jika Anda melewati langkah ini, Perlindungan Data Sensitif 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
.Memverifikasi bahwa data dapat dienkripsi dan didekripsi.
Men-deploy solusi kustom 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 dengan 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
. Sediakan region, bukan zona. - CLOUD_RUN_SERVICE_NAME: nama untuk layanan Cloud Run baru. Masukkan maksimum 15 karakter.
- ARTIFACT_REGISTRY_NAME: nama bagi 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 DLP User:
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 output mirip dengan 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 Perlindungan Data Sensitif pada workload sensitif yang sebenarnya. Untuk tujuan demonstrasi, tutorial ini menggunakan kunci yang tidak digabungkan. Untuk mengetahui informasi selengkapnya tentang cara membuat kunci yang digabungkan dan menggunakannya dalam permintaan de-identifikasi dan identifikasi ulang, lihat Melakukan de-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 untuk 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 dari 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 di template de-identifikasi.
Jika Anda melewati langkah ini, Perlindungan Data Sensitif 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
.Membuat 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}')]);"
Membuat 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 identifikasi ulang
Untuk memverifikasi apakah solusi ini melakukan de-identifikasi dan mengidentifikasi 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-hal berikut:
- De-identifikasi dan identifikasi ulang diproses melalui layanan Cloud Run. Sediakan CPU dan memori Cloud Run sesuai dengan kebutuhan 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 hingga 10.000 atau kurang. Solusi ini dapat secara otomatis mengelompokkan permintaan untuk menangani dengan baik batas permintaan Perlindungan Data Sensitif berikut:
- Jumlah nilai tabel maksimum: 50.000
- Batas ukuran permintaan default: 0,5 MB
Hasil akhir dan yang difilter dari kueri harus diteruskan ke fungsi Perlindungan Data Sensitif, bukan ke sumber.
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 Perlindungan Data Sensitif 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 gabungan, mengtoken konten, dan mengidentifikasi ulang konten dengan token.
- Pelajari cara menangani de-identifikasi dan identifikasi ulang PII dalam set data berskala besar menggunakan Perlindungan Data Sensitif.
- Pelajari Cloud KMS lebih lanjut.