תחילת העבודה עם Cloud KMS

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) ויוצרים פרויקט חדש:

צילום מסך מ-2016-02-10 12:45:26.png

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

למידע נוסף

רישיון

היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.