שימוש במפתחות הצפנה בניהול הלקוח

במדריך הזה מוסבר איך להשתמש ב-CMEK ב-Dataform, ואיך להפעיל הצפנת CMEK במאגרי Dataform.

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

אם אתם רוצים לשלוט במפתחות ההצפנה, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) ב-Cloud KMS עם שירותים שמשולבים ב-CMEK, כולל Dataform. שימוש במפתחות Cloud KMS מאפשר לכם לשלוט ברמת ההגנה, במיקום, בלוח הזמנים של הרוטציה, בשימוש ובהרשאות הגישה, ובגבולות הקריפטוגרפיים. שימוש ב-Cloud KMS מאפשר גם לעקוב אחרי השימוש במפתחות, לצפות ביומני ביקורת ולשלוט במחזורי החיים של המפתחות. במקום ש-Google תהיה הבעלים של המפתחות הסימטריים להצפנת מפתחות (KEK) שמגנים על הנתונים שלכם ותנהל אותם, אתם שולטים במפתחות האלה ומנהלים אותם ב-Cloud KMS.

אחרי שמגדירים את המשאבים עם מפתחות CMEK, חוויית הגישה למשאבי Dataform דומה לשימוש בהצפנה שמוגדרת כברירת מחדל ב-Google. מידע נוסף על אפשרויות ההצפנה זמין במאמר מפתחות הצפנה בניהול הלקוח (CMEK).

הצפנת נתונים במאגר באמצעות CMEK

כשמחילים הצפנת CMEK על מאגר Dataform, כל נתוני הלקוחות שמנוהלים על ידי Dataform במאגר הזה מוצפנים במצב מנוחה באמצעות קבוצת מפתחות ההגנה של CMEK שהוגדרה למאגר. הנתונים האלה כוללים:

  • תוכן מאגר Git של מאגר Dataform וסביבות העבודה שלו
  • שאילתות SQL שעברו קומפילציה ושגיאות קומפילציה
  • שאילתות SQL מאוחסנות של פעולות בתהליך עבודה
  • פרטי השגיאה של פעולות בתהליך עבודה שהופעלו

ב-Dataform נעשה שימוש במפתחות הגנה של CMEK בתרחישים הבאים:

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

‫Dataform מנהל את ההצפנה של נתוני לקוחות שמשויכים רק למשאבי Dataform. ‫Dataform לא מנהל את ההצפנה של נתוני לקוחות שנוצרים ב-BigQuery באמצעות הרצה של תהליכי עבודה ב-Dataform. כדי להצפין נתונים שנוצרו ואוחסנו ב-BigQuery, צריך להגדיר CMEK ל-BigQuery.

מפתחות נתמכים

‫Dataform תומך בסוגים הבאים של מפתחות CMEK:

הזמינות של המפתחות משתנה לפי סוג המפתח והאזור. מידע נוסף על הזמינות הגיאוגרפית של מפתחות CMEK מופיע במאמר מיקומים ב-Cloud KMS.

הגבלות

‫Dataform תומך ב-CMEK עם המגבלות הבאות:

  • הגודל המקסימלי של מאגר מוצפן באמצעות CMEK הוא 512MB.
  • הגודל המקסימלי של סביבת עבודה במאגר מוצפן באמצעות CMEK הוא 512MB.
  • אי אפשר להחיל מפתח הגנה של CMEK על מאגר אחרי שהמאגר נוצר. אפשר להחיל הצפנת CMEK רק במהלך יצירת המאגר.
  • אי אפשר להסיר מפתח הגנה מסוג CMEK ממאגר.
  • אי אפשר לשנות את מפתח ההגנה של CMEK למאגר.
  • אם מגדירים מפתח CMEK שמוגדר כברירת מחדל ב-Dataform עבור Google Cloud הפרויקט, כל המאגרים החדשים שנוצרים במיקום Google Cloud הפרויקט חייבים להיות מוצפנים באמצעות CMEK. כשיוצרים מאגר חדש במיקום הפרויקט, אפשר להחיל את מפתח ה-CMEK שמוגדר כברירת מחדל ב-Dataform או מפתח CMEK אחר, אבל אי אפשר להחיל הצפנה במנוחה שמוגדרת כברירת מחדל. Google Cloud
  • אם משנים את הערך של מפתח ברירת המחדל של Dataform CMEK, הערך הקודם חל על מאגרי מידע קיימים, והערך המעודכן חל על מאגרי מידע שנוצרו אחרי השינוי.
  • אפשר להגדיר רק מפתח CMEK אחד כברירת מחדל לכל מיקום של מאגרי פרויקטים ב-Dataform. Google Cloud
  • מדיניות הארגון ל-CMEK לא זמינה.
  • השימוש במפתחות של Cloud HSM ו-Cloud EKM כפוף לזמינות. מידע נוסף על זמינות המפתחות במיקומים שונים מופיע במאמר מיקומים ב-Cloud KMS.

