במאמר הזה מוסבר איך לאחסן מידע אישי רגיש ב סוד של 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.