הגדרת TLS ל-Cassandra

במאמר הזה מוסבר איך להגדיר אימות לתקשורת בין צמתים של Cassandra ובין לקוחות לצמתים של Cassandra.

איך מגדירים TLS ל-Cassandra במישור זמן הריצה

‫Cassandra מספקת תקשורת מאובטחת בין מכונת לקוח לבין אשכול מסדי נתונים, ובין צמתים באשכול. הפעלת ההצפנה מבטיחה שהנתונים בזמן ההעברה לא ייפגעו ויועברו בצורה מאובטחת. ב-Apigee hybrid, ‏ TLS מופעל כברירת מחדל לכל תקשורת בין צמתי Cassandra ובין לקוחות לצמתי Cassandra.

אפשר להגדיר את האימות באמצעות שילובים של שם משתמש וסיסמה, או להוסיף אותם ל-Kubernetes Secret, כמו שמוסבר בנושא הזה.

מידע על אימות משתמשים ב-Cassandra

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

המשתמשים האלה, כולל משתמש ברירת מחדל, מתוארים בהמשך:

  1. משתמש DML: משמש את תקשורת הלקוח לקריאה ולכתיבה של נתונים ב-Cassandra (KMS, ‏ KVM, ‏ Cache ו-Quota).
  2. משתמש DDL: משמש את MART לכל משימות הגדרת הנתונים, כמו יצירה, עדכון ומחיקה של מרחב מפתחות.
  3. משתמש אדמין: משמש לכל פעילות אדמיניסטרטיבית שמבוצעת באשכול cassandra.
  4. משתמש ברירת מחדל של Cassandra: Cassandra יוצרת משתמש ברירת מחדל כשהאימות מופעל ושם המשתמש הוא cassandra
  5. משתמש JMX: משמש לאימות ולתקשורת עם ממשק Cassandra JMX.
  6. משתמש Jolokia: משמש לאימות ולתקשורת עם Cassandra JMX API.

מידע על משתמש Cassandra שמוגדר כברירת מחדל

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

הג'וב apigee-cassandra-user-setup של Apigee hybrid משתמש במשתמש ברירת המחדל cassandra כדי ליצור תפקידים חדשים ולעדכן את הסיסמה שמשויכת למשתמש ברירת המחדל הזה. ההרצה של משימת apigee-cassandra-user-setup מתרחשת במהלך ההתקנה הראשונית של מופע Apigee Hybrid, במהלך שדרוגים של מופעים עוקבים ובמהלך הקצאת משאבים של מופע חדש כחלק מהרחבת האזור.

כשמריצים את משימת Apigee hybrid apigee-cassandra-user-setup, המשימה צריכה להיות מסוגלת לעדכן ולשנות הגדרות ברמת מסד הנתונים, כחלק מהתקנה חדשה או משדרוג. משתמש ברירת המחדל cassandra הוא המשתמש היחיד שמובטח שיהיה נוכח כשעבודת apigee-cassandra-user-setup מגדירה את תרמילי Cassandra החדשים. ללא משתמש מוכר עם גישת סופר-משתמש, השדרוגים של Apigee hybrid והרחבות האזור לא יפעלו בצורה תקינה.

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

שינוי סיסמאות ברירת המחדל בקובץ ההחלפות

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

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "NEW_PASSWORD"
     admin: ## the password for the admin user (static username: admin_user)
       password: "NEW_PASSWORD"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "NEW_PASSWORD"
     dml: ## the password for the DML User (static username: dml_user)
       password: "NEW_PASSWORD"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "NEW_PASSWORD" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "NEW_PASSWORD" ## the password for jolokia user

שימו לב לנקודות הבאות:

  • אין תמיכה ברוטציה של רשות אישורים (CA).
  • אין תמיכה באישור שרת שנוצר באמצעות ביטוי גישה.

הגדרת שמות משתמש וסיסמאות ב-Kubernetes Secret

בקטע הזה מוסבר איך להגדיר את Cassandra כך שישתמש ב-Kubernetes Secrets לאימות.

יצירת הסוד

משתמשים בתבנית הבאה כדי להגדיר את הסוד של Kubernetes. שומרים את התבנית בקובץ YAML ועורכים את מאפייני החובה, למשל my-secret.yaml. הערה: אם משתמשים באפשרות הזו, צריך לספק את שמות המשתמשים עם כל סיסמה.

apiVersion: v1
kind: Secret
metadata:
  name: SECRET_NAME
  namespace: APIGEE_NAMESPACE
type: Opaque
data:
  default.password: DEFAULT_PASSWORD   #base64-encoded string
  admin.user: ADMIN_USERNAME   #base64-encoded string
  admin.password: ADMIN_PASSWORD   #base64-encoded string
  dml.user: DML_USERNAME   #base64-encoded string
  dml.password: DML_PASSWORD   #base64-encoded string
  ddl.user: DDL_USERNAME   #base64-encoded string
  ddl.password: DDL_PASSWORD   #base64-encoded string
  jmx.user: JMX_USERNAME   #base64-encoded string
  jmx.password: JMX_PASSWORD   #base64-encoded string
  jolokia.user: JOLOKIA_USERNAME   #base64-encoded string
  jolokia.password: JOLOKIA_PASSWORD   #base64-encoded string
  

כאשר SECRET_NAME הוא השם שבחרתם לסוד, APIGEE_NAMESPACE הוא מרחב השמות שבו פודים של Apigee נפרסים (ברירת המחדל היא apigee), וכל _USERNAME ו-_PASSWORD הם שמות המשתמש והסיסמאות של כל משתמש. חשוב לשים לב ששם המשתמש והסיסמה חייבים להיות בקידוד Base64.

מחילים את הסוד על האשכול. לדוגמה:

kubectl apply -f SECRET_FILE

מוסיפים את הסוד לקובץ השינויים:

cassandra:
  auth:
    secret: SECRET_NAME

מחילים את ההחלפה המעודכנת של Cassandra על האשכול:

$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --datastore

בדיקת היומנים של Cassandra

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

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...