Table of Contents
הבנת הצורך בניהול חשאי מאובטח ב-Docker
Containers שינו את פריסת היישום על ידי המציעה סביבות קלות משקל, ניידות.עם זאת, שינוי זה הגביר את האתגר של ניהול נתונים רגישים כמו מפתחי API, אישורי מסד נתונים, ו- TLS תעודות קידוד סודות בתמונות Docker, ביצועם כדי לשלוט בגירסת גרסאות, או להעביר אותם כמשתנים סביבתיים פשוטים מציגים סיכונים ביטחוניים משמעותיים.
מה זה HashiCorp Vault?
HashiCorp Vault הוא כלי קוד פתוח שנועד לאחסן בבטחה ולשלוט חזק ב אסימוני גישה, סיסמאות, תעודות, מפתחות הצפנה.זה מציע ממשק מאוחדת לניהול סודות, הצפנה כשירות, גישה מבוססת זהות כוללים:
- (FLT:0) סודיות:FLT:1hil יוצר אישורים קצרים, בהיקף של ביקוש (למשל, משתמש מסד נתונים עם שכירות 24 שעות).
- (ב) לצמצום והתחדשות: 1FLT:1 לכל סוד יש משך שכירות; יישומים חייבים לחדש או לחזור לאוטומטי, להפחית את רדיוס הפיצוץ של פשרה.
- (ב) ,0) ,Revocation: Revocation: Revocation: Revocation: ReveFLT:1; inly invalidate Secrets if a application or User is hit.
- (ב) ,0) ,Audit Logging: FLT:1 רשם את כל בקשות הגישה, מתן שרשרת ברורה של משמורת.
- (ב) ,0) קידוד כשירות: FLT:1 הצפנה והנתונים המפוצצים ללא חשיפת מפתחות ליישומים.
Vault תומך במספר רב של מנועי סודיות (הערך המרכזי, מסדי נתונים, PKI, המעבר וכו ') ו-FLT:2 שיטות אותנטיות של ההרחבה 3 (המכונים, AppRole, Kubernetes, LDAP וכו '), מה שהופך אותו להתאמה כמעט לכל תשתית.
למה להשתמש ב-Vault with Docker?
שילוב Vault עם Docker מכולות מביא מספר יתרונות על שיטות הזריקה החשאיות המסורתיות:
- Runtime Retrieval:FLT:1] סודות מובאים כאשר המכולה מתחילה או על הביקוש, לעולם לא אפוי לתוך התמונה.זה מבטל את הסיכון של סודות הדליפה באמצעות רשם תמונות.
- (FLT:0) ניהול מבוזר: 1FLT:1 אשכול Vault יחיד מנהל סודות עבור כל השירותים המיכלים, צמצום סחף תצורה ופשט את הסיבוב.
- (ב) כל אחד מן המקרים יכול לקבל אישורים ייחודיים, מוגבלים זמן.
- (FLT:0) Audit Trails:FLT:1 כל גישה סודית רשומה, עוזר לעמוד בדרישות תאימות (SOC 2, HIPAA, PCI DSS).
- גישה מבוססת-סולולית: גישה מבוססת-פתוחה: FLT:1, ACLs, ששומרת על כל מיכל, רק רואה את הסודות שהוא צריך (הזכות העליונה).
HashiCorp Vault Architecture for Container Workloads
לפני צלילה לאינטגרציה, זה עוזר להבין את אדריכלות הפריסה של Vault פועל כמו שרת daemon עם FLT:0key-value חנות בחזרה לאחורendFLT:1 (Consul, וכו 'ד, אחסון משולב רפפט, או אחסון מבוסס ענן).זה חושף לקוח אותנטי ולאחזר סודות באמצעות אסימונים, Apple, או שיטות אחסון מבוססות ענן).
עבור סביבות מכולות, Vault הוא לעתים קרובות פרוס באחת משתי דרכים:
- (FLT:0Vault Server ClusterFLT:1) (הפקה): דרישות טיפול דחוסות / בלתי מוגבלות מכמה מכולות. השתמש באחסון משולב של רפס עבור פשטות או קונסול עבור פריסות גדולות יותר.
- (FLT:0)Vault Dev ServerveFLT:1 (פיתוח): מקרה חד-פעמי, מקרה חד-משמעי עם אוטומטי-לא-מזויף אידיאלי עבור בדיקות מקומיות, אך לעולם לא לייצור.
מכיל אינטראקציה עם Vault דרך הרשמי FLT:0Vault CLIFLT:1, HTTP API, או סוכן צד (Vault Agent) המטפל באימות ובסתר באופן אוטומטי.
הצצה ל-Vault with Docker: Core Patterns
ישנם מספר דפוסים מוכחים להזרקת סודות Vault לתוך מיכלי דוקר.הבחירה תלויה בשכבת התזמורת והבשלות התפעולית שלך.
שימוש ב-Vault CLI ב-Tatpoint Scripts
זהו התבנית הפשוטה ביותר.דימוי המכולה כולל את Vault CLI, ותסריט פגז נקודת כניסה אותנטי ל-Vault, מביא סודות, ומזריק אותם לתוך היישום כמו משתנים הסביבה או קבצים.
# Dockerfile
FROM alpine:latest
RUN apk add --no-cache vault ca-certificates
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
# entrypoint.sh
#!/bin/sh
export VAULT_ADDR="http://vault.example.com:8200"
vault login -method=approle role_id="$ROLE_ID" secret_id="$SECRET_ID"
API_KEY=$(vault kv get -field=api_key secret/myapp)
export API_KEY
exec myapp
מיכל מקבל (FLT:2 ו-FLT:3 כמשתנה סביבה (או באמצעות קבצים רכובים) גישה זו דורשת את מיכל גישה לרשת Vault ואת מלוא Vault binary, אשר מגדיל את גודל התמונה.
סוכן Vault Agent Sidecar
(ב) [17] ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
# config.hcl for Vault Agent
vault {
address = "http://vault.example.com:8200"
}
auto_auth {
method "approle" {
mount_path = "auth/approle"
config = {
role_id_file_path = "/tmp/role-id"
secret_id_file_path = "/tmp/secret-id"
}
}
}
template {
source = "/tmp/secrets.ctmpl"
destination = "/etc/secrets/app.env"
}
הסוכן צופה בתבנית לשינויים ומחזיר את הפלט כאשר סודות מתחדשים.זה מהדהד רצף סודי של קוד היישום.
דוקר סוומאר יש מערכת סודית בנוית, אך אחסון סודות ביומני סוומנדר עשויים שלא לענות על צרכי הציות.נהג סודי של צד שלישי יכול לשמש כדי לנתב בקשות חשאיות סוומברות ל-Vault.זה פחות נפוץ אבל שימושי לארגונים שכבר הושקעו בסבור.
4. Kubernetes אינטגרציה עם נהג CSI
עבור משתמשי Kubernetes, ה-FLT:0 ,Vault CSIIRERFLT:1 מאפשר לפודים להניף סודות Vault ככרכים.זה משתמש ב- Container Storage Interface (CSI) כדי להצמיח סודות ללא כל שינויים ביישום.זה משתלב בצורה חלקה עם Kubernetes Secrets Store CSI ותומך בסיבוב אוטומטי.
שיטות אימות עבור Containers
בחירת שיטת אימות נכונה היא קריטית לאפשרויות אבטחה ואוטומציה.
- (ב) [17] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ⁇ :0) ,13 ,UVubernetes AuthFLT:1: כאשר פועל על Kubernetes, Vault יכול לאמת את הפודונים על ידי אימות אסימוני חשבון שירות.
- (ב) [17]0(JWT/OIDCFLT:1 ; מתאים לסביבות ענן-native שבו לכלי יש אסימוני JWT מספק זהות מהימן.
- (FLT:0) TokenFeloLT:1; פשוט ביותר אך בטוח יותר Tokens יכול להיות pre-configured צינורות CI /CD או מוזרק באמצעות תזוזה.
סודות דינמיים: הכוח האמיתי
אחת התכונות החזקות ביותר של Vault עבור עומסי עבודה של Docker היא סודיות:0 דינמית סודות ההרחבה 1 (במקום לאחסן אישורים סטטיים בחנות הערך של Vault, Vault יכול להתחבר למסד נתונים (PostgreSQL, MySQL, MongoDB) וליצור משתמש זמני על המטוס.ההמכול מקבל שימושים העקשומים האלה, וכאשר החכירות החכירות (המות) נמחקות באופן אוטומטי את המשתמש.
# Example: Enable PostgreSQL secrets engine
vault secrets enable database
vault write database/config/my-postgres-database \
plugin_name=postgresql-database-plugin \
allowed_roles="my-role" \
connection_url="postgresql://{{username}}:{{password}}@postgres.example.com:5432/myapp" \
username="vault_admin" \
password="super_secret"
vault write database/roles/my-role \
db_name=my-postgres-database \
creation_statements="CREATE USER \"{{name}}\" WITH PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
לאחר מכן, המכולה מבקשת מטלה: (FLT:8 ).
Best Practices for Docker + Vault
- (ב) לעולם אל תהססו סודות בתמונות.FLT: 1) השתמשו בהזרקת זמן ריצה באופן בלעדי.
- (ב) מדיניות ה-Vault לפחות פריבילגיה (FIRLT:1) לכל מיכל או שירות יש רק יכולת לקרוא את סודותיו ואת הנתיבים שלו.
- (FLT:0)Prefer Vault Agent או SidecarsovsveF1) על הטמעת Vault CLI בתמונות.Itסימול ניהול מחזור חיים ולהפחית את גודל התמונה.
- (ב) ,0) , נספח סודל (FLT) לעיתים קרובות (FLT 9) או אסימונים תקופתיים כדי למזער את החשיפה.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) סודיות ונו עצמה: FLT:1u השתמש ב-TLS לכל התקשורת, ללא קשר באמצעות אוטו-לא-לא-חוקי (KMS, Cloud HSM), והגבלת הגישה לרשת ל-Vault רק לתזמורת ולמכלים.
- (ב) התחדשות חשאית של נפתלי (FLT:0) יש אפשרות לרענן את האישורים מבלי לחדש מחדש את תבניות הסוכן או את מנגנוני השעון של הסוכן ונו.
- (ב) ,0) תרחישים של כישלון: FLT:1 Simulate Vault downtime, חלוקת רשת, ו- token תפוגה כדי להבטיח יישומים לדרג חסד.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) [ה]ה] [ה]] [ה]] [ה]]] [ה]], [ה'ו]'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
השוואה עם חלופות
בעוד ווֹו הוא פתרון מוביל, כדאי להבין כיצד הוא משווה לגישות אחרות:
- (בקיצור:0)Docker Native SecretsofFLT:1 (Swarm): פשוט אך מוגבל לסודות סטטיים, לא דור דינמי, שביל ביקורת, או מדיניות טעונה בסדר, אשר עשוי לא לספק עמידה קפדנית.
- uber סודות (Kubernetes SecretsFLT:1: בסיס סודות סטטיים בסיסי 64 קודמו וכו 'ללא הצפנה במנוחה (אשר דורש תצורה נוספת) הם יכולים להיות חסרי ביטחון.
- (FLT:0Cloud ספק Secret ManagersFLT:1 (מנהלת AWS, Azure Key Vault, GCP Secret Manager): שילוב טוב עם המערכות האקולוגיות שלהם, אך בדרך כלל אין סודות דינמיים עבור מסדי נתונים או PKI גמישים כמו Vault.
- (FLT:0)CyberArk Conjurcioph:1; Enterprise-focused, חזק בניהול גישה חסוי, אבל מורכב ויקר יותר מ-Vault עבור מקרי שימוש במיכל.
Vault מבסס איזון בין גמישות קוד פתוח, עושר תכונה ותמיכה בפלטפורמה רחבה, מה שהופך אותו לבחירה פופולרית עבור ריבוי עננים ופריסות דוקר היברידיות.
הקמת גרף-Grade Vault for Docker
- (FLT:0)Deploy a highly available Vault ClusterFLT ( 1:1: השתמש בתרשים Vault Helm הרשמי על Kubernetes, או להפעיל את Vault במצב של סלקציה עם אחסון רפיח.
- (FLT:0) מגדירים את Auto-UnsealFLT:1: השתמש בענן KMS (AWS KMS, Azure Key Vault, GCP Cloud KMS) או HSM. Never לאחסן מפתחות לא חוקיים באותה אשכול כמו Vault.
- (ב) ,0) ציוד ביקורתי (Auditrovation) 1: שלח יומני ביקורת כדי להזיז ולחנות חיצונית בטוחה.
- (ב) [ה]ה]: [ה], [ה], [ה], [ה],] [ה], [ה], [ה],] ב], [ה], [ה],] ב] אלה, ל[התפקידים של השירות של קודרנטס או לחשבונות השירות של קובראנטס.
- (בקיצור:0) ,UOstegrate with OrchestrationFLT:1: ב Kubernetes, להתקין את ספק Vault CSI או Vault Injector (התאמת Webhook) עבור נאקר גולמי, השתמש במכלי Vault Agent באמצעות Dockerose.
- (FLT:0) סודות דינמיים דינמית ; ניתן לספק את מנוע סודות מסד הנתונים וליצור תפקידים.בדוק כי מיכלים יכולים לבקש ולהשתמש באישורים זמניים.
- (ב) ב-FLT:0) אינטגרציה CI/CD אינטגרציהFLT:1: בצנרת שלך, השתמש ב- API של Vault כדי לספק אסימוניות זמניות לכל שלב בנייה, הימנעות מתעודות סטטיות.
שיקולים נוספים מעבר ל-Crece
השימוש ב-Vault מפחית את הסיכון לחשיפה סודית, אך הוא אינו מבטל את כל וקטורים התוקפים:
- (ב) ,0) אבטחת אבטחה אבטחה: ודא ש-Vault אינו נחשף לאינטרנט הציבורי. השתמש ב- DNS פנימי ו-TLS אימות הדדי במידת האפשר.
- (ב) עיין בדימויים של ההרחבה:0) , ראה את התמונות הבסיסיות וחבילות מושכות הן מרשומות אמינות.דימוי נפגע יכול להחדיר סודות לפני הזרקת Vault.
- (FLT:0) ניטור זמני של Runtimeverph:1: השתמש בכלים אבטחת כלי נשק (Falco, Tracee, AppArmor) כדי לזהות הוצאות להורג בלתי צפויות של תהליכים או גישה לקובץ.
- (FLT:0) , סיקור: גם עם Vault, מפתחים עשויים עדיין לפענוח סודות בקבצי סביבה עבור בדיקות מקומיות.
- (ב) ,0) ניהול ניהולי של LT:1: יישומים שלא לחדש החכירות עלולים לאבד גישה ברגעים קריטיים.
Real-World Use Case: Microservices with Database Credentials
שקול פלטפורמה מסחר אלקטרוני עם 20 מיקרו-שירותים, כל אחד מחבר מסד נתונים ספציפי PostgreSQL.ללא Vault, לכל שירות יש משתמש מסד נתונים קשיח / קצה במימוש הפריסה שלו או תמונה. רוטט סיסמאות דורש אימות מחדש של כל השירותים.
- כל שירות אותנטי באמצעות AppRole או Kubernetes auth.
- כל השירותים מבקשים אישורי מסד נתונים דינמיים ב-Start.
- Credentials בתוקף למשך שעה אחת, ומחודש באופן אוטומטי על ידי סוכן Vault.
- אם שירות נפגע, המפעיל מבטל את כל החכירות הפעילים שלו בפקד אחד.
- יומני ביקורת מסד נתונים מראים למשתמשים זמניים שנוצרו, הפחתת רדיוס הפיצוץ של כל חומר גנוב.
דפוס זה מקטין את פני השטח התפעולי ומשפר את היציבה הביטחונית באופן משמעותי.
מלכודות נפוצות וכיצד להימנע מהם
- (ב) ⁇ :0) ,התקבלה ל-Vault: Unseal Vault:FLT 1 בהפקה, Vault מתחילה לחתימה באופן אוטומטי ללא ים (באמצעות אוטו-unseal) היא חיונית.
- (ב) ,0) לצטט את ה-Vault tokens in logs:03FLT ( 1:1) השתמש ב-תגובה או סוכן Vault כדי להימנע מלתנים המופיעים בלוגים של מכולות.
- (FLT:0) ⁇ סודות סטטיים ודינמיים: FIRLT:1 נמנע מאחסן סודות סטטיים ארוכים בחנות KV של Vault עבור עומסי עבודה של מכולה.
- (ב) לא מתכננים את Vault Downtime: FIRLT:1 ,Cache עם TTL-aware caching, או להשתמש באזיקים שיכולים לשרת סודות מטשטשים באופן זמני.
- (ב) מדיניות ⁇ :0) מדיניות של כפל 1: 1 (FLT:1) מדיניות המעניקה ל-FLT:11 למכל הקדמי עלולה לחשוף סיסמאות מסד נתונים אחוריות.
מסקנה
תוך מינוף HashiCorp Vault עם Docker מכולות הוא הנוהג הטוב ביותר עבור כל ארגון רציני לגבי אבטחה, עמידה ויעילות תפעולית. על ידי העברת סודות סטטיים, קודמו למחזור חיים סודי דינמי, המנוהל באופן מרכזי, אתה להפחית את הסיכון, לפשט סיבובים, ולקבל פיקוח מלא.אם אתה משתמש בסוכן, Kubernetes CSI, או תסריטי כניסה מותאמים אישית, מספק Vault עבור שירות סודי שלך (התחל) עם אבטחה בודד.
(ב) עיין בפרשת ה[[המאה ה-20]], ב[[1924]], ב[[1924]], ב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]