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