מכסות של Cloud KMS ו-Dataform

אפשר להשתמש במפתחות Cloud HSM ובמפתחות Cloud EKM עם Dataform. כשמשתמשים ב-CMEK ב-Dataform, הפרויקטים יכולים לנצל את מכסות הבקשות הקריפטוגרפיות של Cloud KMS. לדוגמה, מאגרי Dataform שמוצפנים באמצעות CMEK יכולים לנצל את המכסות האלה בכל שינוי בתוכן המאגר. פעולות הצפנה ופענוח באמצעות מפתחות CMEK משפיעות על מכסות Cloud KMS רק אם משתמשים במפתחות חומרה (Cloud HSM) או במפתחות חיצוניים (Cloud EKM). מידע נוסף זמין במאמר בנושא מכסות ב-Cloud KMS.

ניהול מפתחות

משתמשים ב-Cloud KMS לכל פעולות ניהול המפתחות. ‫Dataform לא יכול לזהות שינויים במפתח או לפעול בהתאם להם עד שהם מועברים על ידי Cloud KMS. חלק מהפעולות, כמו השבתה או השמדה של מפתח, יכולות להימשך עד שלוש שעות. השינויים בהרשאות מופצים בדרך כלל הרבה יותר מהר.

אחרי שמאגר המידע נוצר, Dataform קורא ל-Cloud KMS כדי לוודא שהמפתח עדיין תקף במהלך כל פעולה על נתונים מוצפנים במאגר המידע.

אם Dataform מזהה שהמפתח שלכם ב-Cloud KMS הושבת או נמחק, לא תהיה לכם גישה לכל הנתונים שמאוחסנים במאגר התואם.

אם קריאות של Dataform ל-Cloud KMS מזהות שמפתח שהושבת בעבר הופעל מחדש, Dataform משחזר את הגישה באופן אוטומטי.

שימוש במפתחות חיצוניים עם Cloud EKM

במקום להשתמש במפתחות שנמצאים ב-Cloud KMS, אתם יכולים להשתמש במפתחות שנמצאים אצל שותף חיצוני לניהול מפתחות. כדי לעשות את זה, משתמשים ב-Cloud External Key Manager ‏ (Cloud EKM) כדי ליצור ולנהל מפתחות חיצוניים, שהם מצביעים למפתחות שנמצאים מחוץ ל- Google Cloud. מידע נוסף זמין במאמר בנושא Cloud External Key Manager.

אחרי שיוצרים מפתח חיצוני באמצעות Cloud EKM, אפשר להחיל אותו על מאגר חדש של Dataform על ידי הזנת המזהה של המפתח הזה כשיוצרים את המאגר. התהליך הזה זהה לתהליך של החלת מפתח Cloud KMS על מאגר חדש.

שימוש במפתחות CMEK שמוגדרים כברירת מחדל ב-Dataform

כדי להצפין כמה מאגרי Dataform באמצעות אותו מפתח CMEK, אפשר להגדיר מפתח CMEK שיהיה ברירת המחדל של Dataform עבור Google Cloud הפרויקט. צריך לציין את המיקום של הפרויקט בשביל מפתח ה-CMEK של Dataform שמוגדר כברירת מחדל. Google Cloud אפשר להגדיר רק מפתח CMEK אחד כברירת מחדל לכל פרויקט Google Cloud .

