בדף הזה מוצגת דרך אחת להשתמש ב-Cloud Key Management Service כדי להצפין ישירות נתונים של אפליקציה בלקוח, לפני שהם מועברים ברשת.
בדוגמה הזו, הנתונים המוצפנים מועברים אל Google Cloud ומאוחסנים בקטגוריה של Cloud Storage. ב-Cloud Storage יש גם תמיכה בהצפנה אוטומטית מצד השרת באמצעות מפתחות הצפנה בניהול הלקוח, שמבצעת את כל התהליך הזה באופן אוטומטי. כדי להגן על נתוני האפליקציה לפני השידור שלהם אלGoogle Cloud, מומלץ להשתמש בספריית Tink.
ספריית Tink היא ספרייה רב-לשונית חוצת-פלטפורמות שמספקת ממשקי API למשימות קריפטוגרפיות נפוצות. אפשר להשתמש בזה כדי להצפין נתונים לפני שהם נכנסים Google Cloud למאגרי נתונים, ויש תמיכה בשפות Java, Python, C++, Go, Objective-C ושפות אחרות, וגם בשירותי אחסון אובייקטים ובשירותי מסדי נתונים רלציוניים.
במדריך הזה, נראה איך מצפינים קובץ באמצעות Cloud KMS לפני שמעלים אותו לקטגוריה. לאחר מכן, מורידים ומפענחים את אותם נתונים כדי שיהיה אפשר לקרוא אותם בלקוח.
כשפועלים לפי ההוראות האלה, המפתחות וכל הפעולות הקריפטוגרפיות נשארים ב- Google Cloud וצריך להשתמש ב-Cloud KMS לפענוח. הצפנה סימטרית גולמית מאפשרת להצפין או לפענח נתונים באופן מקומי בשרתים שלכם, או להעביר נתונים מוצפנים בין ספריות שונות וספקי שירותים שונים בלי לפענח אותם קודם.
לפני שמתחילים
ב Google Cloud ארגון, נדרשת הרשאה ליצור פרויקטים חדשים, להפעיל חיוב, ליצור משתמשים ולנהל הרשאות בפרויקטים האלה. ההרשאה הזו ניתנת בתפקיד roles/resourcemanager.organizationAdmin.
הגדרה
מומלץ להשתמש בשני פרויקטים ובשני משתמשים כדי להבטיח הפרדה בין תפקידים. אם פועלים לפי השלבים במדריך הזה, המשתמשים והשירותים שמנהלים את מפתחות ההצפנה נפרדים מהמשתמשים והשירותים שמשתמשים בהם. פרויקט אחד מכיל את המפתחות ומנהל אותם, ובפרויקט השני מאוחסנים הנתונים המוצפנים בקטגוריית Cloud Storage, והם מפוענחים לפי הצורך.
יצירת פרויקטים
יוצרים פרויקטים במסוף Google Cloud . הוראות מפורטות זמינות במאמר מדריך למתחילים בנושא ניהול זהויות והרשאות גישה.
יוצרים את הפרויקטים הבאים בארגון:
יוצרים Google Cloud פרויקט שיכיל את הקטגוריה של Cloud Storage שמשמשת לאחסון הסודות. הסודות יאוחסנו כאובייקטים בקטגוריה. הפרויקט הזה נקרא STORAGE_PROJECT_ID.
יוצרים פרויקט שני Google Cloud לניהול המפתחות של Cloud KMS שמשמשים להצפנה ולפענוח של הסוד. הפרויקט הזה נקרא KEY_PROJECT_ID.
בכל פרויקט, מפעילים את Cloud KMS API ומפעילים את החיוב לפי השלבים שמפורטים בקטע לפני שמתחילים במאמר בנושא התחלה מהירה של Cloud KMS.
צור משתמשים
אתם יוצרים משתמשים ומקצים להם תפקידים במסוף Google Cloud . הוראות מפורטות זמינות במאמר מדריך למתחילים בנושא ניהול זהויות והרשאות גישה.
התהליך הזה יוצר שני משתמשים. אדמין המפתחות מנהל את מפתחות ההצפנה, והמשתמש במפתחות יכול להצפין ולפענח נתונים באמצעות המפתחות.
מבצעים את התהליך הזה בפרויקט KEY_PROJECT_ID.
יוצרים את חשבון האדמין של המפתח.
נותנים למנהל המפתחות את התפקיד
roles/cloudkms.adminבניהול זהויות והרשאות גישה (IAM). התפקיד הזה מאפשר לאדמין של המפתחות ליצור ולנהל מפתחות.יוצרים את חשבון המשתמש הראשי.
נותנים למשתמש המרכזי את תפקיד ה-IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter. התפקיד הזה מאפשר למשתמש המפתח להצפין ולפענח נתונים.
יצירה של קטגוריית אחסון
מבצעים את התהליך הזה בפרויקט STORAGE_PROJECT_ID.
- יוצרים קטגוריית אחסון בשם
STORAGE_BUCKET. - מקצים את התפקיד
roles/storage.objectAdminבקטגוריית האחסון STORAGE_BUCKET לחשבון המשתמש הראשי.
יצירת מפתח הצפנה
מבצעים את התהליך הזה בתור משתמש האדמין הראשי בפרויקט KEY_PROJECT_ID.
יוצרים אוסף מפתחות. השם של אוסף מפתחות חייב להיות ייחודי בתוך הפרויקט. אי אפשר לשנות את השם של אוסף מפתחות או למחוק אותו. משתמשים ב-Google Cloud CLI כדי ליצור אוסף מפתחות.
gcloud kms keyrings create KEY_RING \ --location LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_RING: השם שבו רוצים להשתמש עבור מחזיק המפתחות של האחסון, לדוגמהstorage. -
LOCATION: המיקום שבו רוצים ליצור את מחזיק המפתחות. המיקום צריך להיות קרוב גיאוגרפית למיקום שבו רוצים ליצור את הקטגוריה של Cloud Storage.
-
יוצרים מפתח הצפנה באוסף המפתחות. השם של המפתח חייב להיות ייחודי בתוך אוסף המפתחות. אי אפשר לשנות את השם של מפתחות או למחוק אותם, אבל אפשר להשמיד את גרסאות המפתחות שלהם. משתמשים ב-Google Cloud CLI כדי ליצור את המפתח. גרסה ראשונית של המפתח נוצרת באופן אוטומטי והופכת לגרסה הראשית.
gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose encryption
מחליפים את מה שכתוב בשדות הבאים:
-
LOCATION: המיקום שבו יצרתם את אוסף המפתחות. -
KEY_NAME: השם שבו רוצים להשתמש בשביל מפתח האחסון, לדוגמהstorage. -
KEY_RING: השם שבו השתמשתם עבור מחזיק המפתחות של האחסון, לדוגמהstorage.
הערה: כדי להשתמש במפתחות להצפנה סימטרית גולמית, צריך להגדיר את השדה purpose (מטרה) לערך
raw-encryption.-
מידע נוסף על יצירת מחזיקי מפתחות ומפתחות
הצפנה של הקובץ שמכיל את הסוד
מבצעים את התהליך הזה באמצעות חשבון המשתמש הראשי, ועובדים בשני הפרויקטים.
במחשב המקומי, שומרים את הסוד.
echo "SECRET_TEXT" > PATH_TO_SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
SECRET_TEXT: הסוד שרוצים להגן עליו, בטקסט רגיל. לדוגמה:this is a secret. -
PATH_TO_SECRET: הנתיב שבו רוצים ליצור את הסוד, לדוגמהsecret.txt.
-
מצפינים את הסוד באמצעות Cloud KMS ומפתח ההצפנה.
gcloud kms encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --plaintext-file PATH_TO_SECRET \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
LOCATION: המיקום שבו יצרתם את אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות. -
KEY_NAME: השם של מפתח ההצפנה. -
PATH_TO_SECRET: הנתיב שבו יצרתם את הסוד. -
PATH_TO_ENCRYPTED_SECRET: הנתיב שבו רוצים לשמור את הסוד המוצפן. לדוגמה:secret.txt.encrypted.
במדריך לתחילת העבודה בנושא הצפנת נתונים תוכלו לקבל מידע נוסף על הצפנת נתונים.
במקום זאת, צריך להשתמש ב-
raw-encryptבשביל הצפנה סימטרית גולמית.-
מעלים את קובץ הסוד המוצפן לקטגוריית האחסון. אפשר להשתמש בפקודה הבאה ב-CLI של gcloud:
gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
מידע נוסף על העלאת אובייקטים לקטגוריית אחסון
אופציונלי: מוחקים את קובץ הסוד בטקסט לא מוצפן (
PATH_TO_SECRET) מהמחשב המקומי. מומלץ להשתמש בהצפנה בקבצים שמכילים מידע אישי רגיש לא מוצפן.
קטגוריית האחסון STORAGE_BUCKET מכילה עכשיו את קובץ הסוד המוצפן, שמוצפן באמצעות מפתח ההצפנה KEY_NAME.
פענוח הקובץ שמכיל את הסוד
מבצעים את השלבים האלה בחשבון המשתמש הראשי, ועובדים בשני הפרויקטים.
מורידים את קובץ הסוד המוצפן מקטגוריית האחסון. אפשר להשתמש בפקודה הבאה ב-CLI של gcloud:
gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
מידע נוסף על הורדת אובייקטים מקטגוריית אחסון
מפענחים את הקובץ באמצעות אותו מפתח שבו השתמשתם כדי להצפין אותו.
gcloud kms decrypt --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET \ --plaintext-file PATH_TO_DECRYPTED_SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
LOCATION: המיקום שבו יצרתם את אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות. -
KEY_NAME: השם של מפתח ההצפנה. PATH_TO_ENCRYPTED_SECRET: הנתיב לסוד המוצפן שהורדתם, לדוגמהsecret.txt.encrypted.-
PATH_TO_DECRYPTED_SECRET: הנתיב שבו רוצים לשמור את הסוד המפוענח, לדוגמהsecret_decrypted.txt.
מידע נוסף על פענוח נתונים זמין במאמר הפעלה מהירה של הצפנת נתונים.
במקום זאת, צריך להשתמש ב-
raw-decryptלהצפנה סימטרית גולמית.עכשיו אפשר לקרוא את הטקסט הרגיל המפוענח של הסוד באמצעות
catאו עורך טקסט. התוכן זהה לתוכן המקורי שלPATH_TO_SECRET.-
אופציונלי: מוחקים את הקבצים
PATH_TO_ENCRYPTED_SECRETו-PATH_TO_DECRYPTED_SECRETמהמחשב המקומי.
סידור וארגון
כדי לנקות, מוחקים את כל הקבצים שיצרתם במחשב המקומי, ואז מוחקים את הפרויקטים KEY_PROJECT_ID ו-STORAGE_PROJECT_ID.
המאמרים הבאים
- מידע נוסף על ניהול סודות
- מידע נוסף על הפרדת תפקידים
- איך נותנים, משנים ומבטלים גישה למשאבים
- מידע נוסף על יצירת חשבון שירות