Table of Contents
דרישות אבטחה ייחודיות של דרישות ללא Server
מחשוב Serverless שינה את האופן שבו קבוצות לבנות ופרוסות יישומים.על ידי הסרת שרתים, קנה מידה, פלטפורמות כמו AWS Lambda, Azure Functions, ו-Google Cloud Functions מאפשרות למפתחים להתמקד אך ורק בלוגיקה עסקית.עם זאת, שינוי פרדיגמה זה גם מציג אתגרים חדשים אבטחה, במיוחד סביב ניהול סודות ונתונים רגישים.
מאמר זה מספק מדריך מקיף לטיפול בסודות בסביבה ללא שרת.נבדוק את האתגרים המרכזיים, לצלול לתוך שיטות הטובות ביותר, לעבור דרך דפוסי יישום קונקרטיים באמצעות ספקי ענן מרכזיים, ונדון כיצד לאבטח את מחזור החיים של נתונים רגישים - החל מפיתוח לייצור.
הבנת האתגרים של ניהול חשאי ב- Serverless
אדריכלות ללא שרת הם חסרי מצב.כאשר פונקציה מופעלת, היא פועלת במיכל שנקרע לאחר ביצוע (או בשימוש מחדש לזמן קצר) טבע נבואה זה אומר שאתה לא יכול לסמוך על תהליכים ארוכי טווח או מערכות קבצים לאחסון סודות.
- (FLT:0)Exposure בקוד ובלוגים: ההרחבה 1 (מפתחים) עשויים לבצע באופן בלתי נמנע סודות כדי לשלוט במקור או להיכנס אליהם במהלך ההתנתקות.לאחר סוד נמצא בזרם של יומן, ניתן להחזיר אותו על ידי כל אחד עם גישה ללוגים - ו יומני נשמרים לעתים קרובות ללא הגבלת זמן.
- (FLT:0) מגבלות משתנה:FLT:1 בעוד שמשתנים סביבתיים נוחים, הם לעתים קרובות מוגדרים במהלך פריסה ומאוחסנים בטקסט רגיל בתצורה של הפונקציה.אם התוקף מקבל גישה לקריאה לתצורה של הפונקציה (למשל, באמצעות צינורות CI/CD), הם מקבלים את הסוד.
- (FLT:0)Cold מתחיל ו-Cching:FLT:1 Retrieving Secrets on Every invocation יכול להציג עצלות ועלויות. Developers לפעמים סודות מטמון בזיכרון, אבל מיכל הנבואה עשוי להיות בשימוש מחדש עבור מספר ייעודים - המוביל ל-Sttale או לפוג סודות אם סיבוב הוא תכוף.
- (ב) ⁇ :0) אי-אפשרות וסיבוב: ללא קמרון מרכזי, קשה לדעת מי ניגש לסוד כאשר או לסובב סודות ללא כל פונקציה.
אתגרים אלה מורכבים מהאופי המופץ, המונע על ידי האירוע של יישומים ללא שרת. פונקציה אחת עשויה להיות צריכה לקרוא מסד נתונים, API חיצוני, ותור - כל אחד הדורש אישורים נפרדים.
שיטות טובות לניהול סודות והנתונים רגישים
הבסיס של כל אסטרטגיה אבטחה ללא שרת הוא העיקרון של לפחות פריבילגיה: לכל פונקציה צריכה להיות גישה רק לסודות שהיא צריכה לחלוטין, ולמשך הקצר ביותר האפשרי.
1 שימוש בשירות ניהול חשאי
כל ספק ענן גדול מציע שירות בנוי למטרה לאחסון וגישה לסודות:
- [ה]הכוח של [ה] הוא [ה]: [ה], [ה], הוא] מנהל סודות, מנהל] את סודותיו עם סיבוב אוטומטי ומדיניות גישה מוטענת היטב.
- (FLT:0Zonee Key ViraultFLT:1) - שומרת סודות, מפתחות ותעודות, ומשתלבת עם פונקציות Azure באמצעות זהות מנוהלת.
- (FLT:0) Google Cloud SecretmasterofLT:1 - מציע גרסאות, IAM שולט, ושילוב עם פונקציות ענן וענן Run.
שירותים אלה מצפיפים סודות במנוחה ובמעבר, מספקים יומני ביקורת של כל גישה, ומאפשרים לך לסובב סודות ללא פונקציות אדפלינג.לעולם אל תאחסן סודות בקבצי הגדרות טקסט או קוד קוליין.
המונחים: Leverage Environment Variables - But with Care
משתנים סביבתיים נשארים דרך נפוצה להזריק תצורה לפונקציות ללא שרת.עם זאת, הם לא צריכים להחזיק סודות ישירות.במקום, להשתמש במשתנה הסביבה כדי לאחסן אזכורים לסודות (למשל, ARN של סוד במנהל סודות של AWS או את שם סוד ב- Azure Key Vault). הפונקציה זו משחזרת את הסוד בפועל בריצה באמצעות ה- SDK המתאים.
מוצפן הכל לנוח ובמעבר
סודות חייבים להיות מוצפנים בכל מקום שהם מתגוררים: בתוך שירות ניהול הסודי, כאשר מכווצים בזיכרון (באמצעות טכניקות כמו הצפנה של זיכרון-קשה), וכאשר מועברים מעל הרשת.כל שירותי ניהול חשאיים העיקריים לאכוף הצפנה במנוחה באמצעות הצפנה עם מפתחות מעובדים של לקוחות (CMKs) שבו ניתן.עבורת, תמיד להשתמש ב-TLS 1.2 או גבוה יותר בין הפונקציה שלך לבין החנות הסודית.
יישום Strict Access Controls ו- Principle of Least Privilege
השתמש בשליטה מבוססת על גישה (RBAC) או בקרת גישה מבוססת תכונות (ABAC) כדי להגביל אילו פונקציות יכול לקרוא אילו סודות.ב-AWS, לצרף מדיניות IAM לתפקיד המבצעת המעניקה FLT:0 רק עבור פונקציות סודיות ספציפיות ARNs. בדומה, ב- Azure, להשתמש זהויות מנוהלות וקביעת מדיניות הגישה של מקש Vault.
בנוסף, הגבלת הגישה לשירות ניהול הסודי עצמו.יש לנתח רק מנהלי מערכת, לשנות או למחוק סודות. המפעילים והמפתחים צריכים להיות מוגבלים לקריאה של סודות הדרושים לעבודה שלהם, וניתן לבדוק יומני ביקורת מעת לעת.
סודות רוטט באופן קבוע
סיבוב סודי אוטומטי הוא קריטי להגביל את רדיוס הפיצוץ של פשרה.מנהל סודות AWS יכול לסובב סודות על לוח זמנים (למשל, כל 30 יום) על ידי קריאה לתפקוד Lambda המעדכן את הסוד בשירות היעד (כגון מסד נתונים) Azure Key Vault משלב עם שירותים אחרים עבור סיבוב, אם כי זה דורש אוטומציה אישית עבור מטרות לא-אזור.
גם עם סיבוב אוטומטי, עליך להבטיח כי גרסאות חשאיות ישנות אינן נשמרות ללא הגבלת זמן. ליישם מדיניות שימור שמפחיתה גרסאות ישנות יותר לאחר חלון בטוח (למשל 30 ימים לאחר סיבוב) כדי למנוע תוקף להשתמש בסוד ישן ונפגע.
השתמש בדינמיקה וזיכרון זמניים במידת האפשר
עבור שירותים התומכים בו, מעדיפים אישורים זמניים על סודות ארוכים.לדוגמה, פונקציות AWS Lambda יכולות להניח כי תפקידים IAM אשר נושאים אישורים זמניים (באמצעות STS) עבור גישה S3, DynamoDB, או שירותים אחרים של AWS.זה מבטל את הצורך בכל אישורים קודים קשיחים לחלוטין. בדומה לכך, פונקציות Azure יכולות להשתמש זהויות מנוהלות כדי לאמת שירותים ללא אחסון של כל פונקציות של Google Cloud יכולות להשתמש בחשבונות קצרים.
ביקורת וביקורת על Secret Access
כניסה אפשרית על שירות הניהול הסודי שלך וספינה את אותם יומני מידע אבטחה מרכזי וניהול אירועים (SIEM) פלטפורמה. Monitor עבור דפוסי גישה יוצאי דופן, כגון פונקציה קורא סודות לעתים קרובות יותר מאשר צפוי, או גישה מכתובות IP לא ידועות. להגדיר התראות עבור שגיאות כגון "גישה הכחישה" לחנות הסודית, אשר יכול להצביע על פונקציה לא מוגדרת או ניסיון רב עוצמה.
ניהול סודות: תבניות אמיתיות בעולם
הידיעה על פרקטיקות היא דבר אחד; יישום נכון הוא אחר.למטה הם דפוסי יישום עבור שלושת ספקי הענן העיקריים, יחד עם שיקולים חוצה כוכביים.
AWS Lambda עם AWS Secrets Manager
כדי לשלב את מנהל הסודות של AWS עם תפקיד Lambda, בצע את השלבים הבאים:
- (FLT:0) לתקן את הסודי של ה- 1FLT – לאחסן את הסיסמה של מסד הנתונים שלך, מפתח API, או מחרוזת רגישה אחרת כסוד ב- Secrets Manager.
- (ב) [ה]] [ה]], [ה], [ה], [ה], [ה],] [ה]], [ה], [ה]], [ה]]], [ה'], [ה']']'[ה']''''[ה']']'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- (הופנה מהדף RuntimeFLT:1) בקוד הפונקציה שלך (Node.js, Python, וכו '), לייבא את ה-AWS SDK ו-CallFLT 3: 3) ,Cache את הסוד במשתנה גלובלי כדי להפחית את הסבלנות ועלות על ייעודים חוזרים.
const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();
let cachedSecret;
exports.handler = async () => {
if (!cachedSecret) {
const data = await secretsManager.getSecretValue({ SecretId: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:MyDbPassword-abc123' }).promise();
cachedSecret = data.SecretString;
}
// use cachedSecret securely, never log it
};
שימו לב שהסוד הוא רק פעם אחת להתחלה הקרה.על ייעודים חמים, הערך המצופה הוא בשימוש חוזר.אם אתם מסובבים סודות לעתים קרובות, שקול להגדיר קיצור של זמן אל-חיים (TTL) על השרוול, או לבדוק את הגרסה הסודית של הסוד לפני שימוש חוזר.
Azure Key Vault
Azure מציעה שילוב יותר חלקה באמצעות ההרחבה:0.Key Vault ReferenceFLT ( 1:1 בנספח קונפדרציה או כחלק מהגדרות הפונקציה. במקום לקרוא ל- SDK באופן ידני, באפשרותך להגדיר סביבה המשתנה ל-Syntax מיוחד זה:
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/DbPassword/)
כאשר הפונקציה פועלת, Azure פותרת באופן אוטומטי את ההתייחסות ומזריקת את הערך הסודי כמשתנה סביבה.גישה זו מפשטת מאוד קוד ושומרת סודות מכל קובץ תצורה.עם זאת, עליך עדיין להעניק למערכת התפקוד - כפי שחתימה זהות מנוהלת (FLT:6 תפקיד).
עבור פונקציות שיש צורך לשחזר מספר סודות דינמיים, להשתמש ב-FLT 7 ו-FLT:8 SDKs כדי להביא סודות על ידי שם.תמיד להשתמש FLT 9 עבור אימות, אשר ישתמשו בזהות מנוהלת בייצור ואת האישורים המקומיים שלך במהלך הפיתוח.
Google Cloud Functions with Secret Manager
פונקציות ענן של Google יכולות לגשת לסודות באמצעות משתנים סביבתיים המתייחסים לגרסה סודית.במפקדת הפריסה, באפשרותך לציין את המשתנה של הסביבה כמו FLT:10 ששוויו מוגדר ל-FLT:11 הפונקציה תפתור באופן אוטומטי את הערך הסודי ב- Runtime. לחלופין, להשתמש בספריית הלקוח החשאי כדי להביא סודות על הביקוש.
תכונה ייחודית אחת של Google Cloud Secret Manager היא שאתה יכול להעניק גישה לרמה הסודית באמצעות מחייבות IAM, ואתה יכול גם להשתמש במפתחות הצפנה של לקוח (CMEK) להגנה נוספת.
מעבר לענן: סודות ב- CI/CD ופיתוח
סודות חייבים להיות מנוהלים לא רק בייצור, אלא גם במהלך פיתוח ושילוב מתמשך / פריסה רציפה (CI /CD) .מפתחים צריכים לעתים קרובות לבדוק פונקציות ללא שרת באופן מקומי עם נקודות קצה שירות אמיתיות.הפרקטיקה הבטוחה ביותר היא להשתמש בסודות אישיים או אישורים זמניים המשתנים לזהותם ויש להם הרשאות מוגבלות.
- (ב) [ה]: [ה] [ה]]] [ה]]] [ה]] [ה]]] [ה]]] [ה]]] [ב]]]]]]] [ההה']'[ה']'[ה']'[ה']'[ה']']']'[ה']']''[ה'[ה']']']'[ה']']']'[ה'[ה']'[ה'[ה'[ה'[ה'[ה'[ה']']']'[ה']']'[ה'[ה']']']'[ה']']'[ה'[ה'[ה']']']']']']'[ה'[ה']']'[ה'[ה']'[ה']']'[ה'[ה']']'[ה'[ה'[ה']']'[ה']']'[ה'[ה'[ה'['[ה'
- (FLT:0CI /CD צינורות:FLT:1 לאחסן סודות כמו סודות צינורות (למשל, GitHub Actions סודות, GitLab CI / D משתנים) ולהזריק אותם בבניית או לפרוס זמן. להימנע הדפסה בגלציות; השתמש במשתנה המסתנן שבו ניתן.עבור פריסות מרובות שלבים, לשקול שימוש בשירות ניהול חשאי כי באמצעות צינורות באמצעות זהות משלו, במקום סודות עובר דרך הסביבה.
- (ה-FLT:0) Infra Structure as Code (IaC): ⁇ FLT:1 אם אתה משתמש ב- Terraform, AWS CloudFormation, או Azure Bicep כדי לפרוס פונקציות ללא שרת, אף פעם לא קוד קשה בתבניות IaC. במקום זאת, השתמש בגיבוי מצב מרוחק מאובטח וזיכרון של ספק הענן של כלי IaC רבים יש משאבים ייעודיים לקריאה סודות מאובטחים (מקור מאובטח של נתונים).
אינטגרציה וסטנדרטיזציה
מסגרות רגולטוריות רבות (GDPR, SOC 2, PCI-DSS) דורשות בקרה קפדנית על גישה לנתונים רגישים.ניהול סודי מתאים מסייע לעמוד בדרישות אלה על ידי מתן:
- (ב) ⁇ :0) ,Audit Trails: FLT:1IR , ניהול חשאי כל קריאה, כתיבה ומחק, נותן לך היסטוריה שלמה של גישה.
- מדיניות IAM (אנ') של IAM:0.L.מזרח זכויות יוצרים: 1FLT:1 (IAM) מבטיחה שרק פונקציות מורשים ומשתמשים יכולים לגשת לסודות.
- (בקיצור:0) קידוד: סודות מוצפנים במנוחה ובמעבר, מספק דרישות הגנת נתונים.
(הופנה מהדף זכויות יוצרים, גלגולי זמן וביקורת על כלי שימוש כמו FLT:0) ניהול חשאי של השב"כ (Hellow FLT:1) ו-(IFLT:2OWASP ניהול סימול Sheetph 3:0) ו-FLT:4NIST SP-57Freave:5 (LT:2OWER6NIST SP-FIVEL) כ-R7
מסקנה: בניית ארכיטקטורה ללא תשלום
ניהול סודות ביישומים ללא שרת הוא לא משימה חד פעמית אלא משמעת מתמשכת.האופי האמפימלי והמופץ של דרישות ללא שרת שאינך בוטח בקוד או בתצורה כדי להחזיק סודות.במקום, להסתמך על שירותים ניהול חשאיים ייעודיים, לאכוף גישה לפחות פרטית, לסובב את האישורים באופן אוטומטי, ולעקוב אחר כל גישה.
על ידי ביצוע שיטות הטובות ביותר המפורטות במאמר זה - מינוף מנהל סודות של AWS, Azure Key Vault, או Google Cloud Secret Manager; באמצעות משתנים סביבתיים רק כמצביעים; משיכת בחוכמה; ושילוב של טיפול חשאי מאובטח לתוך CI /CD - אתה יכול לבנות יישומים ללא שרתיים כי הם חזקים ומאובטחים.זכור כי סודות הם המפתחות למלכות הדיגיטלית שלך.
עבור צלילה עמוקה יותר, התייחס לתיעוד הרשמי:
- (ב) ◄ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) כרך ראשון (ב[[1924]]]]
- (ב) Google Cloud Secret Manager Documentation