เข้ารหัสข้อมูลผู้ใช้

Data Manager API รองรับการเข้ารหัสข้อมูลโดยใช้บริการจัดการคีย์ต่อไปนี้

การรองรับกรณีการใช้งานบางกรณีจะแตกต่างกันไปตามบริการจัดการคีย์ (KMS) ดังนี้

หมวดหมู่ กรณีการใช้งาน Google Cloud KMS AWS KMS
กลุ่มเป้าหมาย ส่งสมาชิกในกลุ่มเป้าหมาย
เหตุการณ์ Conversion ออฟไลน์หรือ Conversion ที่ปรับปรุงแล้วสำหรับโอกาสในการขาย
เหตุการณ์ Conversion ยอดขายในร้านของ Google Ads
เหตุการณ์ Conversion จากหลายแหล่งที่มาของ Google Ads
เหตุการณ์ เหตุการณ์จากหลายแหล่งที่มาของ Google Analytics

ตั้งค่า Google Cloud KMS

ขั้นตอนการตั้งค่าทรัพยากร Google Cloud KMS สำหรับการเข้ารหัสมีดังนี้

ตั้งค่าอินเทอร์เฟซบรรทัดคำสั่งของ Google Cloud

  1. ติดตั้งและเริ่มต้นอินเทอร์เฟซบรรทัดคำสั่งของ Google Cloud

  2. หากต้องการเลือกหรือสร้างโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google Cloud ใหม่และเปิดใช้ Cloud Key Management Service ให้คลิกเปิดใช้ Cloud KMS

    เปิดใช้ Cloud KMS
  3. หากต้องการตั้งค่าโปรเจ็กต์ในสภาพแวดล้อม ให้ใช้คำสั่ง gcloud config set หากต้องการตรวจสอบว่ามีการตั้งค่าโปรเจ็กต์ในสภาพแวดล้อมของคุณแล้วหรือไม่ ให้เรียกใช้ gcloud config list

    หากไม่ได้ตั้งค่า project หรือต้องการใช้โปรเจ็กต์อื่นสำหรับคีย์ ให้เรียกใช้ gcloud config set ดังนี้

    gcloud config set project PROJECT_ID
    

