מבוא לכספת ענן אביבית

1. סקירה כללית

במדריך זה נראה כיצד נוכל להשתמש בכספת של Hashicorp ביישומי Spring Boot לאבטחת נתוני תצורה רגישים.

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

2. קמרון ענן אביב

Spring Cloud Vault הוא תוספת חדשה יחסית לערמת Spring Cloud מאפשר ליישומים לגשת לסודות המאוחסנים במופע Vault בצורה שקופה.

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

זה אפשרי מכיוון שהוא פועל בעדיפות גבוהה PropertySource רשום הנוכחי סביבה.

ככזה, ספרינג ישתמש בו בכל פעם שנדרש נכס. דוגמאות מכילות מקור מידע נכסים, ConfigurationProperties, וכולי.

3. הוספת קמרון ענן אביב לפרויקט אתחול האביב

על מנת לכלול את אביב-ענן-קמרון בספרייה בפרויקט Spring Boot מבוסס על Maven, אנו משתמשים בסרגל המשויך מַתנֵעַ חפץ, אשר ימשוך את כל התלות הנדרשת.

מלבד העיקרי מַתנֵעַ, נכלול גם את מסדי נתונים של קפיצי-קמרון-תצורה, שמוסיף תמיכה לאישורי מסד נתונים דינמיים:

 org.springframework.cloud spring-cloud-starter-vault-config org.springframework.cloud spring-cloud-vault-config-databases 

ניתן להוריד את הגרסה האחרונה של המתנע של Spring Cloud Vault מוובן סנטרל.

3.1. תצורה בסיסית

על מנת לעבוד כראוי, Spring Cloud Vault זקוק לדרך לקבוע היכן ליצור קשר עם שרת הכספת וכיצד לאמת את עצמו נגדו.

אנו עושים זאת על ידי מתן המידע הדרוש ב bootstrap.yml אוֹ bootstrap.properties:

# bootstrap.yml אביב: ענן: קמרון: uri: // localhost: 8200 ssl: trust-store: classpath: /vault.jks trust-store-password: changeit 

ה spring.cloud.vault.uri המאפיין מצביע על כתובת ה- API של הכספת. מכיוון שסביבת הבדיקה שלנו משתמשת ב- HTTPS עם אישור בחתימה עצמית, עלינו לספק חנות מפתחות המכילה את המפתח הציבורי שלו.

שים לב שלתצורה זו אין נתוני אימות. במקרה הפשוט ביותר, שבו אנו משתמשים באסימון קבוע, נוכל להעביר אותו דרך מאפיין המערכת spring.cloud.vault.token או משתנה סביבה. גישה זו עובדת היטב בשילוב עם מנגנוני תצורת ענן סטנדרטיים, כגון ConfigMaps של Kubernetes או סודות Docker.

Spring Vault דורש גם תצורה נוספת לכל סוג סוד בו אנו רוצים להשתמש ביישום שלנו. החלקים הבאים מתארים כיצד נוכל להוסיף תמיכה לשני סוגים סודיים נפוצים: אישורי מפתח / אישורים.

4. שימוש ב- Backend של סודות גנריים

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

בהנחה שכבר יש לנו את spring-cloud-starter-vault-config תלות שלנו מסלול כיתהכל שעלינו לעשות הוא להוסיף כמה מאפיינים ליישומים bootstrap.yml קובץ תצורה:

קפיץ: ענן: קמרון: # מאפייני קמרון אחרים הושמטו ... כללי: מופעל: שם יישום אמיתי: פאקבנק 

הרכוש שם אפליקציה הוא אופציונלי במקרה זה. אם לא צוין, אביב ייקח את ערך התקן spring.application.name במקום זאת.

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

@ אווירה סביבתית אוטומטית; מחרוזת ציבורית getFoo () {return env.getProperty ("foo"); } 

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

4.1. הערה על פרופילי אביב

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

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

לסיכום, אם הפקה פרופיל של out בנק בנק היישום פעיל, Spring Vault יחפש נכסים המאוחסנים בנתיבים הבאים:

  1. סוֹד/בנק בנק/הפקה (עדיפות גבוהה יותר)
  2. סוֹד/בנק בנק
  3. סוד / יישום / הפקה
  4. סוד / יישום (עדיפות נמוכה יותר)

ברשימה הקודמת, יישום הוא השם ש- Spring משתמש בו כמיקום נוסף המוגדר כברירת מחדל לסודות. אנחנו יכולים לשנות את זה באמצעות spring.cloud.vault.generic.default-context תכונה.

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

5. שימוש במאגד הסודי של מסד הנתונים

מודול ה- backend של מסד הנתונים מאפשר ליישומי Spring להשתמש באישורי מסדי נתונים שנוצרו באופן דינמי שנוצרו על ידי Vault. אביב הכספת מזריק את האישורים הללו על פי התקן spring.datasource.username ו spring.datasource.password נכסים כך שניתן יהיה לבחור אותם על ידי רגיל מקור מידעס.

שים לב שלפני השימוש ב- backend זה עלינו ליצור תצורת מסד נתונים ותפקידים בכספת כמתואר במדריך הקודם שלנו.

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

עלינו גם לאפשר את השימוש בה ביישום שלנו על ידי הוספת כמה מאפיינים שלנו bootstrap.yml:

קפיץ: ענן: קמרון: # ... מאפיינים אחרים שהושמטו מסד נתונים: מופעל: תפקיד אמיתי: fakebank-accounts-rw

המאפיין החשוב ביותר כאן הוא תַפְקִיד מאפיין, המחזיק שם תפקיד מסד נתונים המאוחסן בכספת. במהלך האתחול, Spring ייצור קשר עם הכספת ויבקש שהיא תיצור אישורים חדשים עם ההרשאות המתאימות.

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

לְמַרְבֶּה הַמַזָל, Spring Vault יחדש אוטומטית את חוזה השכירות המשויך לתעודות הנרכשות. על ידי כך, האישורים יישארו תקפים כל עוד היישום שלנו פועל.

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

חיבור c = datasource.getConnection (); 

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

6. מסקנה

במדריך זה הראינו כיצד ניתן לשלב את הכספת עם Spring Boot באמצעות ספריית Spring Vault. סקרנו שני מקרי שימוש נפוצים: צמדי מפתח / ערך כלליים ואישורי מסד נתונים דינמיים.

פרויקט לדוגמה המכיל את כל התלות הנדרשת, בדיקות שילוב וסקריפטים של הגדרת הכספת זמין ב- GitHub.