אחרי שמגדירים מפתח CMEK כברירת מחדל ב-Dataform, המערכת מחילה את המפתח על כל המאגרים החדשים שנוצרים במיקום הפרויקט ב- Google Cloud . כשיוצרים מאגר, אפשר להשתמש במפתח ברירת המחדל או לבחור מפתח CMEK אחר.

איך המערכת מטפלת במצב של מפתח לא זמין

בתרחישים נדירים, למשל בתקופות שבהן Cloud KMS לא זמין, יכול להיות ש-Dataform לא יוכל לאחזר את הסטטוס של המפתח מ-Cloud KMS.

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

הגישה לנתונים המוצפנים במאגר נשארת חסומה עד ש-Dataform מצליח להתחבר מחדש ל-Cloud KMS, ו-Cloud KMS משיב שהמפתח פעיל.

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

רישום ביומן

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

לפני שמתחילים

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

  • ב Google Cloud פרויקט שבו פועל Cloud KMS:

    1. הפעלת Cloud Key Management Service API.
    2. יוצרים אוסף מפתחות ומפתח כמו שמתואר במאמר בנושא יצירה של אוספי מפתחות ומפתחות. יוצרים את אוסף המפתחות במיקום שתואם למיקום של מאגר Dataform:
      • מאגרי מידע חייבים להשתמש במפתחות אזוריים תואמים. לדוגמה, מאגר באזור asia-northeast3 צריך להיות מוגן באמצעות מפתח ממחזיק מפתחות שנמצא ב-asia-northeast3.
      • אי אפשר להשתמש באזור global עם Dataform.
      מידע נוסף על המיקומים הנתמכים ב-Dataform וב-Cloud KMS מופיע במאמר מיקומים ב-Cloud.

הפעלת CMEK

ל-Dataform תהיה גישה למפתח בשמכם אחרי שתקצו לסוכן השירות שמוגדר כברירת מחדל של Dataform את התפקיד CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) ב-Cloud KMS.

מזהה סוכן השירות שמוגדר כברירת מחדל ב-Dataform הוא בפורמט הבא:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

כדי להעניק את התפקיד CryptoKey Encrypter/Decrypter לסוכן השירות שמוגדר כברירת מחדל של Dataform, פועלים לפי השלבים הבאים:

המסוף

  1. פותחים את הדף Key Management במסוף Google Cloud .

    פתיחה של הדף ניהול מפתחות

  2. לוחצים על השם של אוסף המפתחות שמכיל את המפתח.

  3. לוחצים על תיבת הסימון של מפתח ההצפנה שאליו רוצים להוסיף את התפקיד. נפתחת הכרטיסייה הרשאות.

  4. לוחצים על Add member.

  5. מזינים את כתובת האימייל של סוכן השירות.

    • אם סוכן השירות כבר נמצא ברשימת החברים, יש לו תפקידים קיימים. לוחצים על הרשימה הנפתחת של התפקיד הנוכחי של סוכן השירות.
  6. לוחצים על הרשימה הנפתחת Select a role, לוחצים על Cloud KMS ואז לוחצים על התפקיד Cloud KMS CryptoKey Encrypter/Decrypter.

  7. כדי להקצות את התפקיד לחשבון השירות, לוחצים על Save.

gcloud

אפשר להשתמש ב-Google Cloud CLI כדי להקצות את התפקיד:

gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_AGENT \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY

מחליפים את מה שכתוב בשדות הבאים:

  • KMS_PROJECT_ID: המזהה של הפרויקט שבו פועל Cloud KMS Google Cloud
  • SERVICE_AGENT: כתובת האימייל של סוכן השירות שמוגדר כברירת מחדל ב-Dataform
  • KMS_KEY_LOCATION: שם המיקום של מפתח Cloud KMS
  • KMS_KEY_RING: השם של אוסף המפתחות שלכם ב-Cloud KMS
  • KMS_KEY: שם המפתח של מפתח Cloud KMS

