בדף הזה מוסבר על גבולות גישה של פרטי כניסה, שבעזרתם אפשר לצמצם (להגביל) את ההרשאות שניתנות ב-IAM (הכלי לניהול זהויות והרשאות גישה) לפרטי כניסה עם תוקף קצר.
אפשר להשתמש בגבולות גישה לפרטי כניסה כדי ליצור אסימוני גישה מסוג OAuth 2.0 שמייצגים חשבון שירות, אבל יש להם פחות הרשאות מאשר לחשבון השירות. לדוגמה, אם לקוח שלכם צריך גישה לנתונים של Cloud Storage שבשליטתכם, אתם יכולים לעשות את הפעולות הבאות:
- יוצרים חשבון שירות עם גישה לכל הקטגוריות של Cloud Storage שבבעלותכם.
- יוצרים אסימון גישה מסוג OAuth 2.0 לחשבון השירות.
- להחיל גבולות גישה לפרטי כניסה שמאפשרים גישה רק לקטגוריה שמכילה את הנתונים של הלקוח.
הסבר על גבולות גישה
כדי לצמצם את ההרשאות שניתנות לפרטי כניסה עם תוקף קצר, אתם יכולים להגדיר גבול גישה ורף עליון להרשאות בכל משאב. כך תוכלו ליצור פרטי כניסה עם תוקף קצר ולהחליף אותם בפרטי כניסה חדשים שעונים על גבולות הגישה.
אם אתם צריכים לתת לחשבונות משתמשים קבוצת הרשאות ייחודית לכל סשן, יכול להיות יעיל יותר להשתמש בגבולות גישה לפרטי הכניסה במקום ליצור חשבונות שירות שונים ולתת לכל אחד מהם תפקיד.
המרכיבים של גבולות גישה לפרטי הכניסה
גבולות גישה לפרטי הכניסה הם אובייקט שמכיל רשימה של כללים להגבלת הגישה. כל כלל מכיל את הפרטים הבאים:
- המשאב שהכלל חל עליו.
- הרף העליון של ההרשאות שיהיו לאותו משאב.
- אופציונלי: תנאי שמגביל את ההרשאות עוד יותר. התנאי כולל:
- ביטוי של התנאי ששווה ל-
trueאו ל-false. תינתן גישה רק אם תוצאת הבדיקה של התנאי תהיהtrue. אחרת, הגישה תידחה. - (לא חובה) שם לזיהוי התנאי.
- (לא חובה) תיאור עם מידע נוסף על התנאי.
- ביטוי של התנאי ששווה ל-
כשאתם מגדירים גבולות גישה לפרטי כניסה עם תוקף קצר, תהיה להם גישה רק למשאבים שמוגדרים בגבולות הגישה. לא יהיו להם הרשאות למשאבים אחרים.
גבולות גישה לפרטי כניסה יכולים להכיל עד 10 כללים. אפשר להגדיר גבולות גישה רק פעם אחת לכל פרטי כניסה עם תוקף קצר.
כשגבולות הגישה לפרטי הכניסה מיוצגים בתור אובייקט JSON, הם כוללים את השדות הבאים:
| שדות | |
|---|---|
accessBoundary |
wrapper לגבולות הגישה לפרטי הכניסה. |
accessBoundary.accessBoundaryRules[] |
רשימה של כללים שיחולו על פרטי הכניסה עם התוקף הקצר. |
accessBoundary.accessBoundaryRules[].availablePermissions[] |
רשימה שמגדירה את הרף העליון של ההרשאות שיהיו למשאב.
כל ערך הוא המזהה של תפקיד מוגדר מראש או של תפקיד בהתאמה אישית ב-IAM עם הקידומת |
accessBoundary.accessBoundaryRules[].availableResource |
השם המלא של המשאב בקטגוריה של Cloud Storage שעליו חל הכלל. בפורמט |
accessBoundary.accessBoundaryRules[].availabilityCondition |
אופציונלי. תנאי שמגביל את הזמינות של ההרשאות לאובייקטים ספציפיים ב-Cloud Storage. משתמשים בשדה הזה אם רוצים שההרשאות יהיו רק לאובייקטים מסוימים ולא לכל האובייקטים בקטגוריה של Cloud Storage. |
accessBoundary.accessBoundaryRules[].availabilityCondition.expression |
ביטוי תנאי שמציין את האובייקטים של Cloud Storage שאליהם יינתנו ההרשאות.
במאפיינים של
|
accessBoundary.accessBoundaryRules[].availabilityCondition.title |
אופציונלי. מחרוזת קצרה שמתארת את מטרת התנאי. |
accessBoundary.accessBoundaryRules[].availabilityCondition.description |
אופציונלי. פרטים על מטרת התנאי. |
בחלק דוגמאות לגבולות גישה לפרטי כניסה תוכלו לראות דוגמאות בפורמט JSON.
דוגמאות לגבולות גישה לפרטי כניסה
בחלקים הבאים תוכלו לעיין בדוגמאות נפוצות לשימוש בגבולות גישה לפרטי כניסה. גבולות הגישה מוגדרים לפרטי הכניסה כשמחליפים אסימון גישה מסוג OAuth 2.0 באסימון מצומצם.
הגבלת ההרשאות לקטגוריה
זוהי דוגמה לגבול גישה פשוט. הוא מגביל את הגישה לקטגוריה example-bucket של Cloud Storage, ומגדיר רף עליון להרשאות שניתנות בתפקיד Storage Object Viewer (roles/storage.objectViewer):
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket"
}
]
}
}
הגבלת ההרשאות למספר קטגוריות
זוהי דוגמה לגבול גישה שמכיל כללים למספר קטגוריות.
- בקטגוריה
example-bucket-1של Cloud Storage ניתנות רק ההרשאות של התפקיד Storage Object Viewer (roles/storage.objectViewer). - בקטגוריה
example-bucket-2של Cloud Storage ניתנות רק ההרשאות של התפקיד Storage Object Creator (roles/storage.objectCreator).
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket-1"
},
{
"availablePermissions": [
"inRole:roles/storage.objectCreator"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket-2"
}
]
}
}
הגבלת ההרשאות לאובייקטים ספציפיים
תוכלו גם להשתמש בתנאים של IAM כדי לבחור לאילו אובייקטים ב-Cloud Storage תהיה גישה לחשבון המשתמש. לדוגמה, תוכלו להוסיף תנאי שנותן הרשאות רק לאובייקטים שהשם שלהם מתחיל ב-customer-a:
{ "accessBoundary": { "accessBoundaryRules": [ { "availablePermissions": [ "inRole:roles/storage.objectViewer" ], "availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket", "availabilityCondition": { "expression" : "resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a')" } } ] } }
הגבלת ההרשאות כשיוצרים רשימות אובייקטים
כשיוצרים את רשימת האובייקטים בקטגוריה של Cloud Storage, שולחים קריאה ל-method במשאב של הקטגוריה, ולא במשאב של האובייקט. כתוצאה מכך, אם התנאי נבדק בקשר לבקשה של רשימה, והתנאי מתייחס לשם המשאב, שם המשאב מזהה את הקטגוריה ולא אובייקט בתוך הקטגוריה. לדוגמה, כשיוצרים את רשימת האובייקטים ב-example-bucket, שם המשאב הוא projects/_/buckets/example-bucket.
המוסכמה הזו למתן שמות עלולה להוביל להתנהגות בלתי צפויה כשיוצרים את רשימת האובייקטים.
לדוגמה, נניח שאתם רוצים להגדיר גבולות גישה שנותנים לפרטי הכניסה גישה לאובייקטים ב-example-bucket עם הקידומת customer-a/invoices/.
יכול להיות שתנסו להשתמש בתנאי הבא בגבולות הגישה לפרטי הכניסה:
חלקי: תנאי שבודק רק את שם המשאב
resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/')
התנאי הזה פועל לאובייקטים של קריאה, אבל לא לאובייקטים של יצירת רשימה:
- כשחשבון המשתמש ינסה לקרוא אובייקט ב-
example-bucketעם הקידומתcustomer-a/invoices/, תוצאת הבדיקה של התנאי תהיהtrue. - כשחשבון המשתמש ינסה לרשום אובייקטים עם הקידומת הזו, תוצאת הבדיקה של התנאי תהיה
false. הערך שלresource.nameהואprojects/_/buckets/example-bucket, והוא לא מתחיל ב-projects/_/buckets/example-bucket/objects/customer-a/invoices/.
כדי למנוע את הבעיה הזו, בנוסף לשימוש ב-resource.name.startsWith(), אתם יכולים לבדוק באמצעות התנאי גם מאפיין API בשם storage.googleapis.com/objectListPrefix. המאפיין הזה מכיל את הערך של הפרמטר prefix ששימש לסינון רשימת האובייקטים. כתוצאה מכך, אתם יכולים לכתוב תנאי שמתייחס לערך של הפרמטר prefix.
בדוגמה הבאה תוכלו לראות איך משתמשים במאפיין API בתנאי. היא מאפשרת גם לקרוא וגם ליצור את רשימת האובייקטים ב-example-bucket עם הקידומת customer-a/invoices/:
שלם: תנאי שבודק את שם המשאב ואת הקידומת
resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/') ||
api.getAttribute('storage.googleapis.com/objectListPrefix', '')
.startsWith('customer-a/invoices/')
עכשיו תוכלו להשתמש בתנאי הזה בגבולות גישה לפרטי הכניסה:
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket",
"availabilityCondition": {
"expression":
"resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/') || api.getAttribute('storage.googleapis.com/objectListPrefix', '').startsWith('customer-a/invoices/')"
}
}
]
}
}
המאמרים הבאים
- איך יוצרים פרטי כניסה לטווח קצר עם הרשאות מצומצמות
- בקרת גישה ל-Cloud Storage
- איך בודקים מה ההרשאות בכל אחד מהתפקידים המוגדרים מראש
- תפקידים בהתאמה אישית