הגדרת AWS S3: ניהול גרסאות, מחזור חיים ואבטחה

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת S3: היכן ניהול הגרסאות והגישה נשברים

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

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

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

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

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

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

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

מה נותן אחסון אובייקטים מנוהל

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

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

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

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

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

הגדרת S3: ניהול גרסאות ומחזור חיים

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

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

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

סדר היישום: מביקורת ועד מסירה

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

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

קונפיגורציות, מדיניות גישה ותיעוד

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

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

הערכה נשארת אצלכם במאגר ובבוויקי, ולא בהתכתבות.

מקרה בוחן: ארכיון הועבר לכללי מחזור חיים

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

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

מה היה לפני הכללים

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

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

מה שינינו ומה יצא

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

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

מה לעשות אם האחסון כבר פרוס בלי ניהול גרסאות?

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

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

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

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

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

ספקות טכניים: שאלות נפוצות על אחסון וגישה

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

אילו מגבלות יש לניהול גרסאות?

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

מה יקרה אם אובייקט נמחק בטעות?

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

האם אפשר להגביל גישה לפי IP ותפקידים?

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

כיצד אתם בודקים שהמדיניות עובדת?

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

מה לעשות עם נתונים שכבר נמצאים בדלי?

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

נדון במשימה: מה נברר ומה נציע

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

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

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

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