החלה של מדיניות הארגון ל-CMEK

‫Dataform משולב עם שני אילוצים של מדיניות הארגון כדי לוודא שנעשה שימוש ב-CMEK בכל הארגון:

  • התג constraints/gcp.restrictNonCmekServices משמש לדרישה של הגנה באמצעות CMEK.
  • constraints/gcp.restrictCmekCryptoKeyProjects משמש להגבלת המפתחות ב-Cloud KMS שמשמשים להגנה באמצעות CMEK.

השילוב הזה מאפשר לכם לציין את דרישות התאימות להצפנה הבאות למאגרי Dataform בארגון:

שיקולים בהחלת מדיניות הארגון

לפני שמחילים מדיניות ארגונית של CMEK, חשוב להביא בחשבון את הנקודות הבאות.

הכנה לעיכוב בהפצה

אחרי שמגדירים או מעדכנים מדיניות ארגונית, יכולות לחלוף עד 15 דקות עד שהמדיניות החדשה תיכנס לתוקף.

כולל משאבים קיימים

משאבים קיימים לא כפופים למדיניות ארגון שנוצרה לאחרונה. לדוגמה, מדיניות ארגונית לא חלה רטרואקטיבית על מאגרי מידע קיימים. עדיין אפשר לגשת למשאבים האלה בלי מפתח CMEK, ואם רלוונטי, הם עדיין מוצפנים באמצעות מפתחות קיימים.

אימות ההרשאות הנדרשות להגדרת מדיניות הארגון

יכול להיות שיהיה קשה לקבל את ההרשאה להגדיר או לעדכן את מדיניות הארגון לצורך בדיקות. צריך לקבל את התפקיד 'אדמין מדיניות ארגונית', שאפשר לתת רק ברמת הארגון (ולא ברמת הפרויקט או התיקייה).

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

דרישה להשתמש במפתחות CMEK בכל המאגרים החדשים של Dataform

אפשר להשתמש באילוץ constraints/gcp.restrictNonCmekServices כדי לדרוש שימוש במפתחות CMEK להגנה על כל מאגרי Dataform החדשים בארגון.

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

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף מדיניות הארגון.

    מעבר למדיניות הארגון

  2. משתמשים בFilter כדי לחפש את האילוץ הבא:

    constraints/gcp.restrictNonCmekServices
    
  3. בעמודה Name (שם), לוחצים על Restrict which services may create resources without CMEK (הגבלת השירותים שיכולים ליצור משאבים ללא CMEK).

  4. לוחצים על ניהול המדיניות.

  5. בדף עריכת מדיניות, בקטע מקור המדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.

  6. בקטע כללים, לוחצים על הוספת כלל.

  7. ברשימה ערכי מדיניות, בוחרים באפשרות בהתאמה אישית.

  8. ברשימה Policy type (סוג המדיניות), בוחרים באפשרות Deny (דחייה).

  9. בשדה ערכים מותאמים אישית, מזינים את הערכים הבאים:

    is:dataform.googleapis.com
    
  10. לוחצים על סיום ואז על הגדרת מדיניות.

gcloud

  1. יוצרים קובץ זמני /tmp/policy.yaml לאחסון המדיניות:

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:dataform.googleapis.com

    מחליפים את PROJECT_ID במזהה הפרויקט שבו רוצים להחיל את האילוץ הזה.

  2. מריצים את הפקודה org-policies set-policy:

    gcloud org-policies set-policy /tmp/policy.yaml

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

הגבלת מפתחות Cloud KMS לפרויקט Dataform

אתם יכולים להשתמש באילוץ constraints/gcp.restrictCmekCryptoKeyProjects כדי להגביל את מפתחות Cloud KMS שבהם אתם יכולים להשתמש כדי להגן על מאגר בפרויקט Dataform.

לדוגמה, אפשר לציין כלל שדומה לכלל הבא: "For all Dataform repositories in projects/my-company-data-project, Cloud KMS keys used in this project must come from projects/my-company-central-keys OR projects/team-specific-keys."

