Enkripsi data pengguna

Data Manager API mendukung enkripsi data menggunakan layanan pengelolaan kunci berikut:

Dukungan untuk beberapa kasus penggunaan berbeda menurut layanan pengelolaan kunci (KMS):

Kategori Kasus penggunaan Google Cloud KMS AWS KMS
Audiens Mengirim anggota audiens
Peristiwa Konversi offline atau konversi yang disempurnakan untuk prospek
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 adalah 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 Enable Cloud KMS.

    Mengaktifkan Cloud KMS
  3. 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 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 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 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 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"
    
  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 Enkripsi data.

Menyiapkan AWS KMS

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

Menyiapkan AWS Command Line Interface

  1. Instal Antarmuka Command Line AWS.
  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 Antarmuka Command Line AWS.
  2. Login ke sesi IAM Identity Center.

Buat 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"
    

    Catat Arn di bagian KeyMetadata dalam output. Anda akan memerlukan Amazon Resource Name (ARN) ini di langkah-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 Antarmuka Command Line AWS. 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"

Catat ARN penyedia OIDC dari output. Anda akan membutuhkannya di langkah-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
    

    Catat ARN kebijakan IAM dalam output. Anda akan membutuhkannya di langkah-langkah lainnya.

    AWS_IAM_POLICY_ARN
    

Membuat dan melampirkan peran IAM

  1. Buat file JSON bernama role-trust-policy.json dengan isi 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. Lampirkan 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 KMS Google Cloud atau AWS Anda. Anda mengirim DEK terenkripsi sebagai bagian dari permintaan.

Untuk menyiapkan data dalam permintaan untuk dienkripsi, 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 adalah cuplikan permintaan menggunakan kunci Google Cloud KMS dan 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 untuk membuat dan mengirim permintaan, lihat contoh kode IngestAudienceMembersWithEncryption untuk Java atau contoh kode ingest_audience_members_with_encryption untuk Python.