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

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

סקירה כללית

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

שלב 1: יצירת מאגר מפתחות

כדי ליצור מאגר מפתחות לאחסון מפתח ההצפנה של מפתחות ההצפנה (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

עבודה עם מאגרי מפתחות של BCFKS במערכות הפעלה שתומכות ב-FIPS

אם אתם משתמשים ב-Edge for Private Cloud במערכת הפעלה שתומכת ב-FIPS, עליכם ליצור מאגר מפתחות מסוג BCFKS. אפשר ליצור מאגר מפתחות כזה במחשב שאינו תואם ל-FIPS, ולאחר מכן להעביר אותו למכונה שתואמת ל-FIPS. כדי ליצור את מאגר המפתחות, משתמשים בפקודה הבאה:

keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass

יכול להיות שתצטרכו לבצע הגדרות נוספות של Java במכונה שבה אתם יוצרים את מאגר המפתחות. יכול להיות שתצטרכו לערוך את קובץ האבטחה של Java במכונה (בדרך כלל נמצא בכתובת ‎ /usr/lib/jvm/jre/lib/security/java.security). בקובץ הזה, מחפשים את המאפיינים הבאים ועורכים אותם:

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

שלב 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 לא רלוונטי אופציונלי אם משתמשים במשתני סביבה כדי להגדיר את המאפיינים האלה. אפשר לעיין גם במאמר שימוש במשתני סביבה למאפייני תצורה.