מה משתנה בתמונת הריצה
פרויקט Distroless מספק תמונות ריצה שמכילות את היישום ואת התלויות הנדרשות לו, בלי סביבת ההפעלה המלאה שמצפים למצוא בהפצת Linux רגילה. בתמונות הרגילות של הפרויקט אין shell או מנהל חבילות. הבחירה מצמצמת רכיבים שאינם נחוצים להפעלת היישום.
הצמצום אינו הופך קוד לא בטוח לבטוח. תלות פגיעה, הרשאה רחבה או endpoint שמקבל קלט לא תקין עדיין דורשים טיפול. לכן כדאי לראות ב־Distroless החלטה אחת בתוך הקשחת סביבת הריצה, לצד אבטחת היישום וניהול הגרסאות שלו.
להפריד את כלי הבנייה מסביבת ההפעלה
ב־multi-stage build מתקינים ומריצים כלי בנייה בשלב נפרד, ומעתיקים לתמונת הריצה רק את מה שנדרש. לפני ההעתקה בדקו אילו קבצים מגיעים לתוצר: קוד שנבנה, תלויות ריצה וקבצים סטטיים. קובצי סודות, היסטוריה וכלי פיתוח אינם חלק אוטומטי מהמסירה.
הקפידו על תאימות של runtime, ספריות native וארכיטקטורת המעבד. בנייה שהסתיימה אינה מוכיחה שהיישום יפעל בתמונה המצומצמת. הריצו את התוצר ובדקו מסלול אמיתי, כולל גישה לקבצים או כתיבה זמנית שהיישום צריך לבצע.
להגדיר גם את תנאי ההפעלה
בחרו משתמש שאינו root כאשר היישום מאפשר זאת, תכננו מערכת קבצים לקריאה בלבד והגבילו יכולות ומשאבים בהתאם לצורך. אם יש צורך בכתיבה, הגדירו נתיב ייעודי והרשאות מתאימות. הגבלות ללא בדיקת הפעלה עלולות ליצור כשל תפעולי שקשה לזהות.
גם הרשת והסודות דורשים החלטה. הקונטיינר צריך רק את היעדים ואת האישורים שמאפשרים לו למלא את תפקידו. אין סיבה שסוד של שלב בנייה יישאר בתוך ה־image. עברו על המסלול שבו תצורה וסודות מגיעים לתהליך בעת הפעלתו.
לתכנן אבחון לפני שמסירים shell
כשאין shell בתמונת הייצור, אבחון נשען על לוגים, מדדים, traces וכלי הסביבה המארחת. הכינו הודעות שגיאה שמאפשרות להבין מה נכשל בלי לחשוף סודות. בדקו שאפשר לזהות תקלה מתוכננת מהמידע שנאסף.
הפרויקט מספק גם גרסאות debug, אך אין צורך להפוך אותן לתמונת הייצור הרגילה. קבעו תהליך חקירה בסביבה מאושרת ומוגבלת. אל תוסיפו כלי אבחון לכל image רק מפני שלא תוכננה דרך אחרת לקבל את המידע.
לשמור את ההקשחה לאורך חיי המוצר
סרקו גם את תמונת הריצה וגם את תלויות היישום. תעדו את בסיס התמונה והגרסה, ובחנו עדכונים כחלק מהתחזוקה. קיבוע digest עוזר לשחזור תוצר, אך מחייב תהליך שמזהה מתי צריך לעדכן את הבסיס.
- ה־image נבדק בתנאי ריצה דומים לייצור.
- אין בו קובצי סודות או תלויות פיתוח מיותרות.
- יש נתיב אבחון ללא shell בייצור.
- יש בעלים לעדכוני בסיס ולממצאי סריקה.