Data Manager API תומך בהצפנת נתונים באמצעות שירותי ניהול המפתחות הבאים:
התמיכה בתרחישי שימוש מסוימים משתנה בהתאם לשירות ניהול המפתחות (KMS):
| קטגוריה | תרחיש לדוגמה | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| קהלים | שליחת פרטי חברי הקהל | ||
| אירועים | המרות אופליין או המרות משופרות לצורך שיוך ללידים | ||
| אירועים | אירועים שנשלחים כמקור נתונים נוסף ליעד ב-Google Ads | ||
| אירועים | אירועים שנשלחים כמקור נתונים נוסף ליעד ב-Google Analytics |
הגדרה של Google Cloud KMS
אלה השלבים להגדרת משאבי Google Cloud KMS להצפנה.
הגדרה של ממשק שורת הפקודה של Google Cloud
מתקינים ומאתחלים את ממשק שורת הפקודה של Google Cloud.
כדי לבחור או ליצור פרויקט חדש ב-Google Cloud ולהפעיל את Cloud Key Management Service, לוחצים על Enable 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 ימים ולבצע את הרוטציה הראשונה תוך שבוע, מגדירים את 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 Federation. מידע נוסף זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.
יוצרים מאגר זהויות של עומסי עבודה (WIP). הערך
locationשל מאגר המשאבים צריך להיותglobal.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"מידע נוסף זמין במאמר בנושא ניהול של ספקים ומאגרי זהויות של עומסי עבודה.
יוצרים ספק של מאגר זהויות של עומסי עבודה. הארגומנט
--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"אם רוצים להצפין נתוני אירועים לצורך ייבוא של נתוני המרות אופליין והמרות משופרות לצורך שיוך ללידים, צריך להעניק את התפקיד 'מפענח מפתח' לחשבון השירות של 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 להצפנה.
הגדרת ממשק שורת הפקודה (CLI) של AWS
- מתקינים את ממשק שורת הפקודה של AWS.
מריצים את הפקודה הבאה כדי לוודא שההתקנה בוצעה:
aws --versionקטע מהפלט של התקנה מוצלחת:
aws-cli/2.31.12 Python/3.13.7 ...
הגדרה של משתמש ב-AWS וכניסה לחשבון
- מבצעים את הדרישות המוקדמות לשימוש בממשק שורת הפקודה של AWS.
- נכנסים לסשן ב-IAM Identity Center.
יצירת מפתח
יוצרים מפתח KMS סימטרי (KEK).
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"שימו לב ל-
ArnבקטעKeyMetadataבפלט. תצטרכו את שם משאב Amazon (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"
הצפנת נתונים
הצפנה בממשק API של המרכז לניהול נתונים מחייבת מפתח להצפנת נתונים (DEK). מפתח DEK הוא מפתח סימטרי שמשמש להצפנת נתונים. מפתח ה-DEK מוצפן באמצעות מפתח ה-KMS של Google Cloud או AWS. אתם שולחים את מפתח ה-DEK המוצפן כחלק מהבקשה.
כדי להכין את הנתונים בבקשה להצפנה, צריך לפעול לפי אותן הנחיות לפורמט ולגיבוב שבהן משתמשים לגבי נתונים לא מוצפנים.
אל תצפינו ערכים לא מגובבים. לדוגמה, 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 כדי ליצור ולשלוח בקשה, אפשר לעיין בדוגמת הקוד IngestAudienceMembersWithEncryption ל-Java או בדוגמת הקוד ingest_audience_members_with_encryption ל-Python.