Cloud de Confiance by S3NS כולל את הממשק לניהול הזהויות והרשאות הגישה (IAM), שבאמצעותו אתם יכולים לתת גישה פרטנית יותר למשאבים ספציפיים ב- Cloud de Confiance ולמנוע גישה לא רצויה למשאבים אחרים. בעזרת IAM תוכלו לשמור על עקרון האבטחה של הרשאות מינימליות, וכך לתת רק למי שצריך את רמת הגישה שצריך למשאבים השונים.
באמצעות כללי המדיניות ב-IAM אתם יכולים להחליט למי (משתמשים) יהיו הרשאות גישה (תפקידים) למשאבים מסוימים. התפקידים שאתם מקצים למשתמשים באמצעות כללי המדיניות קובעים אילו הרשאות יהיו להם.
בדף הזה נסביר אילו תפקידים של IAM זמינים במשאב הארגון, ואיך ליצור ולנהל כללי מדיניות הרשאה למשאבי ארגון באמצעות Cloud Resource Manager API. מידע נוסף זמין במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
הרשאות ותפקידים
כדי לשלוט בגישה למשאבים, Cloud de Confiance by S3NS דורש שלחשבונות שמבצעים בקשות API יהיו תפקידים מתאימים ב-IAM. תפקידי IAM כוללים הרשאות שמאפשרות למשתמשים לבצע פעולות ספציפיות במשאביCloud de Confiance . לדוגמה, ההרשאה resourcemanager.organizations.get מאפשרת למשתמש לקבל פרטים על משאב הארגון שלו.
המשתמשים לא מקבלים הרשאות בצורה ישירה. כדי להעניק להם הרשאות, צריך להקצות להם תפקידים שמוגדרת להם הרשאה אחת או יותר.
אפשר להקצות תפקיד אחד או יותר באותו משאב.
שימוש בתפקידים מוגדרים מראש
בטבלה הבאה מפורטים: 1) התפקידים שאתם יכולים להעניק כדי לתת גישה למאפיינים של משאב ארגוני; 2) התיאור של התפקידים; ו-3) ההרשאות שמוגדרות להם.
| תפקיד | הרשאות |
|---|---|
Organization Administrator( גישה לניהול מדיניות IAM ולצפייה במדיניות הארגון עבור ארגונים, תיקיות ופרויקטים. המשאבים ברמה הנמוכה ביותר שבהם אפשר להעניק את התפקיד הזה:
|
|
Organization Viewer( גישה לצפייה בארגון. המשאבים ברמה הנמוכה ביותר שבהם אפשר להעניק את התפקיד הזה:
|
|
Organization Policy Administrator( ההרשאה מאפשרת להגדיר אילו הגבלות הארגון רוצה להחיל על התצורה של משאבי הענן באמצעות הגדרת מדיניות הארגון. המשאבים ברמה הנמוכה ביותר שבהם אפשר להעניק את התפקיד הזה:
|
|
דפדפן( גישת קריאה כדי לעיין בהיררכיה של פרויקט, כולל התיקייה, הארגון ומדיניות ההרשאה. התפקיד הזה לא כולל הרשאה לצפייה במשאבים בפרויקט. המשאבים ברמה הנמוכה ביותר שבהם אפשר להעניק את התפקיד הזה:
|
|
יצירת תפקידים בהתאמה אישית
בנוסף לתפקידים המוגדרים מראש שמתוארים בנושא הזה, אפשר גם ליצור תפקידים בהתאמה אישית שהם אוספים של הרשאות שמותאמות לצרכים שלכם. כשיוצרים תפקיד בהתאמה אישית לשימוש ב-מנהל המשאבים, חשוב לשים לב לנקודות הבאות:- הרשאות כמו
resourcemanager.projects.get/list, צריך תמיד לתת כזוג. - אם התפקיד בהתאמה אישית כולל את ההרשאות
folders.listו-folders.get, הוא צריך לכלול גם את ההרשאותprojects.listו-projects.get. - חשוב לדעת שההרשאה
setIamPolicyלמשאבי ארגון, תיקייה ופרויקט מאפשרת למשתמש להעניק את כל ההרשאות האחרות, ולכן צריך להקצות אותה בזהירות.
צפייה בגישה קיימת למשאב ארגוני
כדי לראות אילו תפקידים הוקצו למשתמש במשאב ארגוני, צריך לבדוק את מדיניות ההרשאות של המשאב. אפשר לצפות במדיניות ההרשאה של משאב ארגון באמצעות מסוף Google Cloud, Google Cloud CLI או ה-method getIamPolicy(). Cloud de Confiance
המסוף
כדי לראות את התפקידים שהוקצו ברמת משאב הארגון באמצעות המסוף Cloud de Confiance :
נכנסים לדף Manage resources במסוף Cloud de Confiance :
בתפריט הנפתח Organization (ארגון), בוחרים את המשאב הארגוני.
מסמנים את התיבה שלצד משאב הארגון.
בחלונית Info Panel, בקטע Permissions, לוחצים על Expand כדי להציג את כל החברים שיש להם את התפקיד הזה.
gcloud
כדי לקבל את מדיניות ההרשאות של משאב הארגון, משתמשים בפקודה get-iam-policy:
gcloud alpha organizations get-iam-policy <var>ORGANIZATION_ID</var> --format json >
<var>FILENAME.JSON</var>
הפקודה מחזירה את מדיניות ההרשאה, שנראית כך:
bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
קטע הקוד הבא מחזיר את מדיניות ההרשאות של משאב הארגון https://cloudresourcemanager.googleapis.com/v3/organizations/12345.
בקשה:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
תשובה:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
השיטה getIamPolicy() מאפשרת לקבל מדיניות הרשאות שכבר הוגדרה.
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)
הענקת גישה למשאב של ארגון
אדמינים ארגוניים יכולים להקצות תפקידי IAM לחברי הצוות כדי לאפשר להם לגשת למשאבים ולממשקי API של הארגון. אפשר להעניק תפקידים לכתובת האימייל בחשבון משתמש, לקבוצת Google, לחשבון שירות או לדומיין G Suite. אפשר להשתמש במסוף Cloud de Confiance , ב-CLI של gcloud או ב-method setIamPolicy() כדי להקצות תפקידים.
המסוף
כדי להגדיר בקרת גישה ברמת משאב הארגון באמצעות מסוף Cloud de Confiance :
נכנסים לדף Manage resources במסוף Cloud de Confiance :
בתפריט הנפתח Organization (ארגון), בוחרים את המשאב הארגוני.
מסמנים את התיבה שלצד משאב הארגון. אם אין לכם משאב מסוג תיקייה, לא תוכלו לראות את משאב הארגון. כדי להמשיך, אפשר לעיין בהוראות למתן תפקידים בדף IAM.
אם החלונית Info Panel שבצד ימין מוסתרת, לוחצים על Show Info Panel בפינה הימנית העליונה.
בחלונית Info Panel, בכרטיסייה Permissions לוחצים על Add Member.
בשדה New members מזינים את חברי הצוות שרוצים להוסיף. אפשר לציין כתובת האימייל בחשבון משתמש, קבוצה ב-Google, חשבון שירות או דומיין G Suite.
בתפריט הנפתח Select a role, בוחרים את התפקיד שרוצים להקצות לחברי הצוות.
לוחצים על הוספה.
gcloud
כדי להגדיר את מדיניות ההרשאות של משאב ארגוני באמצעות הפקודה gcloud:
כדי לקבל את מדיניות ההרשאה של משאב הארגון, משתמשים בפקודה
get-iam-policyומייצאים את המדיניות לקובץ JSON:gcloud alpha organizations get-iam-policy <var>ORGANIZATION_ID</var> --format json > <var>FILENAME.JSON</var>התוכן של קובץ ה-JSON נראה בערך כך:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser2@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- פותחים את קובץ ה-JSON בכלי לעריכת טקסט. לאחר מכן, מוסיפים רשומה חדשה למערך
bindingsכדי להגדיר אדמין של הארגון. לדוגמה, כדי להפוך אתanotheradmin@gcp-test.comלאדמין של הארגון, משנים את הדוגמה הקודמת כך:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
"user:anotheradmin@gcp-test.com"
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser20@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- כדי לעדכן את מדיניות ההרשאות של משאב הארגון, מריצים את הפקודה הבאה:
gcloud alpha organizations set-iam-policy <var>ORGANIZATION_ID</var> policy.json
API
בקשה:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
תשובה:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
השיטה setIamPolicy() מאפשרת להעניק תפקידים למשתמשים על ידי צירוף מדיניות הרשאות למשאב הארגון. מדיניות ההרשאה היא אוסף של קישורים שמגדירים .
קריאה-שינוי-כתיבה: דפוס נפוץ לעדכון מטא-נתונים של משאב, כמו מדיניות ההרשאות, כולל קריאת המצב הנוכחי שלו, עדכון הנתונים באופן מקומי ואז שליחת הנתונים ששונו לכתיבה. הדפוס הזה עלול לגרום לבעיות אם משתמשים בו בו-זמנית בשני תהליכים בלתי תלויים (או יותר). לדוגמה, אם שני בעלים של פרויקט ינסו לבצע שינויים שונים במדיניות ההרשאות בו-זמנית, יכול להיות שהשינויים של אחד מהם לא יתעדכנו. IAM פותר את הבעיה הזו באמצעות המאפיין etag במדיניות ההרשאות. המאפיין הזה משמש כדי לבדוק אם מדיניות ההרשאה השתנתה מאז הבקשה האחרונה. כששולחים בקשה עם ערך etag, המערכת משווה את הערך הזה לערך הקיים שמשויך למדיניות.etagetag מדיניות ההרשאות תיכתב רק אם הערכים של etag תואמים.
כשמעדכנים מדיניות הרשאות, קודם צריך לטעון אותה באמצעות getIamPolicy(), לבצע את השינויים ואז לכתוב את מדיניות ההרשאות המעודכנת באמצעות setIamPolicy(). כשמגדירים את מדיניות ההרשאות, צריך להשתמש בערך etag רק אם מדיניות ההרשאות התואמת ב-GetPolicyResponse מכילה ערך etag.
Python
השיטה
setIamPolicy()
מאפשרת לכם לצרף מדיניות הרשאה למשאב. ה-method setIamPolicy מקבלת SetIamPolicyRequest, שמכיל מדיניות הרשאות להגדרה ואת המשאב שאליו מצורפת מדיניות ההרשאות. היא מחזירה את מדיניות ההרשאה שנוצרה. מומלץ לפעול לפי התבנית קריאה-שינוי-כתיבה כשמעדכנים מדיניות הרשאה באמצעות setIamPolicy().
הנה קוד לדוגמה להגדרת מדיניות הרשאות למשאב של ארגון:
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
admin_binding = next(
(binding
for binding in policy['bindings']
if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
None)
# Add an empty Organization Administrator binding if not present.
if not admin_binding:
admin_binding = {
'role': 'roles/resourcemanager.organizationAdmin',
'members': []
}
policy['bindings'].append(admin_binding)
# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'policy': policy
}).execute()
print json.dumps(policy, indent=2)
הגבלת החשיפה של הפרויקט למשתמשים
המשתמשים יכולים לראות את כל הפרויקטים שיש להם גישה אליהם במסוף Cloud de Confiance ובשאילתות חיפוש, בלי קשר לשאלה אם הם נמצאים במשאב הארגון שנבחר על ידי המשתמש או לא. אתם יכולים להשתמש בשירות Organization Policy כדי להגביל את קבוצת הפרויקטים שמוחזרים בשאילתות ובמסוף Cloud de Confiance . ההגדרה הזו מאפשרת להגביל את המשתמשים כך שיוכלו לראות רק פרויקטים בדומיין שלכם.
האילוץ Organization Policy constraints/resourcemanager.accessBoundaries הוא אילוץ רשימה שנאכף במשאב הארגון. האילוץ מקבל רשימה של מזהי משאבים של ארגון, שמגדירים את קבוצת משאבי הארגון שמשאביהם גלויים למשתמשים בשאילתה או במסוף Cloud de Confiance .
פרויקטים מופיעים בקטע No organization אם למשתמש אין את ההרשאה resourcemanager.organizations.get במשאב הארגון ההורה של הפרויקט. כך יכול לקרות שפרויקט שלא משויך למשאב ארגוני יופיע כאילו הוא לא משויך לאף משאב ארגוני.
אם משתמשים באילוץ resourcemanager.accessBoundaries כדי לאסור משאב ארגוני, פרויקטים ששייכים למשאב הארגוני הזה לא יופיעו בשאילתות או במסוף Cloud de Confiance . אם אוכפים את האילוץ הזה, לא רואים פרויקטים שעדיין לא הועברו למשאב ארגון.
מומלץ להעביר פרויקטים שנמצאים מתחת ל-No organization למשאב הארגון לפני שמחילים את האילוץ הזה. במאמר העברת פרויקט מוסבר איך להעביר פרויקטים למשאב ארגון.
מידע על הגדרת מדיניות הארגון מופיע במאמר שימוש באילוצים.
הענקת גישה מותנית
תפקידי IAM מסוימים, כמו Organization Policy Administrator (אדמין מדיניות ארגונית) (roles/orgpolicy.policyAdmin), אפשר להעניק רק למשאב ארגוני.
בגלל העברת מדיניות בירושה, כל המשאבים בארגון מקבלים בדרך כלל את התפקיד הזה בירושה.
כדי לקבל שליטה רבה יותר על המשאבים שעליהם מוענק התפקיד, אפשר להשתמש בתנאים ב-IAM. שימוש בתגים עם תנאים מאפשר לתת גישה למשאבים רק אם יש להם תג ספציפי. לדוגמה, מדיניות ההרשאה הבאה מעניקה את התפקיד 'אדמין של מדיניות הארגון' רק למשאבים עם התג environment: dev, ולא מעניקה אותו למשאבים אחרים:
{
"bindings": [
{
"members": [
"{dynamic print variables.examples.principal_group_api}"
],
"role": "roles/orgpolicy.policyAdmin",
"condition": {
"title": "Dev_environment_only",
"description": "Only granted in the development environment",
"expression":
"resource.matchTag('123456789012/env', 'dev')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
בדיקת ההרשאות
אפשר לבדוק הרשאות IAM של משתמש במשאב ארגוני באמצעות ה-method testIamPermissions(). השיטה הזו מקבלת את כתובת ה-URL של המשאב ואת סדרת ההרשאות לבדיקה. היא מחזירה את קבוצת המשנה של ההרשאות שהמשתמש יכול לגשת אליהן.
בדרך כלל לא מפעילים את testIamPermissions() אם משתמשים במסוףCloud de Confiance ישירות כדי לנהל הרשאות. testIamPermissions() מיועד לשילוב עם תוכנה קניינית, כמו ממשק משתמש גרפי בהתאמה אישית. לדוגמה, במסוף Cloud de Confiance משתמשים ב-testIamPermissions() באופן פנימי כדי לקבוע איזה ממשק משתמש יהיה זמין למשתמש שמחובר לחשבון.
API
אפשר להשתמש ב-method testIamPermissions() כדי לבדוק אילו מההרשאות שצוינו יש למבצע הקריאה החוזרת במשאב שצוין. ה-method הזה מקבל שם משאב וסדרת הרשאות כפרמטרים, ומחזיר את קבוצת המשנה של ההרשאות שיש למשתמש ששלח את הקריאה.
הנה קוד לדוגמה לבדיקת הרשאות למשאב של ארגון:
Request:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions
{
"permissions": [
"resourcemanager.organizations.get",
"resourcemanager.organizations.setIamPolicy"
]
}
Response:
{
"permissions": [
"resourcemanager.organizations.get"
]
}
Python
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
response = crm.organizations().testIamPermissions(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'permissions': [
'resourcemanager.organizations.setIamPolicy',
'resourcemanager.projects.patch'
]
}).execute()
print json.dumps(response, indent=2)