Menerapkan tag sensitivitas di Data Catalog secara otomatis ke file, database, dan tabel BigQuery menggunakan Perlindungan Data Sensitif dan Dataflow

Last reviewed 2022-01-11 UTC

Dokumen ini menunjukkan cara menggunakan Data Catalog dengan pipeline Dataflow otomatis untuk mengidentifikasi dan menerapkan tag sensitivitas data ke data Anda dalam file Cloud Storage, database relasional (seperti MySQL, PostgreSQL, dan lainnya), dan BigQuery.

Pipeline Dataflow ini menggunakan Perlindungan Data Sensitif untuk mendeteksi data sensitif, seperti informasi identitas pribadi (PII), lalu memberi tag pada temuannya di Katalog Data.

Solusi yang dijelaskan dalam dokumen ini dibuat berdasarkan arsitektur solusi pembuatan token berbasis file yang dijelaskan dalam dokumen pendampingnya: Otomatis melakukan token data berbasis file yang sensitif dengan Perlindungan Data Sensitif, Cloud Key Management Service, dan Dataflow. Perbedaan utama antara kedua dokumen tersebut adalah dokumen ini menjelaskan solusi yang juga membuat entri Data Catalog dengan skema sumber dan tag sensitivitas data untuk temuan Perlindungan Data Sensitif. Alat ini juga dapat memeriksa database relasional menggunakan koneksi konektivitas database Java (JDBC).

Dokumen ini ditujukan untuk audiens teknis yang tanggung jawabnya mencakup keamanan data, tata kelola data, pemrosesan data, atau analisis data. Dokumen ini mengasumsikan bahwa Anda telah memahami pemrosesan data dan privasi data, tanpa perlu menjadi pakar. Anda juga dianggap sudah memahami skrip shell dan memiliki pengetahuan dasar tentang Google Cloud.

Arsitektur

Arsitektur ini menentukan pipeline yang melakukan tindakan berikut:

  • Mengekstrak data dari database relasional menggunakan JDBC.
  • Mengambil sampel kumpulan data menggunakan klausa LIMIT database.
  • Memproses kumpulan data melalui Cloud Data Loss Prevention API (bagian dari Perlindungan Data Sensitif) untuk mengidentifikasi kategori sensitivitas.
  • Menyimpan temuan ke tabel BigQuery dan Data Catalog.

Diagram berikut mengilustrasikan tindakan yang dilakukan pipeline:

Data diekstrak, diambil sampelnya, diproses, dan disimpan.

Solusi ini menggunakan koneksi JDBC untuk mengakses database relasional. Saat menggunakan tabel BigQuery sebagai sumber data, solusi ini menggunakan BigQuery Storage API untuk mempercepat waktu pemuatan.

Pipeline sampel dan identifikasi menghasilkan file berikut ke Cloud Storage:

  • Skema Avro (setara) dari skema sumber
  • Data infoTypes terdeteksi untuk setiap kolom input (PERSON_NAME, PHONE_NUMBER, dan STREET_ADDRESS)

Solusi ini menggunakan perataan data untuk menangani kolom bertingkat dan berulang dalam kumpulan data.

Tujuan

  • Membuat tag Data Catalog dan entity group
  • Men-deploy pipeline pengambilan sampel dan identifikasi
  • Membuat entity Data Catalog kustom
  • Menerapkan tag sensitivitas ke entitas Data Catalog kustom
  • Memeriksa apakah data tag sensitivitas juga ada di BigQuery

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Cloud Build, DLP API, Cloud SQL, Cloud Storage, Compute Engine, Dataflow, Data Catalog, and Secret Manager.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API Cloud Build, DLP API, Cloud SQL, Cloud Storage, Compute Engine, Dataflow, Data Catalog, and Secret Manager.

    Mengaktifkan API

  8. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

