Enkripsi data pengguna

Data Manager API mendukung enkripsi data menggunakan key management service (KMS) berikut:

Dukungan untuk beberapa kasus penggunaan berbeda menurut key management service (KMS):

Kategori Kasus penggunaan Google Cloud KMS AWS KMS
Audiens Mengirim anggota audiens
Peristiwa Konversi offline atau konversi yang disempurnakan untuk lead
Peristiwa Konversi penjualan toko Google Ads
Peristiwa Peristiwa yang dikirim sebagai sumber data tambahan ke tujuan Google Ads
Peristiwa Peristiwa yang dikirim sebagai sumber data tambahan ke tujuan Google Analytics

Menyiapkan Google Cloud KMS

Berikut langkah-langkah untuk menyiapkan resource Google Cloud KMS untuk enkripsi.

Menyiapkan antarmuka command line Google Cloud

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

  2. Untuk memilih atau membuat project Google Cloud baru dan mengaktifkan Cloud Key Management Service, klik Aktifkan Cloud KMS.

    Mengaktifkan Cloud KMS
  3. Untuk menetapkan project di lingkungan Anda, gunakan gcloud config set perintah. Untuk memeriksa apakah project sudah ditetapkan di lingkungan Anda, jalankan gcloud config list.

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

    gcloud config set project PROJECT_ID
    

Membuat kunci

Untuk mengetahui informasi selengkapnya, lihat Ringkasan Cloud Key Management Service.

  1. Buat key ring.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Untuk mengetahui informasi selengkapnya, lihat Membuat key ring.

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

    Misalnya, untuk memutar 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 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 &&
         ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].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 dekripsi 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"
    
  4. Jika Anda ingin mengenkripsi data peristiwa untuk konversi offline dan konversi yang disempurnakan untuk lead, berikan peran dekripsi kunci ke akun layanan Google datamanager-api@datamanager-ga.iam.gserviceaccount.com.

    # Grants the role to the Google service account.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "serviceAccount:datamanager-api@datamanager-ga.iam.gserviceaccount.com" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Lanjutkan ke bagian Mengenkripsi data.

Menyiapkan AWS KMS

Berikut langkah-langkah untuk menyiapkan resource AWS KMS untuk enkripsi.

Menyiapkan AWS Command Line Interface

  1. Instal AWS Command Line Interface.
  2. Jalankan perintah berikut untuk memverifikasi penginstalan:

    aws --version
    

    Berikut adalah cuplikan output untuk penginstalan yang berhasil:

    aws-cli/2.31.12 Python/3.13.7 ...
    

Menyiapkan pengguna AWS dan login

  1. Selesaikan prasyarat untuk menggunakan AWS Command Line Interface.
  2. Login ke sesi IAM Identity Center.

Membuat kunci

  1. Buat kunci KMS simetris (KEK).

    aws kms create-key \
      --key-usage ENCRYPT_DECRYPT \
      --key-spec SYMMETRIC_DEFAULT \
      --description "KEK for Confidential Matching Data Encryption"
    

    Perhatikan Arn di bagian KeyMetadata dalam output. Anda akan memerlukan Amazon Resource Name (ARN) ini di langkah lainnya.

    AWS_KEY_ARN
    
  2. Opsional: Buat alias kunci menggunakan nama alias pilihan Anda.

    aws kms create-alias \
      --alias-name "alias/AWS_KEY_ALIAS" \
      --target-key-id AWS_KEY_ARN
    

    Alias tidak diperlukan, tetapi berguna untuk membuat perintah AWS Command Line Interface. Misalnya, Anda dapat mengambil ARN kunci menggunakan alias:

    aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \
      --query 'KeyMetadata.Arn' \
      --output text
    

Membuat penyedia identitas OpenID Connect

Buat penyedia identitas OpenID Connect (OIDC). Anda hanya perlu melakukan langkah ini satu kali per akun AWS.

aws iam create-open-id-connect-provider \
  --url https://confidentialcomputing.googleapis.com \
  --client-id-list AUDIENCE \
  --thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"

Perhatikan ARN penyedia OIDC dari output. Anda akan memerlukannya di langkah lainnya.

AWS_OIDC_PROVIDER_ARN

Membuat kebijakan IAM

  1. Buat file JSON bernama kms-decrypt-policy.json dengan konten berikut:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. Buat kebijakan IAM menggunakan file JSON dan nama kebijakan pilihan Anda.

    aws iam create-policy \
      --policy-name "AWS_POLICY_NAME" \
      --policy-document file://kms-decrypt-policy.json
    

    Perhatikan ARN kebijakan IAM dalam output. Anda akan memerlukannya di langkah lainnya.

    AWS_IAM_POLICY_ARN
    

Membuat dan menghubungkan peran IAM

  1. Buat file JSON bernama role-trust-policy.json dengan konten berikut dan ARN penyedia OIDC dari langkah sebelumnya:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "AWS_OIDC_PROVIDER_ARN"
                },
                "Action": [
                    "sts:AssumeRoleWithWebIdentity",
                    "sts:TagSession"
                ],
                "Condition": {
                    "StringEquals": {
                        "confidentialcomputing.googleapis.com:aud": "cfm-awsresource",
                        "aws:RequestTag/swname": "CONFIDENTIAL_SPACE",
                        "aws:RequestTag/container.signatures.key_ids": "6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9"
                    },
                    "StringLike": {
                        "aws:RequestTag/confidential_space.support_attributes": "*STABLE*"
                    }
                }
            }
        ]
    }
    
  2. Buat peran IAM dengan nama peran pilihan Anda.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. Hubungkan kebijakan peran ke kebijakan IAM.

    aws iam attach-role-policy \
      --role-name "AWS_IAM_ROLE_NAME" \
      --policy-arn "AWS_IAM_POLICY_ARN"
    

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 enkripsi kunci (KEK) Google Cloud atau AWS KMS. Anda mengirim DEK terenkripsi, URI KEK, dan penyedia WIP sebagai bagian dari permintaan.

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

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

Setelah data untuk setiap kolom diformat dan di-hash, enkripsi nilai 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 adalah cuplikan permintaan menggunakan kunci Google Cloud KMS dan dengan kolom enkripsi dan encoding yang ditetapkan:

{
  ...
  "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 untuk membuat dan mengirim permintaan, lihat contoh kode IngestAudienceMembers untuk Java atau contoh kode ingest_audience_members untuk Python.

Memeriksa diagnostik untuk masalah enkripsi

Setelah mengupload data terenkripsi, gunakan diagnostik untuk memeriksa peringatan terkait enkripsi, seperti PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED atau PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. Atasi peringatan apa pun dalam diagnostik, kirim permintaan lagi, dan pastikan diagnostik tidak lagi menampilkan peringatan setelah perubahan Anda.