הצפנה ופענוח של נתונים באמצעות Cloud KMS

1. סקירה כללית

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

כך תלמדו

  • איך מפעילים את ממשק Cloud KMS API
  • איך יוצרים צלצול מפתחות של Cloud KMS
  • איך יוצרים מפתח הצפנה של Cloud KMS להצפנה/פענוח סימטריים
  • איך לבצע סיבוב של מפתח הצפנה סימטרי של Cloud KMS

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

ב-Codelab הזה משתמשים ב-Cloud Shell, סביבה וירטואלית חינמית שפועלת ב-Google Cloud. ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB, והיא פועלת ב-Google Cloud כדי לשפר משמעותית את ביצועי הרשת והאימות. מריצים את כל הפקודות מהמעטפת הזו, אלא אם צוין אחרת.

3. הפעלת שירות Cloud KMS

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

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

כדי למנוע פענוח של ערכים של מידע מוצפן (ciphertext) שהוצפנו באמצעות גרסה ישנה יותר של מפתח הצפנה באמצעות 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
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על 'מחיקה'. למעלה. הפעולה הזו תתזמן את הפרויקט למחיקה.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.