Menyiapkan lingkungan Anda

  1. Di Cloud Shell, clone repositori sumber dan buka direktori untuk file yang di-clone:

    git clone https://github.com/GoogleCloudPlatform/auto-data-tokenize.git
    
    cd auto-data-tokenize/
    
  2. Gunakan editor teks untuk mengubah skrip set_variables.sh guna menetapkan variabel lingkungan yang diperlukan. Abaikan variabel lain dalam skrip. Parameter ini tidak relevan dalam dokumen ini.

    # The Google Cloud project to use:
    export PROJECT_ID="PROJECT_ID"
    
    # The Compute Engine region to use for running dataflow jobs and create a
    # temporary storage bucket:
    export REGION_ID= "REGION_ID"
    
    # The Cloud Storage bucket to use as a temporary bucket for Dataflow:
    export TEMP_GCS_BUCKET="CLOUD_STORAGE_BUCKET_NAME"
    
    # Name of the service account to use (not the email address)
    # (For example, tokenizing-runner):
    export DLP_RUNNER_SERVICE_ACCOUNT_NAME="DLP_RUNNER_SERVICE_ACCOUNT_NAME"
    
    # Entry Group ID to use for creating/searching for Entries
    # in Data Catalog for non-BigQuery entries.
    # The ID must begin with a letter or underscore, contain only English
    # letters, numbers and underscores, and have 64 characters or fewer.
    export
    DATA_CATALOG_ENTRY_GROUP_ID="DATA_CATALOG_ENTRY_GROUP_ID"
    
    # The Data Catalog Tag Template ID to use
    # for creating sensitivity tags in Data Catalog.
    # The ID must contain only lowercase letters (a-z), numbers (0-9), or
    # underscores (_), and must start with a letter or underscore.
    # The maximum size is 64 bytes when encoded in UTF-8
    export INSPECTION_TAG_TEMPLATE_ID="INSPECTION_TAG_TEMPLATE_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • REGION_ID: Region yang berisi bucket atau bucket penyimpanan Anda. Pilih lokasi yang berada di region Data Catalog.
    • CLOUD_STORAGE_BUCKET_NAME: Nama bucket penyimpanan Anda.
    • DLP_RUNNER_SERVICE_ACCOUNT_NAME: Nama akun layanan Anda.
    • DATA_CATALOG_ENTRY_GROUP_ID: Nama grup entri data catalog non-BigQuery Anda.
    • INSPECTION_TAG_TEMPLATE_ID: Nama yang Anda berikan ke template tag untuk Data Catalog
  3. Jalankan skrip untuk menetapkan variabel lingkungan:

    source set_variables.sh
    

Membuat fasilitas

Arsitektur yang dijelaskan dalam dokumen ini menggunakan referensi berikut:

  • Akun layanan untuk menjalankan pipeline Dataflow, memungkinkan kontrol akses yang terperinci
  • Bucket Cloud Storage untuk menyimpan data sementara dan data pengujian
  • Template tag Data Catalog untuk melampirkan tag sensitivitas ke entri
  • MySQL di instance Cloud SQL sebagai sumber JDBC

Membuat akun layanan

Sebaiknya jalankan pipeline dengan kontrol akses terperinci untuk meningkatkan partisi akses. Jika project Anda tidak memiliki akun layanan buatan pengguna, buatlah akun.

  1. Di Cloud Shell, buat akun layanan untuk digunakan sebagai akun layanan pengontrol yang dikelola pengguna untuk Dataflow:

      gcloud iam service-accounts create ${DLP_RUNNER_SERVICE_ACCOUNT_NAME} \
      --project="${PROJECT_ID}" \
      --description="Service Account for Sampling and Cataloging pipelines." \
      --display-name="Sampling and Cataloging pipelines"
    
  2. Buat peran khusus dengan izin yang diperlukan untuk mengakses Sensitive Data Protection, Dataflow, Cloud SQL, dan Data Catalog:

      export SAMPLING_CATALOGING_ROLE_NAME="sampling_cataloging_runner"
      gcloud iam roles create ${SAMPLING_CATALOGING_ROLE_NAME} \
      --project="${PROJECT_ID}" \
      --file=tokenizing_runner_permissions.yaml
    
  3. Terapkan peran khusus dan peran Dataflow Worker ke akun layanan agar dapat berjalan sebagai pekerja Dataflow:

      gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --role=projects/${PROJECT_ID}/roles/${SAMPLING_CATALOGING_ROLE_NAME}
    
      gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --role=roles/dataflow.worker
    

