Table of Contents
מדוע Authentication and Authorization Matter in Serverless Architectures
מחשוב Serverless שינה את האופן שבו צוותים בונים ופרוס יישומים על ידי ניהול תשתיות מופשטות, צמצום תפעולי מעל פני השטח, ומאפשרים דרוג אוטומטי.עם זאת, האופי האנפימרנלי, המונע על ידי אירועים של פונקציות ללא שרת מציג אתגרים ביטחוניים ייחודיים.ללא שרת מתמשך כדי לשמור על מצב ישיבה, כל פונקציה בייעוד חייבת לוודא באופן עצמאי מי המתקשר הוא והאם הם רשאים לבצע את הפעולה המבוקשת זה הופך את האימות (AAIP מתוכנן היטב) כמו אישורים (ACC) כמו יישום 2C) או יישום גישה יעילה) או יישום.
בניגוד ליישומים מונוליטיים שבהם לוגיקה אימות יכולה לחיות בתוך שרת מרכזי, יישומים ללא שרת להפיץ אימות על פני שערי API, שירותי זהות ופונקציות בודדות.חלוקה זו דורש אסטרטגיה ברורה שמאזנת אבטחה, ביצועים וחוויית מפתח. במאמר זה, אנו חוקרים את מושגי הליבה, כלים פופולריים, ואת דפוסי יישום מעשיים לאבטחת יישומים ללא שרת.
אישור נגד אישור: A Clear Distinction
למרות שלעתים קרובות בשימוש בחילופים, אימות והרשאה משמשים מטרות נפרדות. Authentication עונה לשאלה "מי אתה?" – בדרך כלל על ידי אימות האישורים כגון שם משתמש וסיסמה, קוד חד פעמי, או גורם ביומטרי.המחבר עונה לשאלה "מה אתה יכול לעשות?" - בדיקת הרשאות לאחר זהות הוקמה.
בסביבה ללא שרת, אימות קורה לעתים קרובות בשער ה- API או באמצעות ספק זהות ייעודי (IdP) לפני מופעלת פונקציה. Authorization ניתן לטפל ברמת השער באמצעות מסמכי מדיניות, בתוך הפונקציה באמצעות קוד אשר בודק תביעות ב-JSON Web ken (JWT), או באמצעות שילוב של שניהם.כשל במחויבויות נפרדות אלה מוביל לעתים קרובות לפגיעות כגון הסלמה או דליפה נתונים.
אסטרטגיות ליישומים ללא Serverless Applications
אימות Serverless נופל בדרך כלל לשלוש קטגוריות: שירותים המנוהלים לחלוטין של צד שלישי, אימות מותאם אישית בתוך פונקציות, וזהות מזוינה באמצעות OAuth2/OpenID Connect. כל גישה מציעה חילופי סחר בין קלות יישום, בקרה ועלויות.
ספק זהות שלישי
רוב היישומים ללא השרתים מסתמכים על IdP ייעודי כדי להתמודד עם אימות.שירותים אלה לנהל ספרי משתמשים, סיסמה hashing, ניהול ישיבות ושילוב עם ספקי כניסה חברתית. אפשרויות פופולריות כוללות:
- (הופנה מהדף אמזון קוגניטוFLT:1) - שירות מנוהל במלואו המשלב את ה-AWS Gateway ו- Lambda. Cognito מספק בריכות משתמשים עבור Sign-up/sign-in, בריכות זהות עבור אישורים זמניים של AWS, ותומכת ב- MFA, אימות הסתגלותי וזרימות עבודה מותאמות אישית באמצעות Lambda מפעילה.
- (ב) [ה]:0[46]0] ,[דרוש מקור]: [ה], [ה], [ה]]] [ה]], [ה]]] ,[ה]] , [ה], [ה], [ה]הההההההההההההההההההההתאמתה] היא בעלת כפלה, וניתן לשלבה בכל שער ה-APIQ.
- (FLT:0)Firebase AuthenticationFLT:1) חלק מחבילת Firebase של גוגל, היא תומכת במייל / פאסמה, טלפון וספקים חברתיים פופולריים. Firebase Auth משלבת בצורה חלקה עם פונקציות בסיס Firebase ו-Cloud Run.
- (FLT:0Zonee Active Directory B2CFLT:1) עבור יישומים ארגוניים הדורשים שילוב Azure AD, B2C מספק ניהול זהות עבור יישומים הפונים לצרכנים עם תמיכה בסטנדרטים כמו OAuth2 ו SAML.
באמצעות IdP צד שלישי מקלקל את העול של אחסון מאובטח, הצפנה וציות.זה גם מפשט את יישום תכונות מתקדמות כמו MFA, שחזור חשבון והגנה על כוח רוטט.
אישור מותאם אישית בפונקציות ללא Serverless Functions
כאשר אתה צריך שליטה מלאה על זרימת האימות - לדוגמה, כאשר שילוב עם מסד נתונים למשתמש מורשת או אכיפת פרוטוקולים האימות הקנייניים - אתה יכול ליישם לוגיקה אימות ישירות בתוך Lambda או פונקציה אחרת ללא שרת.תבנית זו משמשת לעתים קרובות עבור נקודות קצה API כי צריך להיות נגיש לציבור אבל דורש אסיקן מותאם אישית, כגון מפתח API עבור שותפים חיצוניים.
עם זאת, בניית אימות מותאם אישית מאפס היא מסוכנת.תפקודים ללא תנאי הם חסרי מדינה, כך שאתה חייב להתמודד עם סיסמה ישלינג (באמצעות bcrypt או ארגון2), דור אסימונים וניהול הישיבות. Cold מתחיל לגרום לספיציק אם לוגיקה אימות הוא כבד.
OAuth2 ו- OpenID Connect in Serverless
OAuth2 הוא תקן התעשייה עבור אישור מוקצה, המאפשר יישומים לגשת משאבים מטעם משתמש ללא שיתוף אישורים. OpenID Connect (OIDC) בונה על OAuth2 כדי להוסיף אימות זהות. יישומים רבים ללא שרת להשתמש OAuth2 / OIDC זרמי כדי לאפשר למשתמשים להיכנס עם Google, GitHub, או Facebook, ולאחר מכן הנפיק JWT כי לשאת תביעות משתמש ללא תשלום, ללא תשלום, יכול להפחית את הפונקציה ללא תשלום.
כניסה חברתית ו- MFA
כניסה חברתית היא לעתים קרובות הדרך הקלה ביותר להפחית את החיכוך במהלך ההרשמה. הן Google והן GitHub אימות ניתן לשלב באמצעות פלטפורמה SDKs או על ידי יישום קוד אישור OAuth2 לזרום באופן ידני. Pairing כניסה חברתית עם MFA מוסיף שכבה נוספת של אבטחה: גם אם חשבון חברתי הוא נפגע, התוקף לא יכול לגשת ליישום ללא גורם שני.
Token- Based Authentication: The Backbone of Serverless Auth
מכיוון שתפקודים ללא שרת הם חסרי מדינה, אסימונים – במיוחד JSON Web Tokens (JWT) – הם המנגנון המועדף להעברת מידע אימות והרשאה בין שירותים.A JWT הוא אסימוני קומפקטי, כתובת URL-בטוחהמורכב מעמוד ראשי, מטען (קריאות), וחתימה מבטיחה שהסימון לא וטסף עם IdPkens ידוע כדי להביא פונקציות פרטיות, לעתים קרובות.
מבנה JWT ואימות
JWT טיפוסי נראה כמו FLT:0.השכר מכיל תביעות סטנדרטיות (הרשומה, נושא, תפוגה) ותביעות מותאמות אישית (חוקים, הרשאות, מזהה משתמש) בהקשר חסר השרת, פונקציות לאמת את החתימה של אסימונים, התפוגה ונושא לפני שתמשיך.ספקי ענן רבים מציעים מורדים שנבנו מראש או API Gateway JWTizers אשר מטפלות באימות אוטומטי, אני חוזר לפוליסת מדיניות או למנוע גישה.
לדוגמה, כאשר משתמשים ב- Auth0 עם AWS Lambda, אתה מגדיר מחבר מותאם אישית המאמת את הסימון נגד נקודת הסיום של JWKS של Auth0.The Authorizer מייחס את הטענות המוקדות להקשר האירוע, ומאפשר למנדה לקבל החלטות אישורים חד-משמעיות ללא ביצוע אימות שוב.
ken Authentication
יישומים מסורתיים המבוססים על השרת מסתמכים על קבצי קובצי cookie מאוחסנים בשרת.אין שרת, הפעלות הופכות לקשה כי פונקציות הן אפסיות ומדפיפות ל- אפס היו פורצות בחנויות הפעלה מבוססות Token-based אימותים את המדינה ללקוח: הסימון נושא את כל המידע הדרוש, והשרת רק צריך לאמת את החתימה שלו. גישה זו ללא שינוי, אך זה דורש זהירות כדי לתקן אסטרטגיות (למשל, שימוש במקרים קצרים).
מודלים ל- Serverless
לאחר אימותים קובעות זהות, האישור קובע מה זהה יכולה לעשות.שלוש מודלים נפוצים הם בקרת גישה מבוססת רול (RBAC), בקרת גישה מבוססת-בסיס (ABAC), ובקרת גישה מבוססת מדיניות (PBAC).
בקרת גישה מבוססת-תפקיד (RBAC)
ב-RBAC, הרשאות מקובצים לתפקידים (למשל, מנהל, עורך, צופה) משתמשים מוקצה אחד או יותר תפקידים, והמערכת בודקת האם תפקידו של המשתמש מאפשר את הפעולה המבוקשת.RBAC הוא פשוט ליישם: לאחר דהו את JWT, לבדוק אם התביעה של התפקיד מכיל את התפקיד הנדרש עבור נקודת הקצה.זה עובד היטב עבור יישומים עם היררכיה מוגדרת היטב של משתמשים.
בקרת גישה מבוססת-על (ABAC)
ABAC מעריך גישה המבוססת על שילוב של תכונות משתמש (למשל, המחלקה, רמת הנקה), תכונות משאבים (למשל, סיווג מסמך), ותנאים סביבתיים (למשל, זמן של יום, כתובת IP) לדוגמה, משתמש יכול רק להציג מסמכים במחלקה שלהם במהלך שעות עסקיות.ABAC גמיש יותר מאשר RBAC אבל מציג מורכבות.
מדיניות מבוססת גישה (PBAC)
PBAC מרכזי מדיניות אישור מחוץ לקוד היישום.ענן שירותים כמו AWS Identity וניהול Access (IAM) מאפשר לך להגדיר מדיניות JSON המציינת אילו פעולות מותרות על אילו משאבים.מדיניות אלה ניתן להתחבר לתפקידים שנקבעו על ידי הפונקציה או על ידי הפגישה של המשתמש. בשילוב עם Gateway API, אתה יכול לאכוף אישור ללא כתיבת קוד - השער להעריך את המדיניות לפני הפעלתו.
יישום יישומים Serverless Applications
ישנם שלושה שכבות עיקריות שבהן ניתן לאכוף את האישור: בשער ה- API (לפני הפעלת הפונקציה), בתוך מפיץ למודה, או בתוך הפונקציה עצמה.
API Gateway Authorization (Built-in)
ממשק API של AWS, Azure API Management ו-Google Cloud Endpoints תומכים באימות של JWT ובאישור מבוסס מדיניות.לדוגמה, ממשק API של Gateway יכול לאמת JWT מנושא מסוים ולאחר מכן למפות תביעות לנתב הרשאות. גישה זו היא מהירה כי אימות מתרחש בקצה הרשת, צמצום ייעודים ועלות.
שם מקור: Lambda Function Authorizers
מאגדה (לשעבר ידוע כסופרייזר מותאם אישית) הוא פונקציה שמקבלת את הסימון (כעמוד ראש או פרמטר שאילתה) וחוזרת מדיניות IAM כי Gateway לאכוף.The Authorizer יכול לפענח את ה-JWT, להתקשר לשירות חיצוני, או שאילתה מסד נתונים כדי לקבוע את הרשאות המשתמש.
המונחים: inside function
בכמה ארכיטקטורות, במיוחד אלה שלא ציפו על ידי שער API (למשל, פונקציות מונעות אירוע, GraphQL פותרים), אישור חייב לקרות בתוך הפונקציה.תבנית זו כוללת ניתוק JWT ובדיקת הרשאות נגד מסד נתונים או cache. בעוד גמיש, זה יכול להוביל לשכפל לוגיקה על פני פונקציות.
לדוגמה, באמצעות שימוש ב-JWT:1 המודעות האמצעית למודה, באפשרותך ליצור אישור ביניים המשווה את JWT, מאמת תפקידים, או מחזיר תגובה 403 או עובר שליטה על המטפל.זה שומר את קוד הפונקציה נקי ואוכף נקודת אישור אחת.
Best Practices for Secure Serverless Authentication and Authorization
מעבר לבחירת הכלים הנכונים והתבניות, שכבת אות' ללא שרת בטוחה דורשת דבקות בפרקטיקה הטובה ביותר התפעולית.ההמלצות הבאות נמשכות מתיעוד ספק בענן והנחיות OWASP.
שימוש ב-HTTP בכל מקום
כל התקשורת בין לקוחות, שער ה- API, ותפקודי backend יש מוצפנת עם קידוד TLS. ניתן להוסיף ללקוחות ניידים, אך להבטיח כי תעודות מופעלות באופן קבוע.
כוח כוסית
כל פונקציה צריכה רק לקבל את ההרשאה שהיא צריכה. השתמש בתפקידים IAM מוטבעים היטב עבור פונקציות Lambda, ולהימנע מקביעת הרשאות רחבות כמו FLT:2 באופן דומה, מחוקקי שער API צריכים להחזיר מדיניות המגבלה גישה למשאבים ספציפיים.
יישום Multi-Factor Authentication (MFA)
ניתן MFA לכל פעולה רגישה, במיוחד נקודות קצה של ניהול. IdPs כמו Cognito ו- Auth0 תמיכה MFA עם TOTP או SMS. in Serverless, באפשרותך לכפות אימות MFA עבור מסלולים ספציפיים של API על ידי בדיקת תביעה ב JWT (למשל, FLT 3).
Tokens at Every Boundary
אל תניחו כי אסיקן עבר לתפקיד אחד כבר אושר על ידי שירות במעלה הזרם.כל תפקיד צריך לאמת באופן עצמאי את החתימה, התפוגה והנושא של הסימון.ההגנה הזו מונעת נקודה אחת של כישלון.
ניהול סודות באופן מאובטח
לעולם אל תקשה על מקשי API, מפתחות סודיים או אישורי מסד נתונים בקוד פונקציה. השתמש במנהל סודות כמו AWS Secrets Manager, AWS SSM Parameter Store, או HashiCorp Vault. for Local Development, השתמש במשתנהי הסביבה בזהירות ולעולם לא יתחייב אותם לשלוט בגירסה.
רוטט קיז בקביעות
רוטט חתימה על מפתחות, מפתחות API וסודות הלקוחות בלוח זמנים קבוע (למשל, כל 90 יום) סיבוב אוטומטי באמצעות כלי ספק בענן. עבור JWTs, להבטיח כי כתובת המפתח הציבורית (JWKS Endpoint) מעודכנת לפני שהמפתחות הישנות יפוגות כדי למנוע תקלות אימות.
מצגת ו- Monitor Access
כניסה מפורטת עבור יומני גישה של שערי API ו- Lambda CloudWatch. Monitor עבור דפוסים חריגים כגון חזרה 401 שגיאות, מיקומים גיאוגרפיים יוצאי דופן, או ניסיונות לגשת למשאבים לא מורשים. הגדר התראות באמצעות שירותים כגון:AWS CloudWatch או כלי צד שלישי SIEM.
הגבלת ריבית ו Throttling
השתמש בתוכניות השימוש ב- API Gateway, התכוטשות, או WAF (WAF Application Firewall) כדי להגן על נקודות קצה אימות (למשל, /login) מפני התקפות כוח רוטט.תפקוד Lambda יכול גם למנוע עלייה פתאומית של בקשות אקוות מבהירות מכריעות במורד IdPs.
מבחן לוגיקה אות' תורופי
כתוב בדיקות יחידה ובדיקות אינטגרציה עבור קוד האימות וההרשאות שלך.כולל בדיקות עבור אסימונים פגים, אסימוני מום, תביעות חסרות ניסיון לעקוף את האישורים.
עקבו אחרי Security Patches
המערכת האקולוגית ללא השרת מתפתחת במהירות.מנויות אבטחה של ספק הענן וה-IdP שלך. Apply כתמים ל- Lambda לרוץ גרסאות ותלויות (למשל, ספריות JWT, HTTP לקוחות) באופן קבוע.
מסקנה
אימות והרשאה אינם תוספת אופציונלית ביישומים ללא שרת - הם היסוד לבניית אמון עם משתמשים ולהגן על נתונים רגישים. על ידי מינוף ספקי זהות מנוהלים, אימות מבוסס אסימונים, מודלים אישורים שכבתיים, אתה יכול ליצור בסיס מאובטח כי המאזניים כבסיס המשתמש שלך גדל.התבניות המתוארות במאמר זה - צד שלישי, JTWTation, API, Gatewayizers, ו-RBAC הן מוכחות לכל סביבת ייצור ענן.
(ה) זכרו כי אבטחה היא תרגול מתמשך, לא תצורה חד פעמית של זמן אחד.לסקירה כללית של המדיניות שלך, יומני ביקורת, ועדכון תלותיות. עם הגישה הנכונה, אימות השרת וההרשים הופכים למניעים, לא מכשולים, לבניית יישומים מהירים, מאובטחים ודרגתיים.