הגדרת TLS ל-Cassandra

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

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

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

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

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

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

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

  • משתמש DML: משמש את התקשורת של הלקוח לקריאה ולכתיבה של נתונים ב-Cassandra (KMS, ‏ KVM, ‏ Cache ו-Quota).
  • משתמש DDL: משמש את MART לכל משימות הגדרת הנתונים, כמו יצירה, עדכון ומחיקה של מרחב מפתחות.
  • משתמש אדמין: משמש לכל פעילות אדמיניסטרטיבית שמבוצעת באשכול cassandra.
  • משתמש ברירת מחדל של Cassandra: Cassandra יוצרת משתמש ברירת מחדל כשהאימות מופעל ושם המשתמש הוא cassandra

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

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

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "iloveapis123"
     admin: ## the password for the admin user (static username: admin_user)
       password: "iloveapis123"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "iloveapis123"
     dml: ## the password for the DML User (static username: dml_user)
       password: "iloveapis123"

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

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

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

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

יצירת הסוד

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

apiVersion: v1
kind: Secret
metadata:
  name: $SECRET_NAME
  namespace: $APIGEE_NAMESPACE
type: Opaque
data:
  default.password: $PASSWORD   #base64-encoded string
  admin.user: $USERNAME   #base64-encoded string
  admin.password: $PASSWORD   #base64-encoded string
  dml.user: $USERNAME   #base64-encoded string
  dml.password: $PASSWORD   #base64-encoded string
  ddl.user: $USERNAME   #base64-encoded string
  ddl.password: $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 -c cassandra

בדיקת היומנים של 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...