Membuat bucket Cloud Storage

  • Di Cloud Shell, buat bucket Cloud Storage untuk menyimpan data pengujian dan sebagai lokasi staging Dataflow:

    gsutil mb -p ${PROJECT_ID} -l ${REGION_ID} "gs://${TEMP_GCS_BUCKET}"
    

Membuat grup entri Data Catalog

Data Catalog menyimpan daftar entri yang mewakili resource Google Cloud atau resource lainnya. Entri diatur dalam grup entri. Ada grup entri implisit untuk BigQuery (@bigquery). Anda harus membuat grup entri untuk jenis resource lainnya. Untuk mempelajari entri Data Catalog lebih lanjut, lihat Menampilkan file dari Cloud Storage dengan entri kumpulan file.

Di Data Catalog, grup entri seperti folder yang berisi entri. Entri mewakili aset data.

  • Di Cloud Shell, buat grup entri baru tempat pipeline dapat menambahkan entri untuk tabel MySQL Anda:

    gcloud data-catalog entry-groups create \
    "${DATA_CATALOG_ENTRY_GROUP_ID}" \
    --project="${PROJECT_ID}" \
    --location="${REGION_ID}"
    

Membuat template tag pemeriksaan

  • Di Cloud Shell, buat template tag Data Catalog untuk mengaktifkan entri pemberian tag dengan informasi sensitivitas menggunakan Perlindungan Data Sensitif:

    gcloud data-catalog tag-templates create ${INSPECTION_TAG_TEMPLATE_ID} \
    --project="${PROJECT_ID}"  \
    --location="${REGION_ID}" \
    --display-name="Auto DLP sensitive categories" \
    --field=id=infoTypes,type=string,display-name="DLP infoTypes",required=TRUE \
    --field=id=inspectTimestamp,type=timestamp,display-name="Inspection run timestamp",required=TRUE
    

Membuat tabel hasil pemeriksaan di BigQuery

  • Di Cloud Shell, buat tabel BigQuery untuk menyimpan temuan gabungan dari Sensitive Data Protection:

    bq mk --dataset \
    --location="${REGION_ID}" \
    --project_id="${PROJECT_ID}"  \
    inspection_results
    
    bq mk --table \
    --project_id="${PROJECT_ID}"  \
    inspection_results.SensitivityInspectionResults \
    inspection_results_bigquery_schema.json
    

Menyiapkan MySQL di instance Cloud SQL

Untuk sumber data, Anda menggunakan instance Cloud SQL.

  1. Di Cloud Shell, buat instance MySQL di instance Cloud SQL dan muat dengan data sampel:

    export SQL_INSTANCE="mysql-autodlp-instance"
    export SQL_ROOT_PASSWORD="root1234"
    
    gcloud sql instances create "${SQL_INSTANCE}" \
    --project="${PROJECT_ID}"  \
    --region="${REGION_ID}" \
    --database-version=MYSQL_5_7 \
    --root-password="${SQL_ROOT_PASSWORD}"
    
  2. Simpan sandi database di Secret Manager.

    Sandi database dan informasi rahasia lainnya tidak boleh disimpan atau dicatat. Secret Manager memungkinkan Anda menyimpan dan mengambil secret tersebut dengan aman.

    Simpan sandi root database MySQL sebagai rahasia cloud:

    export SQL_PASSWORD_SECRET_NAME="mysql-password"
    
    printf $SQL_ROOT_PASSWORD |
    gcloud secrets create "${SQL_PASSWORD_SECRET_NAME}" \
    --data-file=- \
    --locations="${REGION_ID}" \
    --replication-policy="user-managed" \
    --project="${PROJECT_ID}"
    

Salin data pengujian ke instance Cloud SQL

