Cloud KMS הוא שירות לניהול מפתחות בענן, שמאפשר לנהל מפתחות קריפטוגרפיים לשירותי הענן באותו אופן שבו אתם מנהלים אותם בעצמכם. הוא כולל תמיכה בהצפנה, בפענוח, בחתימה ובאימות באמצעות מגוון סוגים ומקורות של מפתחות, כולל Cloud HSM למפתחות עם גיבוי חומרה.
במדריך הזה תלמדו איך להשתמש בתכונות המתקדמות של ממשקי API לאבטחה ולשמירה בענן, כולל:
- הגדרה של קטגוריה מאובטחת ב-Cloud Storage
- ניהול מפתחות ונתונים מוצפנים באמצעות Cloud KMS
- הצגת יומני הביקורת של Cloud Storage
לוקחים נתונים מקוצרים מ-Enron Corpus, מצפינים אותם וטוענים אותם ל-Cloud Storage.
תלמדו
- איך להצפין נתונים ולנהל מפתחות הצפנה באמצעות שירות ניהול המפתחות (KMS)
תשתמש ב:
- Cloud KMS
- Cloud Storage
- Cloud SDK
הגדרת סביבה בקצב עצמי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID
.
לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
במעבדה זו נעשה שימוש ב-Cloud Shell, סביבה וירטואלית בחינם שפועלת ב-Google Cloud. במסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
יחלפו כמה רגעים בלבד עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמורה להופיע תבנית כזו:
המכונה הווירטואלית הזו נטענת באמצעות כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. אם לא השתמשת בהוראה אחרת, עליך להריץ את כל הפקודות מהמעטפת הזו.
כדי לאחסן נתונים עבור המדריך הזה, יש ליצור קטגוריה ב-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}"
ההפעלה עשויה להימשך עד דקה. הפקודה תדווח על הצלחה בסיום הפעולה.
יצירת טבעת KMS ל-Cloud. ב-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"
יש לפתוח את ממשק האינטרנט למפתחות הצפנה ולהציג את המשאבים החדשים. האפשרות הזאת זמינה בקטע IAM & Admin בתפריט הראשי.
יש לך אפשרות להציג ולנהל את מפתחות המפתחות ומפתחות ההצפנה ב-Cloud Console.
הצפנת התוכן של הודעות האימייל שכבר הורדנו באמצעות 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 משולב עם Google Cloud Identity and Access Management (IAM). תפקידים ב-Cloud KMS IAM מחולקים בעיקר לשתי קטגוריות:
- הרשאה לניהול מפתחות
- הרשאה לשימוש במפתחות
לדוגמה, התפקיד 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
לטבעת המפתחות, שכוללת את כל משאבי הצאצאים של המפתחות הקריפטו. הפקודה השנייה מעניקה 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 Logging 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 Review Logging כדי להציג את כל הפעילות עבור מפתחות וטבעות מפתחות
השלבים הבאים
- שימוש ב-Cloud KMS כדי להצפין עמודה במסד נתונים כמו BigQuery
- הגדרת לוח זמנים אוטומטי לסיבוב במפתחות KMS בענן
למידע נוסף
- מידע נוסף על סיבוב של מפתחות הצפנה
- מידע נוסף על הצפנת מעטפה
- מידע על הצפנה מצד השרת עבור קטגוריות של Cloud Storage
- מפרסמים שאלות ומקבלים תשובות ב-StackStack מתחת לתג google-cloud-kgs
רישיון
היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.