Enkripsi data pengguna

Berikut cara mengirim data terenkripsi:

Menyiapkan antarmuka command line Google Cloud

  1. Instal dan lakukan inisialisasi antarmuka command line Google Cloud.

  2. Untuk memastikan komponen gcloud Anda sudah diupdate, jalankan perintah berikut.

    gcloud components update
    
  3. Untuk memilih atau membuat project Google Cloud baru dan mengaktifkan Cloud Key Management Service, klik Enable Cloud KMS.

    Aktifkan Cloud KMS
  4. Untuk menyetel project di lingkungan Anda, gunakan perintah gcloud config set. Untuk memeriksa apakah project sudah disetel di lingkungan Anda, jalankan gcloud config list.

    Jika project tidak ditetapkan, atau Anda ingin menggunakan project lain untuk kunci Anda, jalankan gcloud config set:

    gcloud config set project PROJECT_ID
    

Buat kunci

Untuk mengetahui informasi selengkapnya, lihat dokumentasi Key Management Service.

  1. Buat key ring.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Untuk mengetahui informasi selengkapnya, lihat Membuat ring kunci.

  2. Buat kunci di key ring. ROTATION_PERIOD menunjukkan interval untuk merotasi kunci, dan NEXT_ROTATION_TIME menunjukkan tanggal dan waktu saat rotasi pertama harus terjadi.

    Misalnya, untuk merotasi kunci setiap 30 hari dan melakukan rotasi pertama dalam 1 minggu, tetapkan ROTATION_PERIOD ke 30d dan NEXT_ROTATION_TIME ke $(date --utc --date="next week" --iso-8601=seconds).

    gcloud kms keys create KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --purpose "encryption" \
        --rotation-period ROTATION_PERIOD \
        --next-rotation-time "NEXT_ROTATION_TIME"
    

    Untuk mengetahui informasi selengkapnya, lihat Membuat kunci.

Membuat penyedia workload identity pool

Bagian ini adalah ringkasan singkat tentang Workload Identity Federation. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Workload Identity Federation.

  1. Buat workload identity pool (WIP). location untuk pool harus global.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    Untuk mengetahui informasi selengkapnya, lihat Mengelola workload identity pool dan penyedia.

  2. Buat penyedia workload identity pool. Argumen --attribute-condition memverifikasi bahwa pemanggil adalah akun layanan pencocokan rahasia.

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
       --location=global \
       --workload-identity-pool=WIP_ID \
       --display-name="PROVIDER_DISPLAY_NAME" \
       --description="PROVIDER_DESCRIPTION" \
       --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \
       --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
         'STABLE' in assertion.submods.confidential_space.support_attributes &&
         ['[email protected]'].exists(
             a, a in assertion.google_service_accounts) &&
         'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9'
         in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \
       --issuer-uri="https://confidentialcomputing.googleapis.com" \
       --allowed-audiences="https://sts.googleapis.com"
    
  3. Berikan peran pendekripsi kunci kepada penyedia WIP.

    # Grants the role to the WIP provider.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Mengenkripsi data

Enkripsi di Data Manager API memerlukan kunci enkripsi data (DEK). DEK adalah kunci simetris yang Anda gunakan untuk mengenkripsi data. DEK Anda dienkripsi menggunakan kunci Google Cloud KMS Anda. Anda mengirim DEK terenkripsi sebagai bagian dari permintaan.

Untuk menyiapkan data dalam permintaan enkripsi, ikuti panduan pemformatan dan hashing yang sama dengan yang Anda gunakan untuk data yang tidak dienkripsi.

Jangan mengenkripsi nilai yang tidak di-hash. Misalnya, region_code atau postal_code dari AddressInfo.

Setelah data untuk setiap kolom diformat dan di-hash, enkripsi nilai yang di-hash menggunakan langkah-langkah berikut:

  1. Enkode byte hash menggunakan encoding Base64.
  2. Enkripsi hash yang dienkode Base64 menggunakan DEK Anda.
  3. Enkode output dari proses enkripsi menggunakan encoding hex atau Base64.
  4. Gunakan nilai yang dienkode untuk kolom.
  5. Tetapkan encryption_info dan encoding pada permintaan.

Untuk menyelesaikan langkah terakhir, ubah IngestAudienceMembersRequest atau IngestEventsRequest untuk menunjukkan bahwa Anda mengenkripsi data Anda:

  • Tetapkan kolom encryption_info.
  • Tetapkan kolom encoding ke encoding yang digunakan untuk mengenkode nilai kolom terenkripsi.

Berikut cuplikan permintaan dengan setelan kolom enkripsi dan encoding:

{
  ...
  "encryptionInfo": {
    "gcpWrappedKeyInfo": {
      "kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
      "wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
      "keyType": "XCHACHA20_POLY1305",
      "encryptedDek": "ENCRYPTED_DEK"
    }
  },
  "encoding": "ENCODING"
}

Untuk menggunakan library dan utilitas Data Manager API guna membuat dan mengirim permintaan, lihat contoh kode IngestAudienceMembersWithEncryption untuk Java atau contoh kode ingest_audience_members_with_encryption untuk Python.