הפעלת הצפנה של מפתח סודי

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

סקירה כללית

בעבר, Apigee Edge for Private Cloud סיפק הצפנה אופציונלית לנתוני מפות של ערכי מפתחות (KVM) ולטוקני גישה של OAuth.

בטבלה הבאה מתוארות אפשרויות ההצפנה של נתונים במנוחה ב-Apigee for Private Cloud:

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

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

  • יוצרים מאגר מפתחות כדי לאחסן מפתח להצפנת מפתחות הצפנה (KEK). ‫Apigee משתמשת במפתח המוצפן הזה כדי להצפין את המפתחות הסודיים שנדרשים להצפנת הנתונים שלכם.
  • עורכים את מאפייני ההגדרות בכל הצמתים של שרת הניהול ומעבד הבקשות.
  • יוצרים אפליקציה למפתחים כדי להפעיל יצירת מפתח.
  • מפעילים מחדש את הצמתים.

הפעולות האלה מוסברות במאמר הזה.

מה שצריך לדעת על תכונת ההצפנה באמצעות מפתחות

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

כברירת מחדל, כל הערכים הקיימים במסד הנתונים יישארו ללא שינוי (בטקסט פשוט) וימשיכו לפעול כמו קודם.

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

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

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

הפעלת הצפנת מפתחות

כדי להצפין את המפתח הסודי של הצרכן, פועלים לפי השלבים הבאים:

דרישות מוקדמות

כדי לבצע את השלבים שמפורטים במסמך הזה, אתם צריכים לעמוד בדרישות הבאות:

  • צריך להתקין את Apigee Edge for Private Cloud בגרסה 4.50.00.10 ואילך, או לשדרג לגרסה הזו.
  • אתם צריכים להיות אדמינים ב-Apigee Edge for Private Cloud.

שלב 1: יוצרים מאגר מפתחות (keystore)

כדי ליצור מאגר מפתחות שיכיל את המפתח להצפנת מפתחות (KEK):

  1. מריצים את הפקודה הבאה כדי ליצור מאגר מפתחות שבו יאוחסן מפתח שישמש להצפנת ה-KEK. מזינים את הפקודה בדיוק כמו שהיא מוצגת. (אפשר לתת למאגר המפתחות כל שם שרוצים):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

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

    הפקודה הזו יוצרת קובץ מאגר מפתחות בשם kekstore.p12 שמכיל מפתח עם הכינוי KEYSTORE_NAME.

  2. (אופציונלי) כדי לוודא שהקובץ נוצר בצורה נכונה, מריצים את הפקודה הבאה: אם הקובץ תקין, הפקודה מחזירה מפתח עם הכינוי KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

שלב 2: מגדירים את שרת הניהול

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

  1. מעתיקים את קובץ מאגר המפתחות שיצרתם בשלב 1 לספרייה בצומת של שרת הניהול, למשל /opt/apigee/customer/application. לדוגמה:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. מוודאים שהמשתמש apigee יכול לקרוא את הקובץ:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. מוסיפים את המאפיינים הבאים ל-/opt/apigee/customer/application/management-server.properties. אם הקובץ לא קיים, יוצרים אותו. אפשר לעיין גם בקובץ עזר של מאפיינים.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    שימו לב: יכול להיות שהערך של KEK_PASSWORD יהיה זהה לערך של KEYSTORE_PASSWORD, בהתאם לכלי שבו השתמשתם כדי ליצור את מאגר המפתחות.

  4. מפעילים מחדש את שרת הניהול באמצעות הפקודות הבאות:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    הפקודה wait_for_ready מחזירה את ההודעה הבאה כששרת הניהול מוכן:

    Checking if management-server is up: management-server is up.
  5. אם שרתי הניהול מותקנים בכמה צמתים, חוזרים על שלבים 1 עד 4 בכל צומת של שרת ניהול.

שלב 3: יוצרים אפליקציית מפתחים

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

  1. יוצרים אפליקציית מפתחים כדי להפעיל את היצירה של מפתח להצפנת מפתחות הצפנה (KEK). במאמר רישום אפליקציה מוסבר איך לעשות זאת.
  2. אם רוצים, מוחקים את אפליקציית המפתחים. אין צורך לשמור אותו אחרי שנוצר מפתח ההצפנה.

שלב 4: הגדרת מעבדי בקשות

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

  1. מעתיקים את קובץ מאגר המפתחות שיצרתם בשלב 1 לספרייה בצומת של מעבד ההודעות, למשל /opt/apigee/customer/application. לדוגמה:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. מוודאים שהמשתמש apigee יכול לקרוא את הקובץ:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. מוסיפים את המאפיינים הבאים ל-/opt/apigee/customer/application/message-processor.properties. אם הקובץ לא קיים, יוצרים אותו. אפשר לעיין גם בקובץ עזר של מאפיינים.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    שימו לב שהערך של KEK_PASSWORD עשוי להיות זהה לערך של KEYSTORE_PASSWORD, בהתאם לכלי שבו השתמשתם כדי ליצור את מאגר המפתחות.

  4. מפעילים מחדש את מעבד הבקשות באמצעות הפקודות הבאות:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    הפקודה wait_for_ready מחזירה את ההודעה הבאה כשמעבד ההודעות מוכן לעבד הודעות:

    Checking if message-processor is up: message-processor is up.
  5. אם יש לכם מעבדי בקשות שמותקנים בכמה צמתים, חזרו על שלבים 1-4 בכל צומת של מעבד בקשות.

סיכום

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

שימוש במשתני סביבה למאפייני הגדרה

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

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

משתני הסביבה המתאימים הם:

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

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

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

הפניה לקובץ מאפיינים

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

נכס ברירת מחדל תיאור
conf_keymanagement_kmscred.encryption.enabled false כדי להפעיל הצפנת מפתחות, צריך להיות true.
conf_keymanagement_kmscred.encryption.allowFallback false כדי לוודא שפרטי הכניסה הקיימים בטקסט פשוט ימשיכו לפעול, צריך להגדיר את allowFallback לערך true.
conf_keymanagement_kmscred.encryption.keystore.path לא רלוונטי מציינים את הנתיב למאגר המפתחות של ה-KEK בצומת של מעבד הבקשות או של שרת הניהול. ראו שלב 2: הגדרת שרת הניהול ושלב 3: הגדרת מעבדי ההודעות.
conf_keymanagement_kmscred.encryption.kek.alias לא רלוונטי כינוי שלפיו ה-KEK מאוחסן במאגר המפתחות.
conf_keymanagement_kmscred.encryption.keystore.pass לא רלוונטי אופציונלי אם משתמשים במשתני סביבה כדי להגדיר את המאפיינים האלה. מידע נוסף זמין במאמר שימוש במשתני סביבה למאפייני הגדרה.
conf_keymanagement_kmscred.encryption.kek.pass לא רלוונטי אופציונלי אם משתמשים במשתני סביבה כדי להגדיר את המאפיינים האלה. מידע נוסף זמין במאמר שימוש במשתני סביבה למאפייני הגדרה.