אחסון נתונים בסוד של Kubernetes

במאמר הזה מוסבר איך לאחסן מידע אישי רגיש ב סוד של Kubernetes ולאחזר את הנתונים ממשתני זרימה בזרימת proxy ל-API.

מבוא

יש מקרים שבהם רוצים לאחסן נתונים כדי לאחזר אותם בזמן הריצה – נתונים שלא פג תוקפם ושלא צריך להגדיר אותם בתוך הקוד של ה-proxy ל-API. אחת האפשרויות היא להשתמש בתכונה מיפוי היברידי של זוגות מפתח/ערך (KVM). אם אתם כבר משתמשים ב-Kubernetes לניהול סודות בכספת מותאמת אישית לנתונים רגישים, כדאי לשקול שימוש בתכונת הסודות של Kubernetes שמתוארת בנושא הזה. בדומה לנתוני KVM, אפשר לגשת לנתוני הסוד של Kubernetes במשתני זרימה של שרת proxy ל-API.

אילו סוגי נתונים אפשר לאחסן בסוד של Kubernetes?

ב-Apigee hybrid, אפשר לאחסן בסוד של Kubernetes רק קבצים מהסוגים הבאים. הם כוללים:

פורמט קובץ סיומות קבצים נתמכות
קובצי מפתח ואישור TLS *.crt, *.key וגם *.pem
קבצים של נכסים *.properties

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

username=admin
password=1f2d1e2e7df

יצירת סוד ב-Kubernetes

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

  1. יוצרים את הקובץ או הקבצים שרוצים לאחסן בסוד של Kubernetes. הקבצים צריכים להיות באחד מהפורמטים הנתמכים עם סיומות הקבצים שמפורטות במאמר אילו סוגי נתונים אפשר לאחסן בסוד של Kubernetes.
  2. מריצים את הפקודה kubectl create secret generic. לדוגמה:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    כאשר:

    • namespace: מרחב השמות של Kubernetes שבו רכיבי זמן הריצה שלכם נפרסים.
    • org: שם הארגון שלכם ב-Apigee.
    • env: השם של סביבה בארגון.
    • filepath: הנתיב לקובץ שרוצים לכלול בסוד. צריך לציין לפחות קובץ אחד שייכלל בסוד.
    • prop-file: השם של קובץ המאפיינים שרוצים לכלול בסוד.
    • key-file: השם של קובץ מפתח TLS שרוצים לכלול בסוד.
    • cert-file: השם של קובץ אישור TLS שרוצים לכלול בסוד.

    אפשר לכלול סוד אחד או יותר. לדוגמה:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
  3. אחרי שיוצרים את השינוי, יכולות לחלוף עד 90 שניות עד שהוא יופיע בכל האשכולות. מעבדי ההודעות מבצעים סקר לשינויים בסודות כל 30 שניות. אם הם מזהים שינוי, המטמון מתעדכן.

אחזור נתונים מסוד

אחרי שיוצרים את הסוד והוא זמין (בדרך כלל כ-90 שניות אחרי היצירה), אפשר לגשת לנתוני הסוד במשתנה של זרימת נתונים בזרימת נתונים של שרת proxy ל-API בארגון או בסביבה שבה הסוד מאוחסן. לדוגמה, נניח שהסוד שלכם מכיל קובץ *.properties בשם credentials.properties עם מפתח API, באופן הבא:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

לאחר מכן אפשר לאחזר את מפתח ה-API ממשתנה של זרימת נתונים באמצעות מדיניות כמו Assign Message. לדוגמה:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

שם המשתנה שאליו יש הפניה ברכיב Ref,‏ private.secret.credential.properties.apikey, מורכב מהחלקים הבאים:

חלק משם המשתנה תיאור
private.secret מרחב השמות הקבוע של המשתנה. כל הסודות של Kubernetes שמאוחסנים באשכול ההיברידי חולקים את מרחב השמות הזה.
credential.properties

השם של קובץ שמאוחסן בסוד של Kubernetes.

apikey השם של מפתח שמאוחסן בקובץ מאפיינים.

בדוגמה הזו, המדיניות Assign Message מאחזרת את הערך apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z ומאחסנת אותו במשתנה של התהליך my-apikey.

עדכון סוד

מכיוון ש-kubectl לא תומך בעדכון סודות של Kubernetes, קודם צריך למחוק את הסוד הקיים וליצור אותו מחדש לפי השלבים במאמר יצירת סוד של Kubernetes.