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

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

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

หมวดหมู่ กรณีการใช้งาน Google Cloud KMS AWS KMS
กลุ่มเป้าหมาย ส่งให้สมาชิกในกลุ่มเป้าหมาย
เหตุการณ์ Conversion ออฟไลน์หรือ 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

ส่วนนี้เป็นภาพรวมสั้นๆ ของการรวมศูนย์ข้อมูล 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 อาร์กิวเมนต์ --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 ที่ปรับปรุงแล้วสําหรับโอกาสในการขาย ให้มอบบทบาทผู้ถอดรหัสคีย์ให้กับบัญชีบริการ datamanager-api@datamanager-ga.iam.gserviceaccount.com ของ Google

    # 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 Command Line Interface ให้ครบถ้วน
  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 โดยใช้คีย์ Google Cloud หรือ AWS KMS คุณส่ง DEK ที่เข้ารหัสเป็นส่วนหนึ่งของคำขอ

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

อย่าเข้ารหัสค่าที่ไม่ได้แฮช เช่น 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 เพื่อสร้างและส่งคำขอ โปรดดูIngestAudienceMembersWithEncryption ตัวอย่างโค้ดสำหรับ Java หรือingest_audience_members_with_encryption ตัวอย่างโค้ดสำหรับ Python