1. סקירה כללית
Cloud KMS הוא שירות לניהול מפתחות שמתארח בענן ומאפשר לכם לנהל מפתחות קריפטוגרפיים לשירותי הענן שלכם באותו אופן שבו אתם מנהלים אותם בשרתים מקומיים. הוא כולל תמיכה בהצפנה, בפענוח, בחתימה ובאימות באמצעות מגוון סוגים ומקורות של מפתחות, כולל Cloud HSM למפתחות שמגובים בחומרה. במדריך הזה תלמדו איך להצפין ולפענח נתונים באמצעות מפתחות סימטריים של Cloud KMS.
מה תלמדו
- איך מפעילים את Cloud KMS API
- איך יוצרים אוסף מפתחות של Cloud KMS
- איך יוצרים מפתח קריפטוגרפי של Cloud KMS להצפנה ולפענוח סימטריים
- איך מבצעים רוטציה של מפתח קריפטוגרפי סימטרי ב-Cloud KMS
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' שבו מוסבר איך להשבית משאבים כדי שלא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300 USD.
מפעילים את Cloud Shell
בשיעור Codelab הזה נשתמש ב-Cloud Shell, סביבה וירטואלית חינמית שפועלת ב-Google Cloud. ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:
הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אלא אם צוין אחרת, מריצים את כל הפקודות מה-Shell הזה.
3. הפעלת Cloud KMS Service
כדי להשתמש ב-Cloud KMS, צריך קודם להפעיל את השירות בפרויקט. צריך לעשות את זה רק פעם אחת לכל פרויקט. כדי להפעיל את שירות Cloud KMS, מריצים את הפקודה הבאה:
$ gcloud services enable cloudkms.googleapis.com \
--project "${GOOGLE_CLOUD_PROJECT}"
יכולה לעבור עד דקה לפני שהתכונה תופעל. הפקודה תדווח על הצלחה כשהיא תסתיים.
4. יצירת מפתח KMS
יוצרים אוסף מפתחות של Cloud KMS. ב-Cloud KMS, אוסף מפתחות הוא אוסף לוגי של מפתחות קריפטוגרפיים. אוסף המפתחות מכיל מטא-נתונים על המפתחות, כמו המיקום שלהם. יוצרים אוסף מפתחות בשם my-keyring באזור global:
$ gcloud kms keyrings create "my-keyring" \
--location "global"
עכשיו יוצרים מפתח הצפנה בשם my-symmetric-key עם המטרה encryption בתוך אוסף המפתחות שיצרתם.
$ gcloud kms keys create "my-symmetric-key" \
--location "global" \
--keyring "my-keyring" \
--purpose "encryption"
5. הצפנת נתונים
יוצרים קובץ עם נתונים להצפנה ומשתמשים בכלי gcloud של שורת הפקודה כדי להצפין את הנתונים בקובץ:
$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
--location "global" \
--keyring "my-keyring" \
--key "my-symmetric-key" \
--plaintext-file ./data.txt \
--ciphertext-file ./data.txt.enc
הנתונים המוצפנים (שנקראים גם 'טקסט מוצפן') נשמרים ב-data.txt.enc בדיסק. אם תפתחו את הקובץ data.txt.enc, תראו שהוא מכיל תווים מוזרים שלא ניתן להדפיס. הסיבה לכך היא שהנתונים שמתקבלים הם בפורמט בינארי.
כשמאחסנים את הטקסט המוצפן במסד נתונים או מעבירים אותו כחלק מבקשת HTTP, יכול להיות שיהיה צורך לקודד את הנתונים. מנגנון קידוד נפוץ הוא base64.
Cloud KMS לא שומר אף אחד מהטקסטים בפורמט גלוי שאתם מספקים. צריך לשמור את המידע המוצפן (ciphertext) הזה במיקום מאובטח, כי הוא יידרש כדי לאחזר את ערך הטקסט לא מוצפן.
6. פענוח נתונים
מפענחים את הטקסט המוצפן מהקובץ באמצעות כלי שורת הפקודה gcloud:
$ gcloud kms decrypt \
--location "global" \
--keyring "my-keyring" \
--key "my-symmetric-key" \
--plaintext-file - \
--ciphertext-file ./data.txt.enc
כלי שורת הפקודה gcloud קורא את הטקסט המוצפן מהקובץ ומפענח אותו באמצעות Cloud KMS. בדוגמה הזו, הארגומנט --plaintext-file מוגדר כ--. הפקודה הזו מורה ל-gcloud להדפיס את התוצאה בטרמינל.
במסוף יודפס my-contents, שהוא אותו ערך טקסט פשוט מהקובץ שלמעלה.
7. החלפת מפתחות
ב-Cloud KMS, מפתח הצפנה הוא למעשה אוסף של גרסאות של מפתחות הצפנה. אתם יכולים ליצור גרסאות חדשות של מפתחות הצפנה כדי לבצע רוטציית מפתחות. Cloud KMS יכול גם לבצע רוטציה של מפתחות באופן אוטומטי לפי לוח זמנים.
כדי לבצע רוטציה למפתח באופן ידני, יוצרים גרסה חדשה של מפתח הצפנה ומגדירים אותה כגרסה הראשית:
$ gcloud kms keys versions create \
--location "global" \
--keyring "my-keyring" \
--key "my-symmetric-key" \
--primary
כל הבקשות העתידיות להצפנת נתונים ישתמשו במפתח החדש הזה. המפתחות הישנים עדיין זמינים לפענוח נתונים שהוצפנו בעבר באמצעות המפתחות האלה. Cloud KMS קובע באופן אוטומטי את מפתח הפענוח המתאים על סמך הטקסט המוצפן שסופק – אין צורך לציין איזו גרסה של מפתח קריפטוגרפי תשמש לפענוח.
כדי למנוע פענוח של ערכי טקסט מוצפן שהוצפנו באמצעות גרסה ישנה יותר של מפתח קריפטוגרפי באמצעות Cloud KMS, אפשר להשבית או להשמיד את הגרסה הזו של המפתח הקריפטוגרפי. השבתה היא פעולה הפיכה, בעוד שהשמדה היא פעולה סופית. כדי להשבית גרסה:
$ gcloud kms keys versions disable "1" \
--location "global" \
--keyring "my-keyring" \
--key "my-symmetric-key"
8. מעולה!
הפעלתם את Cloud KMS API, יצרתם מפתח הצפנה סימטרי והצפנתם ופענחתם נתונים. Cloud KMS הוא מוצר רב עוצמה, והצפנה ופענוח הם רק חלק קטן מהיכולות שלו.
פינוי נפח
אם סיימתם את הבדיקה, כדאי למחוק את הפרויקט.
- נכנסים אל Cloud Platform Console.
- בוחרים את הפרויקט שרוצים לסגור ולוחצים על Delete (מחיקה) בחלק העליון. הפעולה הזו תגרום לכך שהפרויקט יתוזמן למחיקה.
מידע נוסף
רישיון
העבודה הזו בשימוש במסגרת רישיון Creative Commons שמותנה בייחוס כללי מגרסה 2.0.