הגנה על הנתונים באמצעות CMEK (דור ראשון)

אתם יכולים להשתמש ב-Cloud Key Management Service מפתחות הצפנה בניהול הלקוח (CMEK) כדי להגן על פונקציות Cloud Run ועל נתונים באחסון שקשורים אליהן. מפתחות כאלה נוצרים ומנוהלים באמצעות Cloud KMS, ומאוחסנים כמפתחות תוכנה באשכול HSM או באופן חיצוני.

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

הסוגים הבאים של נתונים מפונקציות Cloud Run מוצפנים כשמשתמשים ב-CMEK:

  • קוד המקור של הפונקציה שהועלה לפריסה ונשמר על ידי Google ב-Cloud Storage, ומשמש בתהליך build.
  • התוצאות של תהליך ה-build של הפונקציה, כולל:
    • קובץ האימג' של הקונטיינר שנוצר מקוד המקור של הפונקציה.
    • כל מופע של הפונקציה שנפרסה.
  • נתונים במנוחה בערוצי העברה של אירועים פנימיים.

תהליך build של הפונקציה עצמו מוגן באמצעות מפתח זמני שנוצר באופן ייחודי לכל build. מידע נוסף זמין במאמר בנושא תאימות ל-CMEK ב-Cloud Build. בנוסף, חשוב לשים לב לנקודות הבאות:

  • מטא-נתונים של קבצים, כמו נתיבים במערכת הקבצים או חותמות זמן של שינויים, לא מוצפנים.

  • אם משביתים מפתח, אי אפשר לפרוס את קובץ אימג' של קונטיינר ואי אפשר להפעיל מופעים חדשים.

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

הגדרת CMEK לפונקציות Cloud Run כוללת את הפעולות הבאות:

  • נותנים לחשבונות השירות הנדרשים גישה למפתח:

    • לכל הפונקציות, צריך לתת לחשבונות השירות של פונקציות Cloud Run,‏ Artifact Registry ו-Cloud Storage גישה למפתח.
  • יצירת מאגר Artifact Registry שמוגן באמצעות CMEK לאחסון תמונות של פונקציות.

  • הפעלת CMEK בפונקציה.

  • אופציונלי: מפעילים מדיניות ארגון של CMEK כדי לוודא שכל הפונקציות החדשות תואמות ל-CMEK.

השלבים האלה מפורטים בהמשך.

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

  1. יוצרים מפתח באזור יחיד כדי להצפין את הפונקציות. במאמר יצירת מפתחות הצפנה סימטריים מוסבר איך ליצור מפתח.

  2. יוצרים מאגר Artifact Registry עם CMEK מופעל. צריך להשתמש באותו מפתח למאגר Artifact Registry כמו כשמפעילים CMEK לפונקציה.

הענקת גישה למפתח לחשבונות שירות

לכל הפונקציות, צריך להעניק לחשבונות השירות הבאים גישה למפתח:

  • סוכן שירות של פונקציות Cloud Run‏ (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • סוכן שירות של Artifact Registry ‏ (service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • סוכן שירות של Cloud Storage‏ (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

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

המסוף

  1. נכנסים לדף Cloud Key Management Service במסוף Google Cloud :
    כניסה לדף Cloud KMS

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

  3. לוחצים על שם המפתח כדי לראות את פרטי המפתח.

  4. בכרטיסייה Permissions, לוחצים על Grant access.

  5. בשדה New principals, מזינים את כתובות האימייל של כל שלושת חשבונות השירות שמופיעים למעלה כדי להקצות הרשאות לכל שלושת החשבונות בבת אחת.

  6. בתפריט הנפתח Select a role, בוחרים באפשרות Cloud KMS CryptoKey Encrypter/Decrypter.

  7. לוחצים על Save.

gcloud

לכל חשבון שירות שצוין קודם, מריצים את הפקודה הבאה:

gcloud kms keys add-iam-policy-binding KEY \
--keyring KEY_RING \
--location LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

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

  • KEY: השם של המפתח. לדוגמה, my-key.

  • KEY_RING: השם של אוסף המפתחות. לדוגמה, my-keyring.

  • LOCATION: המיקום של המפתח. לדוגמה, us-central1.

  • SERVICE_AGENT_EMAIL: כתובת האימייל של חשבון השירות.

הפעלת CMEK לפונקציה

אחרי שמגדירים מאגר Artifact Registry עם CMEK מופעל ונותנים לפונקציות Cloud Run גישה למפתח, אפשר להפעיל CMEK לפונקציה.

כדי להפעיל CMEK לפונקציה:

המסוף

  1. נכנסים לדף פונקציות Cloud Run במסוף Google Cloud :
    כניסה לדף פונקציות Cloud Run

  2. לוחצים על השם של הפונקציה שרוצים להפעיל בה CMEK.

  3. לוחצים על Edit.

  4. לוחצים על Runtime, build...‎ כדי להרחיב את אפשרויות ההגדרה המתקדמות.

  5. בוחרים בכרטיסייה מאגר תמונות ואבטחה.

  6. בקטע Encryption, בוחרים באפשרות Customer-managed encryption key (CMEK).

  7. בוחרים את המפתח הרצוי מהתפריט הנפתח.

  8. בקטע Container location (מיקום מאגר התגים), בוחרים באפשרות Customer-managed Artifact Registry (מאגר Artifact בניהול הלקוח).

  9. בתפריט הנפתח Artifact registry, בוחרים במאגר עם הגנה באמצעות CMEK.

  10. לוחצים על הבא.

  11. לוחצים על פריסה.

gcloud

מריצים את הפקודה הבאה.

gcloud functions deploy FUNCTION \
--no-gen2 \
--kms-key=KEY \
--docker-repository=REPOSITORY \
--source=YOUR_SOURCE_LOCATION
FLAGS...

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

  • FUNCTION: השם של הפונקציה שרוצים להפעיל בה את CMEK. לדוגמה, cmek-function.

  • KEY: השם המלא של המפתח, בפורמט הבא: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • REPOSITORY: השם המלא של מאגר Artifact Registry, בפורמט הבא: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

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

  • FLAGS...: דגלים נוספים שאולי נדרשים לפריסת הפונקציה, במיוחד לפריסות של יצירה. פרטים נוספים זמינים במאמר בנושא פריסת פונקציה ב-Cloud Run.

ההצפנה באמצעות מפתח שמוגדר על ידי הלקוח (CMEK) מופעלת עבור הפונקציה.

שימו לב: פונקציות Cloud Run תמיד משתמשות בגרסה הראשית של מפתח להגנה באמצעות CMEK. אי אפשר לציין גרסה מסוימת של מפתח לשימוש כשמפעילים CMEK לפונקציות.

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

בדיקת ההגנה באמצעות CMEK

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

  1. השבתת המפתח שמשמש להגנה על הפונקציה.

  2. ניסיון להציג את קוד המקור שמשויך לפונקציה הזו. הניסיון אמור להיכשל.

  3. מנסים להפעיל את הפונקציה שמוגנת באמצעות CMEK. הניסיון אמור להיכשל.

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

עכשיו אפשר לאשר שהפונקציה מוגנת באמצעות CMEK.

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