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
ติดตั้งและ เริ่มต้นอินเทอร์เฟซบรรทัดคำสั่งของ Google Cloud
หากต้องการเลือกหรือสร้างโปรเจ็กต์ Google Cloud ใหม่และเปิดใช้ Cloud Key Management Service ให้คลิก เปิดใช้ Cloud KMS
เปิดใช้ Cloud KMSหากต้องการตั้งค่าโปรเจ็กต์ในสภาพแวดล้อม ให้ใช้คำสั่ง
gcloud config setหากต้องการตรวจสอบว่าได้ตั้งค่าโปรเจ็กต์ในสภาพแวดล้อมแล้ว ให้เรียกใช้gcloud config listหากไม่ได้ตั้งค่า
projectหรือต้องการใช้โปรเจ็กต์อื่นสำหรับคีย์ ให้เรียกใช้gcloud config setดังนี้gcloud config set project PROJECT_ID
สร้างคีย์
ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ Cloud Key Management Service
สร้างคีย์ริง
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATIONดูข้อมูลเพิ่มเติมได้ที่หัวข้อสร้างคีย์ริง
สร้างคีย์ในคีย์ริง 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
สร้าง Workload Identity Pool (WIP)
locationสำหรับพูลต้องเป็นglobalgcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"ดูข้อมูลเพิ่มเติมได้ที่หัวข้อ จัดการ Workload Identity Pool และ ผู้ให้บริการ
สร้างผู้ให้บริการ 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"มอบบทบาทผู้ถอดรหัสคีย์ให้กับผู้ให้บริการ 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"หากต้องการเข้ารหัสข้อมูลเหตุการณ์สำหรับ 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
- ติดตั้งอินเทอร์เฟซบรรทัดคำสั่งของ AWS
เรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันการติดตั้ง
aws --versionตัวอย่างเอาต์พุตสำหรับการติดตั้งที่สำเร็จมีดังนี้
aws-cli/2.31.12 Python/3.13.7 ...
ตั้งค่าผู้ใช้ AWS และลงชื่อเข้าใช้
- ทำตาม ข้อกำหนดเบื้องต้นสำหรับการใช้อินเทอร์เฟซบรรทัดคำสั่งของ AWS
- ลงชื่อเข้าใช้เซสชัน IAM Identity Center
สร้างคีย์
-
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 ไม่บังคับ: สร้างอีเมลแทนคีย์โดยใช้ชื่อแทน ที่เลือก
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
สร้างไฟล์ JSON ชื่อ
kms-decrypt-policy.jsonที่มีเนื้อหาต่อไปนี้{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }สร้างนโยบาย 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
สร้างไฟล์ 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*" } } } ] }สร้างบทบาท IAM ที่มีชื่อบทบาทที่เลือก
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonแนบนโยบายบทบาท กับนโยบาย 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
เมื่อจัดรูปแบบและแฮชข้อมูลสำหรับแต่ละช่องแล้ว ให้เข้ารหัสค่าที่แฮชโดยทำตามขั้นตอนต่อไปนี้
- เข้ารหัสไบต์แฮชโดยใช้การเข้ารหัส Base64
- เข้ารหัสแฮชที่เข้ารหัส Base64 โดยใช้ DEK
- เข้ารหัสเอาต์พุตจากกระบวนการเข้ารหัสโดยใช้การเข้ารหัสเลขฐานสิบหกหรือ Base64
- ใช้ค่าที่เข้ารหัสสำหรับช่อง
- ตั้งค่า
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 แก้ไขคำเตือนในการวินิจฉัย ส่งคำขออีกครั้ง และตรวจสอบว่าการวินิจฉัยไม่แสดงคำเตือนอีกต่อไปหลังจากที่คุณทำการเปลี่ยนแปลง