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

כך שולחים נתונים מוצפנים בבקשות להטמעת חברי קהל.

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

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

  2. כדי לוודא שהרכיבים של gcloud מעודכנים, מריצים את הפקודה הבאה.

    gcloud components update
    
  3. כדי לבחור או ליצור פרויקט חדש ב-Google Cloud ולהפעיל את Cloud Key Management Service, לוחצים על Enable Cloud KMS.

    הפעלת Cloud KMS
  4. כדי להגדיר את הפרויקט בסביבה, משתמשים בפקודה gcloud config set. כדי לבדוק אם הפרויקט כבר מוגדר בסביבה, מריצים את הפקודה gcloud config list.

    אם לא מגדירים את project או אם רוצים להשתמש בפרויקט אחר למפתח, מפעילים את gcloud config set:

    gcloud config set project PROJECT_ID
    

יצירת מפתח

מידע נוסף זמין במסמכי העזרה של 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"
    

הצפנת נתונים

כדי להצפין את הנתונים ב-Data Manager API, צריך מפתח להצפנת נתונים (DEK). מפתח DEK הוא מפתח סימטרי שמשמש להצפנת נתונים. המפתח להצפנת הנתונים (DEK) מוצפן באמצעות המפתח שלכם ב-Google Cloud KMS. אתם שולחים את ה-DEK המוצפן כחלק מהבקשה.

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

אין להצפין ערכים שלא עברו גיבוב. לדוגמה, region_code או postal_code של AddressInfo.

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

  1. מקודדים את הבייטים של הגיבוב באמצעות קידוד Base64.
  2. מצפינים את הגיבוב בקידוד Base64 באמצעות מפתח ה-DEK.
  3. מקודדים את הפלט מתהליך ההצפנה באמצעות קידוד הקסדצימלי או קידוד Base64.
  4. משתמשים בערך המקודד של השדה.
  5. מגדירים את השדות encryption_info ו-encoding בבקשה.

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

  • מגדירים את השדה encryption_info.
  • מגדירים את השדה encoding לקידוד שמשמש לקידוד ערכי השדות המוצפנים.

לפניכם קטע מקוד של בקשה עם השדות של ההצפנה והקידוד מוגדרים:

{
  ...
  "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.