כך שולחים נתונים מוצפנים בבקשות להטמעת חברי קהל.
הגדרת ממשק שורת הפקודה של Google Cloud
מתקינים ומפעילים את ממשק שורת הפקודה של Google Cloud.
כדי לוודא שהרכיבים של
gcloud
מעודכנים, מריצים את הפקודה הבאה.gcloud components update
כדי לבחור או ליצור פרויקט חדש ב-Google Cloud ולהפעיל את Cloud Key Management Service, לוחצים על Enable Cloud KMS.
כדי להגדיר את הפרויקט בסביבה, משתמשים בפקודה
gcloud config set
. כדי לבדוק אם הפרויקט כבר מוגדר בסביבה, מריצים את הפקודהgcloud config list
.אם לא מגדירים את
project
או אם רוצים להשתמש בפרויקט אחר למפתח, מפעילים אתgcloud config set
:gcloud config set project PROJECT_ID
יצירת מפתח
מידע נוסף זמין במסמכי העזרה של 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"
מידע נוסף זמין במאמר יצירת מפתח.
יצירת ספק של מאגר זהויות של כוח עבודה
בקטע הזה מופיעה סקירה כללית קצרה על איחוד שירותי אימות הזהות של עומסי עבודה. למידע נוסף, ראו המסמכים של איחוד שירותי אימות הזהות של עומסי עבודה.
יוצרים מאגר זהויות של כוח עבודה (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"
הצפנת נתונים
כדי להצפין את הנתונים ב-Data Manager API, צריך מפתח להצפנת נתונים (DEK). מפתח DEK הוא מפתח סימטרי שמשמש להצפנת נתונים. המפתח להצפנת הנתונים (DEK) מוצפן באמצעות המפתח שלכם ב-Google Cloud KMS. אתם שולחים את ה-DEK המוצפן כחלק מהבקשה.
כדי להכין את הנתונים בבקשה להצפנה, פועלים לפי אותן הנחיות לגבי פורמט וגיבוב שמשתמשים בהן לנתונים לא מוצפנים.
אין להצפין ערכים שלא עברו גיבוב. לדוגמה, region_code
או postal_code
של AddressInfo
.
אחרי שמפורמטים את הנתונים של כל שדה ומגבבים אותם, מצפינים את הערך המגובב לפי השלבים הבאים:
- מקודדים את הבייטים של הגיבוב באמצעות קידוד Base64.
- מצפינים את הגיבוב בקידוד Base64 באמצעות מפתח ה-DEK.
- מקודדים את הפלט מתהליך ההצפנה באמצעות קידוד הקסדצימלי או קידוד Base64.
- משתמשים בערך המקודד של השדה.
- מגדירים את השדות
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.