Data pengujian adalah set data demonstrasi yang berisi 5.000 nama depan dan belakang serta nomor telepon bergaya AS yang dibuat secara acak. Tabel demonstration-dataset berisi empat kolom: row_id, person_name, contact_type, contact_number. Anda juga bisa menggunakan set data Anda sendiri. Jika Anda menggunakan set data sendiri, jangan lupa untuk menyesuaikan nilai yang disarankan di bagian Verifikasi di BigQuery dalam dokumen ini. Untuk menyalin set data demonstrasi (contacts5k.sql.gz) yang disertakan ke instance Cloud SQL Anda, lakukan hal berikut:

  1. Di Cloud Shell, salin set data contoh ke Cloud Storage untuk staging ke Cloud SQL:

    gsutil cp contacts5k.sql.gz gs://${TEMP_GCS_BUCKET}
    
  2. Buat database baru dalam instance Cloud SQL:

    export DATABASE_ID="auto_dlp_test"
    
    gcloud sql databases create "${DATABASE_ID}" \
    --project="${PROJECT_ID}"  \
    --instance="${SQL_INSTANCE}"
    
  3. Berikan peran Storage Object Admin ke akun layanan Cloud SQL Anda agar dapat mengakses penyimpanan:

    export SQL_SERVICE_ACCOUNT=$(gcloud sql instances describe
    "${SQL_INSTANCE}" --project="${PROJECT_ID}" | grep
    serviceAccountEmailAddress: | sed "s/serviceAccountEmailAddress: //g")
    
    gsutil iam ch "serviceAccount:${SQL_SERVICE_ACCOUNT}:objectAdmin" \
    gs://${TEMP_GCS_BUCKET}
    
  4. Muat data ke tabel baru:

    gcloud sql import sql "${SQL_INSTANCE}" \
    "gs://${TEMP_GCS_BUCKET}/contacts5k.sql.gz" \
    --project="${PROJECT_ID}"  \
    --database="${DATABASE_ID}"
    

    Untuk mempelajari lebih lanjut cara mengimpor data ke Cloud SQL, lihat Praktik terbaik untuk mengimpor dan mengekspor data.

Mengompilasi modul

  • Di Cloud Shell, kompilasi modul guna mem-build file yang dapat dieksekusi untuk men-deploy pipeline pengambilan-sample-dan-identifikasi, serta pipeline tokenize:

     ./gradlew clean buildNeeded shadowJar -x test
    

    Secara opsional, hapus flag -x test untuk menjalankan pengujian unit dan integrasi. Jika Anda belum menginstal libncurses5, instal di Cloud Shell dengan: sudo apt-get install libncurses5.

Menjalankan pipeline pengambilan-sampel-dan-identifikasi

Pipeline identifikasi Pengambilan sampel dan Perlindungan Data Sensitif melakukan tugas-tugas berikut dalam urutan berikut:

  1. Mengekstrak kumpulan data dari sumber yang disediakan. Misalnya, metode identifikasi Perlindungan Data Sensitif hanya mendukung tabel datar sehingga pipeline meratakan data Avro, Parquet, atau BigQuery karena data tersebut dapat berisi kolom bertingkat dan berulang.
  2. Mengambil sampel masing-masing kolom untuk sampel yang diperlukan, tidak termasuk null atau nilai kosong.
  3. Mengidentifikasi data infoTypes sensitif menggunakan Perlindungan Data Sensitif, dengan mengelompokkan sampel ke dalam ukuran tumpukan yang dapat diterima untuk Perlindungan Data Sensitif (nilai <500 Kb dan <50.000).
  4. Menulis laporan ke Cloud Storage dan BigQuery untuk referensi di masa mendatang.
  5. Membuat entity Data Catalog, saat Anda memberikan informasi template tag dan grup entri. Jika Anda memberikan informasi ini, pipeline akan membuat tag sensitivitas untuk entri dalam Data Catalog terhadap kolom yang sesuai.

Membuat Template Flex Dataflow

Template Dataflow Flex memungkinkan Anda menggunakan panggilan Konsol Google Cloud, Google Cloud CLI, atau REST API untuk menyiapkan dan menjalankan pipeline di Google Cloud. Dokumen ini memberikan petunjuk untuk konsol Google Cloud. Template klasik ditahapkan sebagai grafik eksekusi di Cloud Storage, sementara Flex Templates memaketkan pipeline sebagai image container di Container Registry project Anda. Dengan Template Flex, Anda dapat memisahkan pembuatan dan pengoperasian pipeline, serta berintegrasi dengan sistem orkestrasi untuk operasi pipeline terjadwal. Untuk mengetahui informasi selengkapnya tentang Template Flex Dataflow, lihat Mengevaluasi jenis template yang akan digunakan.