สร้างคีย์

ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ Cloud Key Management Service

  1. สร้างคีย์ริง

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    ดูข้อมูลเพิ่มเติมได้ที่สร้างคีย์ริง

  2. สร้างคีย์ในคีย์ริง ROTATION_PERIOD ระบุช่วงเวลาในการหมุนเวียนคีย์ และ NEXT_ROTATION_TIME ระบุวันที่และเวลาที่ควรหมุนเวียนคีย์ครั้งแรก

    ตัวอย่างเช่น หากต้องการหมุนเวียนคีย์ทุก 30 วันและทำการหมุนเวียนครั้งแรกใน 1 สัปดาห์ ให้ตั้งค่า ROTATION_PERIOD เป็น 30d และ NEXT_ROTATION_TIME เป็น $(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"
    

    ดูข้อมูลเพิ่มเติมได้ที่สร้างคีย์

สร้างผู้ให้บริการ Workload Identity Pool

ส่วนนี้เป็นภาพรวมสั้นๆ เกี่ยวกับการรวมศูนย์ Workload Identity ดูข้อมูลเพิ่มเติมได้ที่การรวมศูนย์ Workload Identity

  1. สร้าง Workload Identity Pool (WIP) location สำหรับพูลต้องเป็น global

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

    ดูข้อมูลเพิ่มเติมได้ที่จัดการ Workload Identity Pool และผู้ให้บริการ

  2. สร้างผู้ให้บริการ Workload Identity Pool อาร์กิวเมนต์ --attribute-condition จะยืนยันว่าผู้เรียกเป็นบัญชีบริการการจับคู่ข้อมูลแบบเป็นความลับ

    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. มอบบทบาทผู้ถอดรหัสคีย์ให้กับผู้ให้บริการ 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. หากต้องการเข้ารหัสข้อมูลเหตุการณ์สำหรับ Conversion ออฟไลน์และ Conversion ที่ปรับปรุงแล้วสำหรับโอกาสในการขาย ให้มอบบทบาทผู้ถอดรหัสคีย์ให้กับบัญชีบริการของ 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"
    

ไปที่ส่วนเข้ารหัสข้อมูล

ตั้งค่า AWS KMS

ขั้นตอนการตั้งค่าทรัพยากร AWS KMS สำหรับการเข้ารหัสมีดังนี้

ตั้งค่าอินเทอร์เฟซบรรทัดคำสั่งของ AWS

  1. ติดตั้งอินเทอร์เฟซบรรทัดคำสั่งของ AWS
  2. เรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันการติดตั้ง

    aws --version
    

    ตัวอย่างเอาต์พุตสำหรับการติดตั้งที่สำเร็จมีดังนี้

    aws-cli/2.31.12 Python/3.13.7 ...
    

ตั้งค่าผู้ใช้ AWS และลงชื่อเข้าใช้

  1. ทำตามข้อกำหนดเบื้องต้นสำหรับการใช้อินเทอร์เฟซบรรทัดคำสั่งของ AWS
  2. ลงชื่อเข้าใช้เซสชัน IAM Identity Center

สร้างคีย์

  1. สร้างคีย์ KMS แบบสมมาตร (KEK)

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

    โปรดสังเกต Arn ใต้ KeyMetadata ในเอาต์พุต คุณจะต้องใช้ Amazon Resource Name (ARN) นี้ในขั้นตอนอื่นๆ

    AWS_KEY_ARN
    
  2. ไม่บังคับ: สร้างชื่อแทนคีย์โดยใช้ชื่อแทนที่คุณเลือก

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

    ไม่จำเป็นต้องใช้นามแฝง แต่จะมีประโยชน์สำหรับการสร้างคำสั่งอินเทอร์เฟซบรรทัดคำสั่งของ AWS ตัวอย่างเช่น คุณสามารถเรียกข้อมูล ARN ของคีย์โดยใช้นามแฝงต่อไปนี้

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

สร้างผู้ให้บริการข้อมูลประจำตัว OpenID Connect

สร้างผู้ให้บริการข้อมูลประจำตัว OpenID Connect (OIDC) คุณต้องทำขั้นตอนนี้เพียงครั้งเดียวต่อบัญชี AWS

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

จดบันทึก ARN ของผู้ให้บริการ OIDC จากเอาต์พุต ซึ่งคุณจะต้องใช้ในขั้นตอนอื่นๆ

AWS_OIDC_PROVIDER_ARN

สร้างนโยบาย IAM

  1. สร้างไฟล์ JSON ชื่อ kms-decrypt-policy.json โดยมีเนื้อหาต่อไปนี้

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. สร้างนโยบาย IAM โดยใช้ไฟล์ JSON และชื่อนโยบายที่คุณเลือก

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

    จด ARN ของนโยบาย IAM ในเอาต์พุต ซึ่งคุณจะต้องใช้ในขั้นตอนอื่นๆ

    AWS_IAM_POLICY_ARN
    

สร้างและแนบบทบาท IAM

  1. สร้างไฟล์ JSON ชื่อ role-trust-policy.json โดยมีเนื้อหาต่อไปนี้และ ARN ของผู้ให้บริการ OIDC จากขั้นตอนก่อนหน้า

    {
        "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. สร้างบทบาท IAM โดยใช้ชื่อบทบาทที่คุณเลือก

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. แนบนโยบายบทบาทกับนโยบาย IAM

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

เข้ารหัสข้อมูล

การเข้ารหัสใน Data Manager API ต้องใช้คีย์การเข้ารหัสข้อมูล (DEK) DEK คือคีย์แบบสมมาตรที่คุณใช้เพื่อเข้ารหัสข้อมูล DEK จะได้รับการเข้ารหัสโดยใช้คีย์การเข้ารหัสคีย์ (KEK) ของ Google Cloud หรือ AWS KMS คุณส่ง DEK, KEK URI และผู้ให้บริการ WIP ที่เข้ารหัสเป็นส่วนหนึ่งของคำขอ

หากต้องการเตรียมข้อมูลในคำขอสำหรับการเข้ารหัส ให้ทำตามหลักเกณฑ์การจัดรูปแบบและการแฮชเดียวกันกับที่คุณใช้สำหรับข้อมูลที่ไม่ได้เข้ารหัส

อย่าเข้ารหัสค่าที่ไม่ได้แฮช ตัวอย่างเช่น อย่าแฮช region_code, postal_code, city หรือ administrative_area ของ AddressInfo

เมื่อจัดรูปแบบและแฮชข้อมูลของแต่ละช่องแล้ว ให้เข้ารหัสค่าแฮชโดยทำตามขั้นตอนต่อไปนี้

  1. เข้ารหัสไบต์แฮชโดยใช้การเข้ารหัส Base64

  2. เข้ารหัสแฮชที่เข้ารหัส Base64 โดยใช้ DEK เนื่องจากรหัสที่จำเป็นคือ XCHACHA20_POLY1305 ฟังก์ชัน encrypt() ของ Tink จึงต้องใช้พารามิเตอร์ข้อมูลที่เชื่อมโยง พารามิเตอร์นี้ต้องว่างเปล่า (เช่น b"" ใน Python หรือ new byte[0] ใน Java) หากคุณส่ง null หรือค่าที่ไม่ใช่ค่าว่าง Data Manager API จะถอดรหัสข้อมูลไม่ได้

  3. เข้ารหัสเอาต์พุตจากกระบวนการเข้ารหัสโดยใช้การเข้ารหัสแบบฐานสิบหกหรือ Base64

  4. ใช้ค่าที่เข้ารหัสสำหรับช่อง

  5. ตั้งค่า encryption_info และ encoding ในคำขอ

หากต้องการทำขั้นตอนสุดท้ายให้เสร็จสมบูรณ์ ให้แก้ไข IngestAudienceMembersRequest หรือ IngestEventsRequest เพื่อระบุว่าคุณเข้ารหัสข้อมูลแล้ว โดยทำดังนี้

  • ตั้งค่าช่อง encryption_info

  • ตั้งค่าช่อง encoding เป็นการเข้ารหัสที่ใช้เพื่อเข้ารหัสค่าของช่องที่เข้ารหัส

ต่อไปนี้เป็นตัวอย่างคำขอที่ใช้คีย์ Google Cloud KMS และมีการตั้งค่าช่องการเข้ารหัสและการเข้ารหัส

{
  ...
  "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"
}

หากต้องการใช้ไลบรารีและยูทิลิตีของ Data Manager API เพื่อสร้างและส่งคำขอ โปรดดูตัวอย่างโค้ด IngestAudienceMembers สำหรับ Java หรือตัวอย่างโค้ด ingest_audience_members สำหรับ Python

ตรวจสอบการวินิจฉัยเพื่อหาปัญหาการเข้ารหัส

หลังจากอัปโหลดข้อมูลที่เข้ารหัสแล้ว ให้ใช้การวินิจฉัยเพื่อตรวจสอบคำเตือนที่เกี่ยวข้องกับการเข้ารหัส เช่น PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED หรือ PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR แก้ไขคำเตือนในการวินิจฉัย ส่งคำขออีกครั้ง และยืนยันว่าการวินิจฉัยไม่แสดงคำเตือนอีกต่อไปหลังจากการเปลี่ยนแปลง