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

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

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

קטגוריה תרחיש לדוגמה Google Cloud KMS AWS KMS
קהלים שליחת פרטי חברי הקהל
אירועים המרות אופליין או המרות משופרות לצורך שיוך ללידים
אירועים אירועים שנשלחים כמקור נתונים נוסף ליעד ב-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"
    

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

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

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

  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 להצפנה.

הגדרת ממשק שורת הפקודה (CLI) של 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 (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"
    

הצפנת נתונים

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