Cloud KMS הוא שירות לניהול מפתחות שמתארח בענן ומאפשר לכם לנהל מפתחות קריפטוגרפיים לשירותי הענן שלכם באותו אופן שבו אתם מנהלים אותם בשרתים מקומיים. הוא כולל תמיכה בהצפנה, בפענוח, בחתימה ובאימות באמצעות מגוון סוגים ומקורות של מפתחות, כולל Cloud HSM למפתחות שמגובים בחומרה.
במדריך הזה תלמדו איך להשתמש בתכונות המתקדמות של ממשקי ה-API של Cloud Security and Privacy, כולל:
- הגדרה של קטגוריה מאובטחת ב-Cloud Storage
- ניהול מפתחות ונתונים מוצפנים באמצעות Cloud KMS
- צפייה ביומני ביקורת של Cloud Storage
תקבלו נתונים חלקיים מ-Enron Corpus, תצפינו אותם ותטענו אותם ל-Cloud Storage.
מה תלמדו
- איך מצפינים נתונים ומנהלים מפתחות הצפנה באמצעות Key Management Service (KMS)
תשתמשו ב
- Cloud KMS
- Cloud Storage
- Cloud SDK
הגדרת סביבה בקצב אישי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), אתם צריכים ליצור חשבון. נכנסים ל-Google Cloud Platform Console (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שמופיע למעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה, נתייחס אליו כאל PROJECT_ID
.
בשלב הבא, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגיל הזה לא אמורה להיות גבוהה, אבל היא יכולה להיות גבוהה יותר אם תחליטו להשתמש ביותר משאבים או אם תשאירו אותם פועלים (ראו את הקטע 'ניקוי' בסוף המסמך הזה).
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
ב-codelab הזה תשתמשו ב-Cloud Shell, סביבה וירטואלית חינמית שפועלת ב-Google Cloud. ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אלא אם צוין אחרת, מריצים את כל הפקודות מ-Shell הזה.
כדי לאחסן נתונים לצורך המדריך הזה, יוצרים קטגוריה של Cloud Storage. שמות הקטגוריות ב-Cloud Storage חייבים להיות ייחודיים באופן גלובלי, לכן צריך להוסיף את מזהה הפרויקט לפני שם הקטגוריה:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
לאחר מכן יוצרים את הקטגוריה:
$ gsutil mb gs://${BUCKET_NAME}
Enron Corpus הוא מסד נתונים גדול של יותר מ-600,000 אימיילים שנוצרו על ידי 158 עובדים של Enron Corporation. הנתונים האלה הועתקו לקטגוריה ב-Cloud Storage בשם gs://enron_emails/
.
מורידים אחד מקובצי האימייל באופן מקומי:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
בודקים את הקובץ שהורד כדי לוודא שהוא באמת הודעת אימייל:
$ tail 1.
האימייל יכלול הודעה כמו:
Attached is the Delta position for 1/18... # ...
בנוסף לאימיילים, המאגר מכיל גם תמונות. במדריך הזה נעשה שימוש גם באימיילים בטקסט פשוט וגם בתמונות.
כדי להשתמש ב-Cloud KMS, צריך קודם להפעיל את השירות בפרויקט. צריך לעשות את זה רק פעם אחת לכל פרויקט. כדי להפעיל את שירות Cloud KMS, מריצים את הפקודה הבאה:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
יכולה לעבור עד דקה לפני שהתכונה תופעל. הפקודה תדווח על הצלחה כשהיא תסתיים.
יוצרים אוסף מפתחות של Cloud KMS. ב-Cloud KMS, אוסף מפתחות הוא אוסף לוגי של מפתחות קריפטוגרפיים. אוסף המפתחות מכיל מטא-נתונים על המפתחות, כמו המיקום שלהם. יוצרים אוסף מפתחות בשם my-keyring
באזור global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
עכשיו יוצרים מפתח הצפנה בשם enron-emails
עם המטרה encryption
בתוך אוסף המפתחות שיצרתם.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
פותחים את ממשק האינטרנט של Cryptographic Keys וצופים במשאבים החדשים שנוצרו. האפשרות הזו זמינה בתפריט הראשי בקטע IAM ואדמין.
אפשר לראות ולנהל את מחזיקי המפתחות ואת מפתחות ההצפנה במסוף Cloud.
הצפנה של תוכן האימייל שהורד קודם באמצעות Cloud KMS. במדריך הזה נעשה שימוש בכלי gcloud
של שורת הפקודה, אבל אפשר גם להצפין נתונים באמצעות Cloud KMS API.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
ייווצר קובץ חדש בדיסק 1.enc
, שמכיל את התוכן של הקובץ המוצפן. אחרי שהנתונים מוצפנים באמצעות Cloud KMS, מעלים את הקובץ המוצפן לקטגוריה ב-Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS משולב עם ניהול זהויות והרשאות גישה (IAM) ב-Google Cloud. תפקידי IAM ב-Cloud KMS מחולקים בעיקר לשתי קטגוריות:
- הרשאה לניהול מפתחות
- הרשאה להשתמש במפתחות
לדוגמה, התפקיד roles/cloudkms.admin
מאפשר לבעל התפקיד ליצור אוספי מפתחות, מפתחות הצפנה, להגדיר מדיניות IAM ולבצע פעולות שקשורות לניהול. roles/cloudkms.cryptoKeyEncrypterDecrypter
מעניק לבעל ההרשאה את האפשרות להצפין ולפענח נתונים, אבל הוא לא כולל הרשאות ניהול.
תפקידי IAM עוברים בירושה ממשאב ההורה שלהם. אם למישהו יש את התפקיד roles/cloudkms.admin
בפרויקט ב-Google Cloud, הוא אדמין של כל המפתחות בפרויקט הזה. אם יש להם roles/cloudkms.admin
באוסף מפתחות, הם אדמינים של כל המפתחות באוסף המפתחות הזה. אם יש להם roles/cloudkms.admin
במפתח הצפנה יחיד, הם אדמינים רק של המפתח הזה.
לצורך התרגיל הזה, צריך להשתמש בזהות שלכם:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
מקצים לישות את היכולת לנהל משאבי Cloud KMS באוסף המפתחות שנוצר למעלה באמצעות כלי שורת הפקודה gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
התפקיד roles/cloudkms.admin
לא כולל הרשאה להשתמש במפתחות, אלא רק לנהל אותם. כדי להעניק לישות שלכם את היכולת להצפין ולפענח נתונים באמצעות enron-emails
מפתח ההצפנה:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
שימו לב שהפקודה הראשונה מעניקה את התפקיד roles/cloudkms.admin
ב-Key Ring, שיכלול את כל משאבי המפתח הקריפטוגרפי הצאצאים. הפקודה השנייה מעניקה את התפקיד roles/cloudkms.cryptoKeyEncrypterDecrypter
, אבל רק במפתח ההצפנה enron-emails
.
אפשר גם להציג ולהקצות תפקידים בממשק המשתמש של Cloud KMS ב-Cloud Console.
בנוסף להצפנה של קובץ בודד, אפשר גם להצפין אוסף של קבצים באמצעות סקריפטים מסוימים. בדוגמה הזו, כל האימיילים של allen-p מועברים בסטרימינג, מוצפנים ומועלים לקטגוריה של Cloud Storage:
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
הסקריפט הזה מבצע איטרציה על כל הקבצים בספרייה שצוינה בקטגוריה לדוגמה של Cloud Storage, מצפין אותם באמצעות Cloud KMS ומעלה אותם ל-Google Cloud Storage.
אחרי שהסקריפט יסיים לפעול, תוכלו לראות את הקבצים המוצפנים בממשק המשתמש של Cloud Storage. אתם אמורים לראות משהו כזה:
ב-Cloud Audit Logging יש שני סוגים של יומנים – יומני פעילות אדמין ויומני גישה לנתונים – שנוצרים על ידי שירותי Google Cloud כדי לעזור לכם לענות על השאלה 'מי עשה מה, איפה ומתי?' בפרויקטים שלכם ב-Google Cloud Platform.
כדי לראות את הפעילות של משאב כלשהו ב-KMS, לוחצים על מחזיק המפתחות ובוחרים באפשרות הצגת הפעילות. פעולה זו תעביר אתכם לממשק המשתמש של Cloud Activity, שבו אמורים להופיע יצירת KeyRing וכל השינויים שבוצעו בו.
הצפנתם נתונים באמצעות Cloud KMS ואחסנתם נתונים מוצפנים ב-Cloud Storage.
ניקוי
שחרור המשאבים שנוצרו במהלך המדריך הזה. מוחקים את הקטגוריה של Cloud Storage שיצרתם קודם:
$ gsutil rm -r gs://${BUCKET_NAME}
אי אפשר למחוק משאבי Cloud KMS. עם זאת, אפשר להשמיד את חומר המפתח כך שלא תהיה יותר אפשרות להשתמש בו:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
מה נכלל
- שימוש ב-Cloud IAM לניהול הרשאות ב-Cloud KMS
- שימוש ב-Cloud KMS להצפנת נתונים
- שימוש ב-Cloud Storage לאחסון נתונים מוצפנים
- שימוש ב-Cloud Audit Logging כדי לראות את כל הפעילות שקשורה למפתחות ולמחזיקי מפתחות
השלבים הבאים
- שימוש ב-Cloud KMS להצפנת עמודה במסד נתונים כמו BigQuery
- הגדרת לוח זמנים לרוטציה אוטומטית של מפתחות Cloud KMS
מידע נוסף
- מידע נוסף על החלפת מפתחות הצפנה
- מידע נוסף על הצפנת מעטפה
- מידע על הצפנה בצד השרת לקטגוריות של Cloud Storage
- פרסום שאלות ומציאת תשובות ב-Stack Overflow באמצעות התג google-cloud-kms
רישיון
העבודה הזו בשימוש במסגרת רישיון Creative Commons כללי מגרסה 2.0 המותנה בייחוס.