Template Flex Dataflow memisahkan langkah pembuatan dan staging dari langkah-langkah yang berjalan. Mereka melakukannya dengan memungkinkan peluncuran pipeline Dataflow dari panggilan API, dan dari Cloud Composer, menggunakan modul DataflowStartFlexTemplateOperator.

  1. Di Cloud Shell, tentukan lokasi untuk menyimpan file spesifikasi template yang berisi informasi yang diperlukan untuk menjalankan tugas Dataflow:

    export
    FLEX_TEMPLATE_PATH="gs://${TEMP_GCS_BUCKET}/dataflow/templates/sample-inspect-tag-pipeline.json"
    
    export
    FLEX_TEMPLATE_IMAGE="us.gcr.io/${PROJECT_ID}/dataflow/sample-inspect-tag-pipeline:latest"
    
  2. Buat Template Flex Dataflow:

    gcloud dataflow flex-template build "${FLEX_TEMPLATE_PATH}" \
    --image-gcr-path="${FLEX_TEMPLATE_IMAGE}" \
    --service-account-email="${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
    --sdk-language="JAVA" \
    --flex-template-base-image=JAVA11 \
    --metadata-file="sample_identify_tag_pipeline_metadata.json" \
    --jar="build/libs/auto-data-tokenize-all.jar" \
    --env="FLEX_TEMPLATE_JAVA_MAIN_CLASS=\"com.google.cloud.solutions.autotokenize.pipeline.DlpInspectionPipeline\""
    

Menjalankan pipeline

Pipeline pengambilan sampel dan identifikasi mengekstrak jumlah data yang ditentukan oleh nilai sampleSize. Kemudian, kode ini akan meratakan setiap kumpulan data dan mengidentifikasi kolom infoTypes menggunakan Perlindungan Data Sensitif (untuk mengidentifikasi jenis informasi sensitif). Nilai infoTypes dihitung, lalu digabungkan berdasarkan nama kolom dan kolom infoType untuk membuat laporan sensitivitas.

  • Di Cloud Shell, luncurkan pipeline pengambilan sampel dan identifikasi untuk mengidentifikasi kolom sensitif pada sumber data:

    export
    CLOUD_SQL_JDBC_CONNECTION_URL="jdbc:mysql:///${DATABASE_ID}?cloudSqlInstance=${PROJECT_ID}%3A${REGION_ID}%3A${SQL_INSTANCE}&socketFactory=com.google.cloud.sql.mysql.SocketFactory"
    
    gcloud dataflow flex-template run "sample-inspect-tag-`date +%Y%m%d-%H%M%S`" \
      --template-file-gcs-location "${FLEX_TEMPLATE_PATH}" \
      --region "${REGION_ID}" \
      --service-account-email "${DLP_RUNNER_SERVICE_ACCOUNT_EMAIL}" \
      --staging-location "gs://${TEMP_GCS_BUCKET}/staging" \
      --worker-machine-type "n1-standard-1" \
      --parameters sampleSize=2000 \
      --parameters sourceType="JDBC_TABLE" \
      --parameters inputPattern="Contacts" \
      --parameters reportLocation="gs://${TEMP_GCS_BUCKET}/auto_dlp_report/" \
      --parameters reportBigQueryTable="${PROJECT_ID}:inspection_results.SensitivityInspectionResults" \
      --parameters jdbcConnectionUrl="${CLOUD_SQL_JDBC_CONNECTION_URL}" \
      --parameters jdbcDriverClass="com.mysql.cj.jdbc.Driver" \
      --parameters jdbcUserName="root" \
      --parameters jdbcPasswordSecretsKey="projects/${PROJECT_ID}/secrets/${SQL_PASSWORD_SECRET_NAME}/versions/1" \
      --parameters ^:^jdbcFilterClause="ROUND(RAND() * 10) IN (1,3)" \
      --parameters dataCatalogEntryGroupId="projects/${PROJECT_ID}/locations/${REGION_ID}/entryGroups/${DATA_CATALOG_ENTRY_GROUP_ID}" \
      --parameters dataCatalogInspectionTagTemplateId="projects/${PROJECT_ID}/locations/${REGION_ID}/tagTemplates/${INSPECTION_TAG_TEMPLATE_ID}"
    

