הקשחת גישה אל Azure Storage באמצעות Shared Access Signatures
בעיה נפוצה ומרכזית בשירותי הענן השונים היא מיסקונפיגורציה בהנגשת מידע, והבעיה נגרמת ע”י הגדרת הגישה למידע ללא יכולות אבטחה בסיסיות או בצורה לא נכונה, למשל הנגשת קבצים עם Public Access או הנגשת מידע ללא טוקן.
הקשחת גישה אל נתונים בשירות Azure יכולה להיעשות ע”י שכבות שונות, וכאשר מדובר על הקשחת גישה אל Azure Stoage ניתן לבצע הקשחה באמצעות Shared Access Signatures (או בקצרה SAS).
האפשרויות של Shared Access Signatures מאפשרות הקשחה ע”י דלגציה, מאפיינים ופרמטרים שונים, וע”י כך להגן על מידע ותוכן ברמת Azure Storage, האפשרויות של SAS נעשות באמצעות Security Controls עם גרנולריות שקובעת איך ניתן לצרוך את המידע.
למשל, ניתן לקבוע איך אפשר לצרוך את המידע, מהם ההרשאות הניתנות בגישה למידע, מהו תוקף הגישה למידע ומאפייני אבטחה נוספים.
מהו Shared Access Signatures
Shared Access Signatures מספק חתימת גישה משותפת עם מפתח חשבון האחסון מול גורמים שלא מעוניינים לסמוך עליהם, וכאלה שמאפשרים להאציל גישה למשאבי אחסון מסוימים.
הגישה נעשית על ידי הפצת URI של אותו SAS ע”י חתימת גישה משותפת לאותם גורמים חיצונים לפרק זמן מוגדר. Shared Access Signatures יושב מאחורי Rest API.
גישה וצורת Shared Access Signatures
חתימת גישה משותפת יכולה להיות אחת משתי הצורות הבאות:
Ad hoc SAS יכול להיות במצבים כאשר יוצרים Shared Access Signatures מסוג AD-HOC ישנם מאפיינים כגון זמן התחלה, תוקף הרשאות, תוקף הגישה אשר מוטמעים באותו URI.
Service SAS with stored access policy יכול להיות במצבים בהם ישנה מדיניות אשר מוגדרת במשאב עצמו ברמת Container, ולכן יכולה להיות מסוג BLOB או Table או File Share, וניתן להשתמש במדיניות הגישה לאכיפה עבור חתימות גישה משותפת לשירות.
כאשר משייכים SAS למדיניות גישה מאוחסנת, אותו SAS יורש את כל אותם אכיפות, כדוגמת – זמן ההתחלה, זמן התפוגה וההרשאות – המוגדרים עבור מדיניות הגישה המאוחסנת.
סוגי Shared Access Signatures
הקשחה של Shared Access Signatures לטובת Azure Storage נעשית ע”י סוגי SAS ספציפיים:
User Delegation SAS מאפשר לבצע הקשחה באמצעות דגלציה למשתמש מבוסס Azure AD ובנוסף לכך באמצעות דלגצית הרשאות מבוססת SAS. הקשחה מסוג User delegation יכולה להיעשות ברמת BLOB בלבד.
Service SAS מאפשר לבצע הקשחה באמצעות חשבון Storage ועם מפתח יעודי המוצמד לאותו חשבון Storage (ליתר דיוק, מפתח יעודי לחשבון אחסון), והדלגציה נעשית למשאבים מסוימים, כדוגמת: BLOB, או Queue או Table או Azure Files.
Account SAS מבצע דלגציה באמצעות מפתח המוצמד לחשבון אחסון אשר, והדלגצית גישה נעשית מול משאב מול חשבון Storage.
כל הפעולות דלגציה אשר נעשות באמצעות Account SAS או באמצעות אותו Service זמינות ויכולות להיעשות על גבי Account SAS, בנוסף לזה ניתן לבצע דלגציה לפעולות ברמת השירות כדוגמת Get או Set למאפייני השירות, או פעולות דלגציה של קריאה, כתיבה, מחיקה על גבי BLOB או Queues ועל גבי Files.
טיפ: מומלץ לשלב בכל דלגציה אכיפה באמצעות פרטי חשבון מבוססים Azure AD מאשר הגדרה שמתבססת רק על מפתח של אותו חשבון.
איך עובד Shared Access Signatures
חתימת גישה משותפת (SAS) היא URI אשר חתום ומצביע על משאב אחסון אחד או יותר אשר כולל טוקן המכיל סט (או קבוצות של סטים) המכילים פרמטרים ושאילתות מסוימות.
הטוקן מציין כיצד הגורם החיצוני יכול לגשת למשאבים, וזאת ע”י אחד מאותם פרטמטרים שהוגדרו מבעוד מועד. החתימה, בנויה מהפרמטרים של SAS ונחתים עם המפתח ששימש ליצירת אותו SAS.
חתימה זו משמשת את Azure Storage בכדי לאשר גישה למשאב האחסון.
SAS signature מאפשר לחתום בשני הדרכים הבאות:
- באמצעות מפתח של User Delegation המתבססים על פרטי משתמש של Azure AD
- באמצעות מפתח חשבון האחסון (storage key) על גבי Service SAS או Account SAS החתומים באמצעות מפתח חשבון האחסון, וזאת בכדי ליצור SAS שנחתם באמצעות מפתח החשבון. לאפליקציה צריכה להיות גישה למפתח החשבון.
SAS token הוא למעשה מחרוזת שנוצרת בצד הלקוח, למשל באמצעות אחת ממשאבי Azure Storage. הטוקן של SAS אינו עוקב אחר Azure Storage בשום דרך.
ניתן ליצור מספר בלתי מוגבל של טוקנים SAS בצד הלקוח, ולאחר יצירת SAS, ניתן להפיץ את הטוקן ליישומי לקוח הדורשים גישה למשאבים בחשבון האחסון שלך.
כאשר יישום בצד לקוח מספק URI SAS אל Azure Storage כחלק מבקשה, השירות בודק את הפרמטרים והחתימה של SAS בכדי לוודא שהוא תקף לאישור הבקשה, ובמידה והשירות מאמת שהחתימה תקפה – הבקשה אושרה, אחרת הבקשה נדחית עם קוד השגיאה 403.
איך יוצרים Shared Access Signatures
הדרך הפשוטה ביותר ליצור טוקן SAS היא באמצעות פורטל Azure, ובכדי ליצור טוקן SAS, ראשית, ניגש אל חשבון האחסון Azure Storage, הגדרות ומשם ניגש אל חתימת גישה משותפת (SAS).
ישנם הרשאות שונות שניתן להגדיר בטוקן SAS, כדוגמת זמני התחלה לגישה, תוקף זמן לסיום, רמת הרשאות וכן הלאה.
בדוגמה שלפנינו ישנו BLOB ולכן ביצירת טוקן SAS יהיו לנו מספר הרשאות והגדרות בחתימת גישה לאותו משאב ספציפי.