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

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

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

หมวดหมู่ กรณีการใช้งาน Google Cloud KMS AWS KMS
กลุ่มเป้าหมาย ส่งสมาชิกกลุ่มเป้าหมาย
เหตุการณ์ Conversion ออฟไลน์หรือ Conversion ที่ปรับปรุงแล้วสำหรับโอกาสในการขาย
เหตุการณ์ Conversion ยอดขายในร้านของ Google Ads
เหตุการณ์ เหตุการณ์ที่ส่งเป็นแหล่งข้อมูลเพิ่มเติมไปยังปลายทาง 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 Federation ดูข้อมูลเพิ่มเติมได้ที่ Workload Identity Federation

  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 จากเอาต์พุต คุณจะต้องใช้ ARN นี้ในขั้นตอนอื่นๆ

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 ในเอาต์พุต คุณจะต้องใช้ ARN นี้ในขั้นตอนอื่นๆ

    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 ที่เข้ารหัส, URI ของ KEK และผู้ให้บริการ WIP เป็นส่วนหนึ่งของคำขอ

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

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

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

  1. เข้ารหัสไบต์แฮชโดยใช้การเข้ารหัส Base64
  2. เข้ารหัสแฮชที่เข้ารหัส Base64 โดยใช้ DEK
  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 แก้ไขคำเตือนในการวินิจฉัย ส่งคำขออีกครั้ง และตรวจสอบว่าการวินิจฉัยไม่แสดงคำเตือนอีกต่อไปหลังจากที่คุณทำการเปลี่ยนแปลง