Parameter jdbcConnectionUrl menentukan URL koneksi database JDBC dengan detail nama pengguna dan sandi. Detail pembuatan URL koneksi yang tepat bergantung pada vendor database dan partner hosting Anda. Untuk memahami detail cara terhubung ke database relasional berbasis Cloud SQL, lihat Menghubungkan menggunakan konektor Cloud SQL.

Pipeline ini membuat kueri seperti SELECT * FROM [TableName] untuk membaca data tabel yang akan diperiksa.

Kueri ini dapat menyebabkan pemuatan pada database dan juga pada pipeline, terutama untuk tabel besar. Secara opsional, Anda dapat mengoptimalkan sampel data yang ingin diperiksa di sisi database. Untuk melakukannya, masukkan jdbcFilterClause sebagai klausa WHERE kueri yang muncul dalam contoh kode yang ditawarkan dalam bagian Verifikasi di BigQuery nanti dalam dokumen ini.

Untuk menjalankan laporan, Anda dapat memilih satu atau beberapa sink pelaporan berikut:

  • reportLocation untuk menyimpan laporan di bucket Cloud Storage
  • report BIGQUERY_TABLE untuk menyimpan laporan di BigQueryTable
  • dataCatalogEntryGroupId untuk membuat dan memberi tag pada entri di Data Catalog (hapus parameter ini jika sourceType adalah BIGQUERY_TABLE)

Pipeline mendukung jenis sumber berikut. Untuk menentukan kombinasi argumen sourceType dan inputPattern yang benar, gunakan opsi yang tercantum dalam tabel berikut.

Dalam hal ini, Anda hanya menggunakan tabel JDBC_TABLE.

sourceType Sumber data inputPattern

JDBC_TABLE

Database relasional (menggunakan JDBC)

TABLE_NAME

AVRO

File Avro di Cloud Storage.
Untuk memilih beberapa file yang cocok dengan pola, Anda dapat menggunakan satu karakter pengganti. Pola berikut memilih semua file yang dimulai dengan awalan (data-):

gs://my-bucket/path/to/folder/data-*

gs://LOCATION_OF_FILES

PARQUET

File Parquet di Cloud Storage.
Untuk memilih beberapa file yang cocok dengan pola, Anda dapat menggunakan satu karakter pengganti. Pola berikut memilih semua file yang dimulai dengan awalan (data-):

gs://my-bucket/path/to/folder/data-*

gs://LOCATION_OF_FILES

BIGQUERY_TABLE

Tabel BigQuery.
Membaca semua baris, lalu secara acak mengambil sampel menggunakan pipeline.

PROJECT_ID:=DATASET.=TABLE

Pipeline mendeteksi semua infoTypes standar yang didukung oleh Perlindungan Data Sensitif. Anda dapat memberikan infoTypes kustom tambahan menggunakan parameter --observableinfoTypes.

Melakukan pengambilan sampel dan mengidentifikasi directed acyclic graph (DAG) pipeline

Diagram berikut menunjukkan DAG eksekusi Dataflow. DAG memiliki dua cabang. Kedua cabang dimulai pada ReadJdbcTable dan berakhir pada ExtractReport. Dari sana, laporan akan dibuat atau data disimpan.

Pengambilan sampel dan aliran data pipeline identifikasi.

Mengambil laporan

Pipeline pengambilan sampel dan identifikasi menghasilkan file berikut:

  • File skema Avro (atau skema yang dikonversi ke Avro) dari sumber
  • Satu file untuk setiap kolom sensitif dengan informasi dan jumlah infoType

Untuk mengambil laporan, lakukan tindakan berikut:

  1. Di Cloud Shell, ambil laporan:

    mkdir -p auto_dlp_report/
    gsutil -m cp
    "gs://${TEMP_GCS_BUCKET}/auto_dlp_report/*.json"
    auto_dlp_report/
    
  2. Cantumkan semua nama kolom yang diidentifikasi:

    cat auto_dlp_report/col-*.json | jq .columnName
    

    Outputnya adalah sebagai berikut:

    "$.topLevelRecord.contact_number" "$.topLevelRecord.person_name"

  3. Lihat detail kolom yang diidentifikasi dengan perintah cat untuk file:

    cat auto_dlp_report/col-topLevelRecord-contact_number-00000-of-00001.json
    

    Berikut adalah cuplikan kolom cc:

    { "columnName": "$.topLevelRecord.contact_number", "infoTypes": [{ "infoType": "PHONE_NUMBER", "count": "990" }] }

    • Nilai columnName tidak biasa karena ada konversi implisit baris database ke data Avro.
    • Nilai count bervariasi berdasarkan sampel yang dipilih secara acak selama eksekusi.