המסוף

  1. במסוף Google Cloud , נכנסים לדף מדיניות הארגון.

    מעבר למדיניות הארגון

  2. משתמשים בFilter כדי לחפש את האילוץ הבא:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. בעמודה 'שם', לוחצים על הגבלת הפרויקטים שיכולים לספק מפתחות הצפנה של KMS ל-CMEK.

  4. לוחצים על ניהול המדיניות.

  5. בדף עריכת מדיניות, בקטע מקור המדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.

  6. בקטע כללים, לוחצים על הוספת כלל.

  7. ברשימה ערכי מדיניות, בוחרים באפשרות בהתאמה אישית.

  8. ברשימה סוג המדיניות, בוחרים באפשרות הרשאה.

  9. בשדה ערכים מותאמים אישית, מזינים את הערכים הבאים:

    under:projects/KMS_PROJECT_ID
    

    מחליפים את הערך KMS_PROJECT_ID במזהה הפרויקט שבו נמצאים מפתחות Cloud KMS שרוצים להשתמש בהם.

    לדוגמה, under:projects/my-kms-project.

  10. לוחצים על סיום ואז על הגדרת מדיניות.

gcloud

  1. יוצרים קובץ זמני /tmp/policy.yaml לאחסון המדיניות:

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו רוצים להחיל את האילוץ הזה.
    • KMS_PROJECT_ID: המזהה של הפרויקט שבו נמצאים מפתחות Cloud KMS שרוצים להשתמש בהם.
  2. מריצים את הפקודה org-policies set-policy:

    gcloud org-policies set-policy /tmp/policy.yaml

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

הגדרת מפתח CMEK של Dataform כברירת מחדל

הגדרת מפתח CMEK שמשמש כברירת מחדל ל-Dataform Google Cloud בפרויקט מאפשרת להצפין כמה מאגרי מידע באמצעות אותו מפתח CMEK. מידע נוסף מופיע במאמר בנושא שימוש במפתח ברירת מחדל למאגרי Dataform.

כדי להגדיר או לערוך מפתח CMEK שמוגדר כברירת מחדל, קוראים ל-Dataform API בבקשה הבאה:

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

מחליפים את מה שכתוב בשדות הבאים:

  • KMS_KEY_RING: השם של אוסף המפתחות של מפתח Cloud KMS.
  • KMS_KEY: השם של מפתח Cloud KMS.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • PROJECT_LOCATION: שם המיקום של הפרויקט ב- Google Cloud .

הסרת מפתח CMEK שמוגדר כברירת מחדל ב-Dataform

כדי להסיר מפתח CMEK שמוגדר כברירת מחדל בפרויקט Google Cloud , מפעילים את Dataform API בבקשה הבאה:

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • PROJECT_LOCATION: שם המיקום של Google Cloud הפרויקט שבו רוצים לבטל את הגדרת ברירת המחדל של CMEK.

בדיקה אם מוגדר מפתח CMEK של Dataform כברירת מחדל

כדי לבדוק אם מוגדר מפתח CMEK שמוגדר כברירת מחדל ב-Dataform עבור Google Cloud הפרויקט, מפעילים את Dataform API בבקשה הבאה:

curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • PROJECT_LOCATION: שם המיקום של הפרויקט ב- Google Cloud .

החלת CMEK על מאגר

אפשר להחיל הגנה באמצעות CMEK על מאגר Dataform במהלך יצירת המאגר.

כדי להחיל הצפנת CMEK על מאגר Dataform, בוחרים בהצפנה באמצעות מפתח ברירת המחדל של Dataform CMEK או מציינים מפתח ייחודי של Cloud KMS כשיוצרים את המאגר. הוראות מפורטות מופיעות במאמר יצירת מאגר.

אי אפשר לשנות את מנגנון ההצפנה של מאגר Dataform אחרי שיוצרים אותו.

מידע נוסף מופיע במאמר בנושא הגבלות.

המאמרים הבאים