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
ติดตั้งและ เริ่มต้นใช้งานอินเทอร์เฟซบรรทัดคำสั่งของ 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 ดูข้อมูลเพิ่มเติมได้ที่การรวมศูนย์ Workload Identity
สร้าง 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 ที่ปรับปรุงแล้วสําหรับโอกาสในการขาย ให้มอบบทบาทผู้ถอดรหัสคีย์ให้กับบัญชีบริการ
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
- ติดตั้งอินเทอร์เฟซบรรทัดคำสั่งของ AWS
เรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันการติดตั้ง
aws --versionต่อไปนี้คือข้อมูลโค้ดของเอาต์พุตสำหรับการติดตั้งที่สำเร็จ
aws-cli/2.31.12 Python/3.13.7 ...
ตั้งค่าผู้ใช้ AWS และลงชื่อเข้าใช้
- ทำตามข้อกำหนดเบื้องต้นสำหรับการใช้ AWS Command Line Interface ให้ครบถ้วน
- ลงชื่อเข้าใช้เซสชัน 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 จากเอาต์พุต เนื่องจากคุณจะต้องใช้ในขั้นตอนอื่นๆ
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 ในเอาต์พุต เนื่องจากคุณจะต้องใช้ในขั้นตอนอื่นๆ
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, city หรือ administrative_area ของ
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 จัดการคำเตือนในการวินิจฉัย ส่งคำขออีกครั้ง และตรวจสอบว่าการวินิจฉัยไม่แสดงคำเตือนอีกต่อไปหลังจากที่คุณทำการเปลี่ยนแปลง