במאמר הזה מוסבר איך לאחסן מידע אישי רגיש ב סוד של 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 לאחסון נתונים רגישים באשכול.
- יוצרים את הקובץ או הקבצים שרוצים לאחסן בסוד של Kubernetes. הקבצים צריכים להיות באחד מהפורמטים הנתמכים עם סיומות הקבצים שמפורטות במאמר אילו סוגי נתונים אפשר לאחסן בסוד של Kubernetes.
- מריצים את הפקודה
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
אחרי שיוצרים את השינוי, יכולות לחלוף עד 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.