במאמר הזה מוסבר איך להגדיר אימות לתקשורת בין צמתים של Cassandra ובין לקוחות לצמתים של Cassandra.
איך מגדירים אימות ל-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 - משתמש JMX: משמש לאימות ולתקשורת עם ממשק Cassandra JMX.
- משתמש 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. אפשר לראות את סיסמאות ברירת המחדל בקובץ values.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 על האשכול:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE.yaml
בדיקת היומנים של Cassandra
בודקים את היומנים מיד אחרי הפעלת Cassandra. בלוג שלמטה אפשר לראות שהחיבורים של לקוח Cassandra מוצפנים.
kubectl logs apigee-cassandra-2 -n APIGEE_NAMESPACE -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...