הגדרת הצפנת הודעות בשירות מנוהל ל-Apache Kafka

בדף הזה מוסבר איך להגדיר מפתחות הצפנה בניהול הלקוח (CMEK) עבור אשכול של שירות מנוהל של Google Cloud ל-Apache Kafka.

סקירה כללית של הצפנת הודעות

כברירת מחדל, בשירות המנוהל ל-Apache Kafka מתבצעת הצפנה של הודעות במצב מנוחה באמצעות Google-owned and Google-managed encryption keys. לא נדרשת הגדרה נוספת.

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

מפתח CMEK שמשויך לאשכול של שירות מנוהל ל-Apache Kafka הוא מפתח להצפנת מפתחות הצפנה (KEK). מפתח ה-KEK משמש להצפנה של מפתח להצפנת נתונים (DEK). לאחר מכן נעשה שימוש ב-DEK כדי לקרוא ולכתוב נתונים במנוחה בדיסקים קשיחים שמצורפים לברוקרים, ונתונים באחסון מדורג ב-Cloud Storage.

מכיוון שהמשאבים של השירות המנוהל ל-Apache Kafka הם אזוריים, מומלץ ליצור מפתחות CMEK באותו אזור שבו נמצא אשכול Kafka.

תפקידים והרשאות נדרשים

לחשבון השירות של שירות Kafka המנוהל צריכה להיות הרשאה להצפנה ולפענוח של נתונים באמצעות CMEK.

נותנים לחשבון השירות את התפקיד 'הצפנה/פענוח של מפתח קריפטוגרפי ב-Cloud KMS' (roles/cloudkms.cryptoKeyEncrypterDecrypter) במפתח Cloud KMS:

gcloud kms keys add-iam-policy-binding KEY \
  --keyring=KEY_RING \
  --location=LOCATION \
  --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
  --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

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

  • KEY: שם המפתח.

  • KEY_RING: השם של אוסף המפתחות שבו נמצא המפתח.

  • LOCATION: המיקום ב-Cloud KMS של אוסף המפתחות.

  • PROJECT_NUMBER: מספר הפרויקט של PROJECT_NUMBERהפרויקט שמכיל את אשכול השירות המנוהל ל-Apache Kafka.Google Cloud

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

ביצוע רוטציה למפתחות

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

בדיסקים שמצורפים למתווכים, ה-KEK החדש ייכנס לתוקף רק אחרי שמפעילים מחדש את המתווך. אפשר לאלץ הפעלה מחדש מתגלגלת של ברוקרים על ידי עדכון הגדרת הקיבולת של אשכול. לדוגמה, אפשר לשנות את כמות ה-RAM של האשכול.

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

יומני ביקורת

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

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

השבתה והפעלה מחדש של CMEK

יש שתי דרכים להשבית את CMEK. בוחרים אחת מהשיטות הבאות:

  • משביתים את מפתח Cloud KMS ששייכתם לאשכול. הגישה הזו משפיעה על כל המשאבים ב-Cloud שמשויכים למפתח הזה.

  • מבטלים את התפקיד CryptoKey Encrypter/Decrypter של סוכן השירות של שירות מנוהל ל-Apache Kafka ‏(service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com) באמצעות ניהול זהויות והרשאות גישה (IAM). הגישה הזו משפיעה על כל האשכולות של שירות מנוהל ל-Apache Kafka בפרויקט ועל ההודעות שמוצפנות באמצעות CMEK.

אף אחת מהפעולות האלה לא גורמת לביטול מיידי של הגישה, אבל השינויים ב-IAM מופצים בדרך כלל מהר יותר.

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

כאשר שירות מנוהל ל-Apache Kafka לא יכול לגשת למפתח Cloud KMS, פרסום ההודעות והמסירה שלהן נכשלים עם שגיאות. כדי לחדש את ההצגה והפרסום, צריך לשחזר את הגישה למפתח Cloud KMS.

אחרי שמפתח Cloud KMS נגיש לשירות המנוהל ל-Apache Kafka, אפשר לפרסם תוך 12 שעות, ומסירת ההודעות מתחדשת תוך שעתיים.

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

מגבלות

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

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

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

  • אם מסירים את הגישה למפתח מסוים מסוכן השירות של שירות מנוהל ל-Apache Kafka, ההתנהגות דומה למה שקורה אם משביתים גם את הגרסה הראשית של המפתח וגם את הגרסאות הלא ראשיות שלו.

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

  • אי אפשר לבקש הצפנה מחדש של הנתונים שמאוחסנים במנוחה. מפתח ה-CMEK משמש כמפתח להצפנת מפתחות הצפנה (KEK), אבל הצפנה מחדש מחייבת שינוי במפתחות להצפנת נתונים.

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

Apache Kafka®‎ הוא סימן מסחרי רשום של The Apache Software Foundation או של השותפים העצמאיים שלה בארצות הברית או במדינות אחרות.