הפעלת הצפנה של אינטראקציה ב-Cassandra

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

הפעלת הצפנה פנימית של Cassandra

כדי להפעיל הצפנה פנימית של Cassandra, צריך לבצע את התהליך הבא בכל הצמתים אשכול. עליך להפיץ אישורים ציבוריים של כל צומת לכל הצמתים. לאחר מכן כל צומת יכיל אישורים node0.cer, node1.cer וכו' ב-Truststore שלו. בכל צומת בלבד מכילים מפתח פרטי משלו ב- מאגר מפתחות. לדוגמה, node0 מכיל רק node0.pem מאגר מפתחות. יש להפעיל את ההצפנה בכל צומת, בנפרד.

כדי להפעיל הצפנה פנימית של Cassandra:

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

    השלבים הבאים מניחים שיצרת את keystore.node0 ו-truststore.node0, וכן את הסיסמאות של מאגר המפתחות ושל מאגר האישורים, כפי שמוסבר בנספח. לפני שממשיכים, צריך ליצור את ה-Keystore ואת ה-Truststore בתור שלבים ראשוניים בכל צומת לגבי השלבים הבאים.

  2. צריך להוסיף את המאפיינים הבאים אל /opt/apigee/customer/application/cassandra.properties חדש. אם הקובץ לא קיים, יוצרים אותו.
    conf_cassandra_internode_encryption=all
    conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_keystore_password=keypass
    conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_truststore_password=trustpass
    # Optionally set the following to enable 2-way TLS or mutual TLS
    # conf_cassandra_require_client_auth=true
  3. צריך לוודא שהקובץ cassandra.properties נמצא בבעלות של משתמש ה-apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

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

  1. הפסקת השירות של Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. מפעילים מחדש את שירות Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. כדי לבדוק אם שירות ההצפנה ב-TLS הופעל, עליכם לבדוק ביומני המערכת את ההודעה הבאה:
    Starting Encrypted Messaging Service on TLS port

ביצוע רוטציית אישורים

כדי לבצע רוטציית אישורים, יש לבצע את השלבים הבאים:

  1. מוסיפים את האישור לכל זוג מפתחות ייחודי שנוצר (מידע נוסף זמין בנספח) בקרבת קסנדרה קיימת ה-Truststore של הצומת, כך שגם האישורים הישנים וגם האישורים החדשים יהיו באותו מקום אמון:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    כאשר NEW_ALIAS הוא מחרוזת ייחודית לזיהוי הרשומה, CERT הוא שם האישור קובץ להוספה, ו-EXISTING_TRUSTSTORE הוא השם של ה-Truststore הקיים בצומת Cassandra.

  2. להשתמש בכלי להעתקה, כמו scp, כדי להפיץ את ה-Truststore לכל הצמתים של Cassandra באשכול החלפת מאגר האמון הקיים בשימוש בכל צומת.
  3. מבצעים הפעלה מחדש מתגלגלת של האשכול כדי לטעון את ה-Truststore החדש וליצור אמון מפתחות חדשים, לפני שהם קיימים:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. בכל צומת של Cassandra באשכול, מעדכנים את המאפיינים שמוצגים למטה למאגר המפתחות החדש בערכים שבקובץ cassandra.properties:
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. מפעילים מחדש את שירות Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. אחרי שנוצרה תקשורת בין כל הצמתים, ממשיכים לשלב הבא צומת של קסנדרה. הערה: אם התקשורת מצליחה, ממשיכים לצומת הבא רק נוצרה בין כל הצמתים.

נספח

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

פרמטר תיאור
node0 כל מחרוזת ייחודית שמשמשת לזיהוי הצומת.
keystore.node0 שם של מאגר מפתחות. הפקודות מתבססות על ההנחה שהקובץ הזה נמצא בספרייה הנוכחית.
keypass כרטיס המפתחות צריך להיות זהה למאגר המפתחות ולמפתח.
dname מזהה את כתובת ה-IP של node0 בתור 10.128.0.39.
-validity הערך שמוגדר בדגל הזה הופך את זוג המפתחות שנוצר לתקף ל-10 שנים.
  1. עוברים לספרייה הבאה:
    cd /opt/apigee/data/apigee-cassandra
  2. מריצים את הפקודה הבאה כדי ליצור קובץ בשם keystore.node0 בספרייה הנוכחית:
    keytool -genkey -keyalg RSA -alias node0 -validity 3650 \
    -keystore keystore.node0 -storepass keypass \
    -keypass keypass -dname "CN=10.128.0.39, OU=None, \
    O=None, L=None, C=None"

    חשוב: צריך לוודא שהסיסמה של המפתח זהה לסיסמה של מאגר המפתחות.

  3. מייצאים את האישור לקובץ נפרד:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. מוודאים שהקובץ קריא רק למשתמש ב-apigee ולא אף אחד אחר:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. מייבאים את האישור node0.cer שנוצר ל-Truststore של הצומת:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

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

  6. אפשר להשתמש ב-Opensl כדי ליצור קובץ PEM של האישור ללא מפתחות. הערה: cqlsh לא פועל עם האישור בפורמט שנוצר.
    $ keytool -importkeystore -srckeystore keystore.node0 \
    -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \
    keypass -deststorepass keypass
    $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \
    -passin pass:keypass
    $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
  7. להצפנה מצומת לצומת, מעתיקים את הקובץ node0.cer לכל צומת ומייבאים אותו. ל-Truststore של כל צומת.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. כדי לבדוק אם יש אישורים בקובצי מאגר המפתחות ובקובצי Truststore, משתמשים ב-keytool -list:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0