Memverifikasi tag sensitivitas di Data Catalog

Pipeline pengambilan sampel dan identifikasi membuat entri baru dan menerapkan tag sensitivitas ke kolom yang sesuai.

  1. Di Cloud Shell, ambil entri yang dibuat untuk tabel Contacts:

    gcloud data-catalog entries describe Contacts \
      --entry-group=${DATA_CATALOG_ENTRY_GROUP_ID} \
      --project="${PROJECT_ID}"  \
      --location="${REGION_ID}"
    

    Perintah ini akan menampilkan detail tabel, termasuk skemanya.

  2. Tampilkan semua tag sensitivitas yang terlampir pada entri ini:

    gcloud data-catalog tags list --entry=Contacts
      --entry-group=${DATA_CATALOG_ENTRY_GROUP_ID} \
      --project="${PROJECT_ID}"  \
      --location="${REGION_ID}"
    
  3. Pastikan tag sensitivitas ada di kolom berikut: contact_number, person_name.

    Data infoTypes yang diidentifikasi oleh Perlindungan Data Sensitif dapat berisi beberapa jenis yang salah. Misalnya, fungsi dapat mengidentifikasi jenis person_name sebagai jenis DATE, karena beberapa string person_names acak dapat berupa April, Mei, Juni, atau lainnya.

    Detail tag sensitivitas yang dihasilkan adalah sebagai berikut:

    column: contact_number
    fields:
      infoTypes:
        displayName: DLP infoTypes
        stringValue: '[PHONE_NUMBER]'
      inspectTimestamp:
        displayName: Inspection run timestamp
        timestampValue: '2021-05-20T16:34:29.596Z'
    name: projects/auto-dlp/locations/asia-southeast1/entryGroups/sql_databases/entries/Contacts/tags/CbS0CtGSpZyJ
    template: projects/auto-dlp/locations/asia-southeast1/tagTemplates/auto_dlp_inspection
    templateDisplayName: Auto DLP sensitive categories
    ---
    column: person_name
    fields:
      infoTypes:
        displayName: DLP infoTypes
        stringValue: '[DATE, PERSON_NAME]'
      inspectTimestamp:
        displayName: Inspection run timestamp
        timestampValue: '2021-05-20T16:34:29.594Z'
    name: projects/auto-dlp/locations/asia-southeast1/entryGroups/sql_databases/entries/Contacts/tags/Cds1aiO8R0pT
    template: projects/auto-dlp/locations/asia-southeast1/tagTemplates/auto_dlp_inspection
    templateDisplayName: Auto DLP sensitive categories
    

Memverifikasi di BigQuery

Pipeline Dataflow menambahkan temuan gabungan ke tabel BigQuery yang disediakan. Kueri tersebut mencetak hasil pemeriksaan yang diambil dari tabel BigQuery.

  • Di Cloud Shell, periksa hasilnya:

    bq query \
      --location="${REGION_ID}"  \
      --project="${PROJECT_ID}"  \
      --use_legacy_sql=false \
    'SELECT
       input_pattern AS table_name,
       ColumnReport.column_name AS column_name,
       ColumnReport.info_types AS info_types
     FROM
       `inspection_results.SensitivityInspectionResults`,
       UNNEST(column_report) ColumnReport;
     WHERE column_name="$.topLevelRecord.contact_number"'
    

    Outputnya adalah sebagai berikut:

    +------------+---------------------------------+----------------------------------------------+
    | table_name |           column_name           |                  info_types                  |
    +------------+---------------------------------+----------------------------------------------+
    | Contacts   | $.topLevelRecord.contact_number | [{"info_type":"PHONE_NUMBER","count":"990"}] |
    +------------+---------------------------------+----------------------------------------------+
    

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

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya