אבטחה

    איך מוסרים קובץ תצורה למתכנת בצורה מאובטחת

    הפרידו הגדרות מסודות, שלחו את הערכים הסודיים בקישור חד-פעמי או בקובץ מצורף שנמחק אחרי הורדה אחת, והשאירו את קובץ ה-.env מחוץ ל-git.

    LinkPilot Team · האנשים שבונים ומפעילים את LinkPilot ב-TetraCore, LLC · על LinkPilot

    מתכנת חדש מצטרף, או שקבלן מתחיל לעבוד, והדבר הראשון שהוא צריך הוא הקובץ .env שבלעדיו הפרויקט לא רץ. הקובץ הזה הוא בדרך כלל שילוב של הגדרות שאין בהן שום סיכון ושל הערכים הרגישים ביותר שיש לצוות, ולכן הוא מגיע כל כך הרבה פעמים בהודעה ישירה או כקובץ מצורף לאימייל בשם "config".

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

    קראו את הקובץ כאילו כל שורה בו פומבית

    פתחו את הקובץ ומיינו כל שורה לאחת משתי קבוצות.

    • הגדרות: רמות לוג, פורטים, דגלי תכונות, נקודות קצה שאינן של סביבת הייצור, מזהי לקוח ציבוריים. המקום שלהן הוא במאגר, כקובץ דוגמה, ואפשר לשלוח אותן בכל דרך.
    • סודות: סיסמאות למסדי נתונים, מפתחות API, סודות חתימה, מפתחות פרטיים, סודות לקוח של OAuth, כל דבר שנותן גישה. חפשו PASSWORD, SECRET, TOKEN, KEY ו-PRIVATE, ואז קראו גם את השאר, כי מחרוזת חיבור שהסיסמה משובצת בתוכה לא מכריזה על עצמה.

    אחר כך שאלו מה המתכנת עומד לעשות. פיתוח מקומי מול סביבת staging צריך את הערכים של staging. הוא לא צריך מפתחות של סביבת הייצור, והוא לא צריך את המפתח החי של ספק התשלומים רק כי במקרה יש כזה בקובץ.

    השאירו את הסודות מחוץ לקובץ שנכנס למאגר

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

    # .env.example (committed)
    DATABASE_URL=postgres://app:CHANGE_ME@staging-db.internal:5432/app
    STRIPE_SECRET_KEY=sk_test_CHANGE_ME
    SESSION_SECRET=CHANGE_ME
    LOG_LEVEL=debug
    

    הוסיפו את .env לקובץ .gitignore לפני שלמישהו יש קובץ אמיתי, ושקלו pre-commit hook, כמו gitleaks, כדי ש-commit שנכנס בטעות ייכשל מיד.

    תנו למתכנת פרטי התחברות משלו כשאפשר

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

    איך מוסרים את הערכים הסודיים

    יש שתי דרכים שעובדות, ובשתיהן הקובץ לא נשאר בתוך הודעה.

    הדביקו את השורות הסודיות בקישור חד-פעמי. פתחו את הכלי לקישורים סודיים, הדביקו רק את השורות שמכילות סודות וצרו את הקישור. הטקסט מוצפן בדפדפן שלכם לפני שהוא נשמר, העותק השמור מושמד בפעם הראשונה שהקישור נפתח, ותוקף הקישור פג אחרי שעה אחת, 24 שעות או שבעה ימים אם אף אחד לא פותח אותו. עד 10,000 תווים נכנסים בלי חשבון, ורוב קובצי ה-.env קטנים מזה פי כמה.

    צרפו את הקובץ כולו לקישור סודי. מחשבון LinkPilot מחובר אפשר לצרף לסוד עד שלושה קבצים של 9 MB כל אחד. כל קובץ מוצפן בדפדפן שלכם במפתח שנגזר מהמפתח של הסוד עצמו, כך שהשרת אף פעם לא מחזיק את הקובץ הגלוי, והקובץ המצורף נמחק אחרי ההורדה היחידה. זו הדרך הטובה יותר כשהקובץ צריך להגיע בדיוק כפי שהוא, בייט אחר בייט, למשל קובץ JSON של חשבון שירות או keystore.

    בכל אחת מהדרכים:

    1. אמתו את זהות המתכנת דרך ערוץ הגיוס או החוזה, לא דרך הכתובת שביקשה את הקובץ.
    2. קבעו תפוגה לפי חלון הזמן שבו הוא באמת ישתמש בקישור. שעה אחת אם הוא מחכה, יום אם הוא באזור זמן אחר.
    3. הגבילו את מספר הצפיות לאחת.
    4. הוסיפו ביטוי סיסמה בחשבון Pro לערכים של סביבת הייצור, ושלחו אותו בערוץ אחר.
    5. שלחו את הקישור עם הערה של שורה אחת שמסבירה מה הוא ולאן הקובץ שייך. את ההגדרות שאינן סודיות שלחו בנפרד, או הפנו לקובץ הדוגמה במאגר.

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

    אמרו למתכנת איפה הקובץ צריך להיות

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

    • שמרו אותו בשם .env בתיקיית הבסיס של הפרויקט, ובשום מקום אחר. בדקו שהקובץ .gitignore מכסה אותו לפני ה-commit הראשון.
    • אל תדביקו ערכים בכרטיסי משימה או בצ'אט כדי לשאול אם הם נכונים. דווחו על משתנה חסר או לא תקין לפי השם שלו בלבד, והשולח ינפיק ערך חדש.
    • החלפה בסיום העבודה. כשההתקשרות מסתיימת, הערכים בקובץ הזה מוחלפים. אמרו את זה מראש, כדי שאף אחד לא יופתע.

    אשרו, ואז נקו

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

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

    כלים למאמר הזה

    שאלות נפוצות

    LinkPilot שולח קישור סודי שנמחק אחרי שפותחים אותו.

    מוצפן בדפדפן שלכם, מוצג פעם אחת ואז מושמד. ללא חשבון.

    יצירת קישור סודי

    לקריאה נוספת

    אבטחה

    איך מיישמים שיתוף סודות מאובטח בצוותים מרוחקים

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

    אבטחה

    איך יוצרים דרך מאובטחת למסירת פרטי התחברות בין צוותים

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

    מעקב קישורים

    ניהול כתובות URL ממותגות בכמה חשבונות לקוח

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