כברירת מחדל, Pub/Sub מצפין את התוכן של הלקוחות במנוחה. Pub/Sub מטפל בהצפנה בשבילכם בלי שתצטרכו לבצע פעולות נוספות. האפשרות הזו נקראת הצפנת ברירת המחדל של Google.
אם רוצים לשלוט במפתחות ההצפנה, אפשר להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) ב-Cloud KMS עם שירותים שמשולבים עם CMEK, כולל Pub/Sub. שימוש במפתחות Cloud KMS מאפשר לכם לשלוט ברמת ההגנה, במיקום, בלוח הזמנים של הרוטציה, בשימוש ובהרשאות הגישה, ובגבולות הקריפטוגרפיים. שימוש ב-Cloud KMS מאפשר גם לצפות ביומני ביקורת ולשלוט במחזורי החיים של המפתחות. במקום ש-Google תהיה הבעלים של המפתחות הסימטריים להצפנת מפתחות (KEK) שמגנים על הנתונים שלכם ותנהל אותם, אתם שולטים במפתחות האלה ומנהלים אותם ב-Cloud KMS.
אחרי שמגדירים את המשאבים עם CMEK, חוויית הגישה למשאבי Pub/Sub דומה לשימוש בהצפנה שמוגדרת כברירת מחדל ב-Google. מידע נוסף על אפשרויות ההצפנה זמין במאמר מפתחות הצפנה בניהול הלקוח (CMEK).
איך CMEK עובד עם Pub/Sub
כשמגדירים את Pub/Sub עם CMEK, השירות מצפין אוטומטית את כל הנתונים באמצעות המפתח שצוין. השימוש ב-Cloud KMS עבור CMEK עשוי לגרור עלויות נוספות בהתאם לדפוסי השימוש.
כל הודעה מוצפנת במצבים ובשכבות הבאים:
-
במצב מנוחה
- שכבת חומרה
- שכבת התשתית
- שכבת האפליקציות
-
בנסיעה
בשכבת האפליקציה, Pub/Sub מצפין כל הודעה נכנסת בנפרד ברגע שהיא מתקבלת. ההטמעה הזו מוסיפה את התכונות הבאות:
- שמירה על הצפנת ההודעות בקישורים פנימיים של מרכזי נתונים
- הגדרה שמאפשרת מפתחות הצפנה בניהול הלקוח (CMEK)
תבנית הצפנת מעטפה
Pub/Sub משתמש בתבנית הצפנת המעטפת עם CMEK. בגישה הזו, ההודעות לא מוצפנות על ידי Cloud KMS. במקום זאת, נעשה שימוש ב-Cloud KMS כדי להצפין מפתחות להצפנת נתונים (DEK) שנוצרו על ידי Pub/Sub לכל נושא. מפתחות ה-DEK האלה נשמרים ב-Pub/Sub רק בפורמט מוצפן או עטוף. לפני שמירת מפתח DEK, השירות שולח אותו ל-Cloud KMS כדי להצפין אותו באמצעות המפתח להצפנת מפתחות הצפנה (KEK) שצוין בנושא. מפתח DEK חדש נוצר לכל נושא בערך כל שש שעות.
לפני ש-Pub/Sub מפרסם הודעות במינוי, הוא מצפין אותן באמצעות מפתח הצפנה הנתונים (DEK) החדש ביותר שנוצר לנושא. שירות Pub/Sub מפענח את ההודעות זמן קצר לפני שהן נמסרות למנויים.
הגדרת CMEK עם Pub/Sub
אפשר להגדיר CMEK באופן ידני או באמצעות Autokey.
לפני שמתחילים
אפשר להגדיר CMEK ל-Pub/Sub באמצעות מסוף Cloud de Confiance או Google Cloud CLI.
צריך להשלים את המשימות הבאות:
מפעילים את Cloud KMS API.
יוצרים אוסף מפתחות ומפתח ב-Cloud KMS. אי אפשר למחוק מפתחות ואוספי מפתחות.
הוראות לביצוע המשימות האלה מופיעות במאמרים יצירת מחזיק מפתחות ויצירת מפתח.
תפקידים והרשאות נדרשים
Pub/Sub משתמש ב Cloud de Confiance סוכן שירות כדי לגשת ל-Cloud KMS. סוכן השירות מתוחזק באופן פנימי על ידי Pub/Sub לכל פרויקט, והוא לא מוצג בדף Service Accounts במסוף Cloud de Confiance כברירת מחדל.
סוכן השירות של Pub/Sub הוא בפורמט service-${PROJECT_NUMBER}@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.
כדי להצפין ולפענח נתונים באמצעות CMEK, צריך להגדיר ב-Pub/Sub הרשאות ספציפיות.
כדי להגדיר את הגישה הנדרשת, צריך לבצע את השלבים הבאים:
נותנים לסוכן השירות של Pub/Sub את התפקיד Cloud KMS Crypto Key Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter).gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterמחליפים את מה שכתוב בשדות הבאים:
CLOUD_KMS_KEY_NAME: השם של מפתח Cloud KMS.
המפתח הוא בפורמט
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.לדוגמה,
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key.PROJECT_NUMBER: מספר הפרויקט של Pub/Sub.
מידע נוסף על הקצאת תפקידים בניהול זהויות והרשאות גישה (IAM) זמין במאמר הקצאת תפקידים למשאב.
הגדרה ידנית של נושא באמצעות CMEK
אפשר להגדיר באופן ידני הצפנה באמצעות מפתח CMEK לנושא באמצעות מסוף Cloud de Confiance או ה-CLI של gcloud.
המסוף
כדי ליצור נושא עם CMEK:
נכנסים לדף Topics של Pub/Sub במסוף Cloud de Confiance .
לוחצים על יצירת נושא.
בשדה Topic ID (מזהה הנושא), מזינים מזהה לנושא.
מידע נוסף על מתן שמות לנושאים זמין בהנחיות למתן שמות.
בקטע הצפנה, לוחצים על מפתח Cloud KMS.
בוחרים את סוג המפתח. אם התפריט הנפתח Select a customer-managed key לא מופיע, צריך לוודא שהפעלתם את Cloud KMS API בפרויקט.
לוחצים על יצירת נושא.
gcloud
כדי ליצור נושא עם CMEK, מריצים את הפקודה gcloud pubsub
topics create:
gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
מחליפים את מה שכתוב בשדות הבאים:
-
TOPIC_ID: המזהה או השם של הנושא.
מידע נוסף על מתן שמות לנושאים זמין במאמר הנחיות למתן שמות לנושאים, למינויים, לסכימות או לתמונות מצב.
-
ENCRYPTION_KEY: המזהה של ה-CMEK שבו רוצים להשתמש בנושא.
הפורמט הוא
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.
עדכון נושא CMEK באופן ידני
אתם יכולים להוסיף, לשנות או להסיר את ה-CMEK שמקושר לנושא Pub/Sub. אפשר להשתמש ב-CLI של gcloud כדי לעדכן את ה-CMEK. עם זאת, השינוי הזה לא חל רטרואקטיבית.
ההודעות שפורסמו בנושא לפני שינוי המפתח נשארות מוצפנות באמצעות המפתח המקורי, בלי קשר לסוג המפתח (CMEK אוGoogle Cloud-powered encryption key). שינוי של CMEK בנושא לא יגרום להצפנה מחדש של הודעות שפורסמו קודם – ההודעות האלה יישארו מוגנות באמצעות המפתח שהן הוצפנו איתו במקור, כך שנתוני ההודעות בנושא עדיין עשויים להיות תלויים במפתח הקודם למשך עד 31 ימים, בהתאם למשך שמירת ההודעות שצוין בנושא או בכל אחד מהמינויים שלו.
ל-Pub/Sub יש מנגנון אחסון במטמון של מפתחות, שפועל למשך כ-30 דקות. יכול להיות שיעבור פרק הזמן הזה עד שמערכת Pub/Sub תזהה מפתח חדש ששונה ידנית בהגדרות הנושא ותתחיל להשתמש בו.
רוטציית מפתחות Cloud KMS ב-Pub/Sub
שינויים בהגדרת המפתח, כמו רוטציית מפתחות ב-Cloud KMS, לא מפעילים ישירות את היצירה של מפתחות להצפנת נתונים ב-Pub/Sub. יכול להיות שיחלפו עד 12 שעות עד שמערכת Pub/Sub תתחיל להשתמש בגרסאות חדשות של מפתחות להצפנת נתוני ההודעות.
בדומה לשינויים בהגדרות ההצפנה שבוצעו באופן ידני ב-Pub/Sub, השינויים האלה לא חלים רטרואקטיבית על הודעות שפורסמו בעבר. הודעות קיימות ימשיכו להיות מוגנות באמצעות גרסאות קודמות של המפתח הקריפטוגרפי. ההודעות האלה נשארות מוגנות באמצעות המפתח ששימש להצפנה שלהן במקור, כך שנתוני ההודעות בנושא מסוים עדיין עשויים להיות תלויים בגרסה הקודמת של המפתח למשך עד 31 ימים, בהתאם למשך שמירת ההודעות שצוין בנושא או בכל אחד מהמינויים שלו.
הגדרת נושא באמצעות Cloud KMS Autokey
מידע נוסף על שימוש ב-Cloud KMS Autokey עם Pub/Sub זמין במאמר Cloud KMS עם Autokey.
יומני ביקורת
Cloud KMS יוצר יומני ביקורת כשמפעילים או משביתים מפתחות, או כשמשתמשים במפתחות ב-Pub/Sub כדי להצפין ולפענח הודעות. המידע הזה שימושי לניפוי באגים בבעיות שקשורות לפרסום או לזמינות של הצגת מודעות.
מפתחות Cloud KMS מצורפים ליומני ביקורת של משאבי נושאים ב-Pub/Sub. ההתראות ב-Pub/Sub לא כוללות מידע אחר שקשור ל-Cloud KMS.
מעקב ופתרון בעיות
בעיות בגישה למפתחות יכולות לגרום להשפעות הבאות:
עיכובים במסירת הודעות
שגיאות בפרסום
אפשר לעקוב אחרי שגיאות בפרסום ובבקשות משיכה באמצעות המדדים הבאים, שמקובצים לפי response_class ו-response_code:
topic/send_request_countsubscription/pull_request_countsubscription/streaming_pull_response_count
ל-StreamingPull response יש שיעור שגיאות של 100%. המשמעות היא שהשידור הסתיים, ולא שהבקשות נכשלות. כדי לעקוב אחרי StreamingPull, מחפשים את FAILED_PRECONDITION
קוד התגובה.
פרסום ומסירת הודעות עלולים להיכשל עם שגיאות FAILED_PRECONDITION בגלל כמה סיבות.
יכול להיות שמפתח Cloud KMS מושבת. פרטים נוספים מופיעים בקטע השבתה והפעלה מחדש של מפתחות בדף הזה.
אם אתם משתמשים במפתחות שמנוהלים חיצונית דרך Cloud EKM, כדאי לעיין בהפניה לשגיאות ב-Cloud EKM.
במינויים לקבלת עדכונים, אין דרך לזהות ישירות בעיות במסירה שקשורות ל-CMEK. במקום זאת:
אפשר לעקוב אחרי הגודל והגיל של ה-backlog של מינוי דחיפה באמצעות
subscription/num_unacked_messages.עוקבים אחרי
subscription/oldest_unacked_message_ageכדי לזהות עליות חריגות.כדי לזהות בעיות, אפשר להשתמש ביומני ביקורת של CMEK ובשגיאות פרסום.
השבתה והפעלה מחדש של מקשים
יש שתי דרכים למנוע מ-Pub/Sub לפענח את נתוני ההודעות:
מומלץ: משביתים את מפתח Cloud KMS ששייכתם לנושא באמצעות Pub/Sub. הגישה הזו משפיעה רק על נושאי Pub/Sub ועל מינויים שמשויכים למפתח הספציפי הזה.
מבטלים את התפקיד Pub/Sub CryptoKey Encrypter/Decrypter בחשבון השירות של Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com) באמצעות IAM. הגישה הזו משפיעה על כל הנושאים ב-Pub/Sub בפרויקט ועל המינויים שמכילים הודעות שמוצפנות באמצעות CMEK.
למרות שאף אחת מהפעולות לא מאשרת ביטול גישה מיידי, שינויים ב-IAM מופצים בדרך כלל מהר יותר. מידע נוסף זמין במאמרים עקביות של משאבי Cloud KMS והפצת שינויי גישה.
אם ל-Pub/Sub אין גישה למפתח Cloud KMS, פרסום הודעות ומסירה שלהן באמצעות StreamingPull או pull נכשלים עם שגיאות FAILED_PRECONDITION. העברת ההודעות לנקודות קצה של הודעות פוש תיפסק. כדי לחדש את הצגת המודעות והפרסום, צריך לשחזר את הגישה למפתח Cloud KMS.
אחרי שמפתח Cloud KMS נגיש ל-Pub/Sub, אפשר לפרסם הודעות תוך 12 שעות, ומסירת ההודעות מתחדשת תוך שעתיים.
למרות שסביר להניח שהפסקות זמניות של פחות מדקה ב-Cloud KMS לא יפריעו באופן משמעותי לפרסום ולמסירה, חוסר זמינות ממושך של Cloud KMS משפיע כמו ביטול מפתח.