Melakukan de-identifikasi data BigQuery pada waktu kueri


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 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, Sensitive Data Protection untuk melakukan de-identifikasi dan mengidentifikasi ulang data, dan Cloud Run untuk menghosting fungsi jarak jauh.

Diagram arsitektur tingkat tinggi tutorial ini

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 akan 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.

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

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the 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 APIs:

    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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the 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 APIs:

    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

  1. Pada Cloud Shell, clone repositori sumber:

    git clone https://github.com/GoogleCloudPlatform/bigquery-dlp-remote-function.git
    
  2. 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.

  1. 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.
  2. 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.

  3. Lakukan autentikasi menggunakan Kredensial Default Aplikasi:

    gcloud auth application-default login && \
    gcloud auth application-default set-quota-project "${PROJECT_ID}"
    
  4. 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.

  5. 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

  1. 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}"
    
  2. 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:

  1. Opsional: Anda dapat mengubah nilai default dengan mengubah variabel lingkungan atau memperbarui file src/main/resources/aes.properties.

  2. 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}"
    
  3. 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
    
  4. 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

  1. 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}
    
  2. 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')"
    
  3. 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

  1. Tentukan set data BigQuery untuk fungsi jarak jauh:

    BQ_FUNCTION_DATASET="fns"
    
  2. 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

  1. 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.

  2. 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}')]);"
    
  3. 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

  1. Di konsol Google Cloud, buka BigQuery.

    Buka BigQuery

    BigQuery akan terbuka di project yang terakhir Anda akses.

  2. Untuk membuka editor kueri, klik Buat kueri baru.

  3. 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
    
  4. Klik Run.

bq

  1. Tetapkan variabel lingkungan untuk set data:

    BQ_FUNCTION_DATASET="fns"
    
  2. 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.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Langkah selanjutnya