הצפנת נתוני משתמשים

‫Data Manager API תומך בהצפנת נתונים באמצעות שירותי ניהול המפתחות הבאים:

התמיכה בתרחישי שימוש מסוימים משתנה בהתאם לשירות ניהול המפתחות (KMS):

קטגוריה תרחיש שימוש Google Cloud KMS AWS KMS
קהלים שליחת משתמשים מקהל היעד
אירועים המרות אופליין או המרות משופרות לצורך שיוך ללידים
אירועים המרות למכירות בחנות הפיזית ב-Google Ads
אירועים המרות מכמה מקורות ב-Google Ads
אירועים אירועים ממקורות מרובים ב-Google Analytics

הגדרת Google Cloud KMS

כך מגדירים את המשאבים של Google Cloud KMS להצפנה.

הגדרת ממשק שורת הפקודה של Google Cloud

  1. מתקינים ומפעילים את ממשק שורת הפקודה של Google Cloud.

  2. כדי לבחור או ליצור פרויקט בענן חדש ב-Google Cloud ולהפעיל את Cloud Key Management Service, לוחצים על Enable 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 יום ולבצע את ההחלפה הראשונה בעוד שבוע, מגדירים את 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"
    

    מידע נוסף זמין במאמר יצירת מפתח.

יצירת ספק של מאגר זהויות של עומסי עבודה

בקטע הזה מופיעה סקירה כללית קצרה על איחוד שירותי אימות הזהות של עומסי עבודה. מידע נוסף זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.

  1. יוצרים מאגר זהויות של עומסי עבודה (WIP). הערך של location במאגר חייב להיות global.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    מידע נוסף זמין במאמר ניהול של ספקים ומאגרי זהויות של עומסי עבודה.

  2. יוצרים ספק של מאגר זהויות של עומסי עבודה. הארגומנט --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. אם אתם רוצים להצפין נתוני אירועים של המרות אופליין והמרות משופרות לצורך שיוך ללידים, אתם צריכים להקצות את התפקיד "מפענח מפתחות" לחשבון השירות של 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 מהפלט. תצטרכו את זה בשלבים אחרים.

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 מוצפן באמצעות המפתח להצפנת מפתחות הצפנה (KEK) של Google Cloud או AWS KMS. אתם שולחים את ה-DEK המוצפן, ה-URI של ה-KEK וספק ה-WIP כחלק מהבקשה.

כדי להכין את הנתונים בבקשה להצפנה, פועלים לפי אותן הנחיות לפורמט ולגיבוב שבהן משתמשים לנתונים לא מוצפנים.

אל תצפינו ערכים שלא עברו גיבוב. לדוגמה, אל תגבבו את השדות region_code,‏ postal_code,‏ city או administrative_area של AddressInfo.

אחרי שמעבירים את הנתונים בכל שדה לפורמט המתאים ומגבבים אותם, מצפינים את הערך המגובב לפי השלבים הבאים:

  1. מקודדים את בייטי הגיבוב באמצעות קידוד Base64.

  2. מצפינים את הגיבוב בקידוד Base64 באמצעות מפתח ה-DEK. מכיוון שהצופן הנדרש הוא XCHACHA20_POLY1305, הפונקציה encrypt() של Tink דורשת פרמטר נתונים משויך. הפרמטר הזה חייב להיות ריק (לדוגמה, b"" ב-Python או new byte[0] ב-Java). אם תעבירו את הערך null או ערך לא ריק, ה-Data Manager API לא יוכל לפענח את הנתונים.

  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. מטפלים בכל האזהרות שמופיעות באבחון, שולחים שוב את הבקשות ומוודאים שהאבחון לא מחזיר יותר אזהרות אחרי השינויים.