ניהול זהויות והרשאות גישה (IAM) מאפשר לכם לתת גישה פרטנית למשאבים ספציפיים ב- Cloud de Confiance by S3NS , ולמנוע גישה לא רצויה למשאבים אחרים. כשמיישמים את העיקרון של הרשאות מינימליות, מעניקים רק את ההרשאות שנדרשות לעומסי העבודה.
באמצעות כללי מדיניות ההרשאה ב-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( מאפשרת לצפות בארגון. המשאבים ברמה הנמוכה ביותר שבהם אפשר להקצות את התפקיד הזה:
|
|
אדמין של מדיניות הארגון( מאפשרת להגדיר את ההגבלות שהארגון רוצה להחיל על ההגדרות של משאבי הענן, באמצעות הגדרת מדיניות הארגון. המשאבים ברמה הנמוכה ביותר שבהם אפשר להקצות את התפקיד הזה:
|
|
דפדפן( גישת קריאה כדי לעיין בהיררכיה של פרויקט, כולל התיקייה, הארגון ומדיניות ההרשאה. התפקיד הזה לא כולל הרשאה לצפות במשאבים בפרויקט. המשאבים ברמה הנמוכה ביותר שבהם אפשר להקצות את התפקיד הזה:
|
|
יצירת תפקידים בהתאמה אישית
בנוסף לתפקידים המוגדרים מראש שמתוארים בנושא הזה, אתם יכולים גם ליצור תפקידים בהתאמה אישית, שהם אוספים של הרשאות שאתם מתאימים לצרכים שלכם. כשיוצרים תפקיד בהתאמה אישית לשימוש עם מנהל המשאבים, חשוב לשים לב לנקודות הבאות:- הרשאות להצגה ברשימה ולקבלת הרשאות, כמו
resourcemanager.projects.get/list, תמיד צריך להעניק כזוג. - אם התפקיד בהתאמה אישית כולל את ההרשאות
folders.listו-folders.get, הוא צריך לכלול גם את ההרשאותprojects.listו-projects.get. - חשוב לדעת שההרשאה
setIamPolicyלמשאבים של ארגון, תיקייה ופרויקט מאפשרת למשתמש להעניק את כל ההרשאות האחרות, ולכן צריך להקצות אותה בזהירות.
הצגת הגישה הקיימת למשאב של הארגון
כדי לראות אילו תפקידים הוקצו למשתמש במשאב של הארגון, צריך לבדוק את מדיניות ההרשאות של המשאב. אפשר לראות את מדיניות ההרשאות של משאב הארגון באמצעות מסוף Cloud de Confiance , Google Cloud CLI או ה-method getIamPolicy().
המסוף
כדי לראות את התפקידים שהוקצו ברמת משאב הארגון באמצעות מסוף Cloud de Confiance :
נכנסים לדף Manage resources במסוף Cloud de Confiance :
בתפריט הנפתח Organization, בוחרים את המשאב הארגוני.
מסמנים את התיבה של משאב הארגון.
בקטע Permissions שבחלונית Info Panel, לוחצים על Expand כדי להרחיב את התפקיד ולהציג את כל החברים שיש להם את התפקיד הזה.
gcloud
מפעילים את הפקודה get-iam-policy כדי לקבל את מדיניות ההרשאות של משאב הארגון:
gcloud organizations get-iam-policy \
ORGANIZATION_ID --format json > \
FILENAME.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="
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
ה-method 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 organizations get-iam-policy \ ORGANIZATION_ID \ --format json > FILENAME.JSONהתוכן של קובץ ה-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 organizations set-iam-policy \
ORGANIZATION_ID 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() מאפשרת לכם להקצות תפקידים למשתמשים על ידי צירוף של מדיניות הרשאות למשאב הארגון. מדיניות ההרשאות היא אוסף של קישורים שמגדירים את ההרשאות .
קריאה-שינוי-כתיבה: דפוס נפוץ לעדכון מטא-נתונים של משאב, כמו מדיניות ההרשאות, שכולל קריאה של המצב הנוכחי, עדכון הנתונים באופן מקומי ואז שליחת הנתונים ששונו לכתיבה. הדפוס הזה עלול לגרום לבעיות אם משתמשים בו בו-זמנית בשני תהליכים בלתי תלויים (או יותר). לדוגמה, אם שני Project Owners מנסים לבצע שינויים מתנגשים במדיניות ההרשאה בו-זמנית, יכול להיות שהשינויים של אחד מהם לא יתבצעו. כדי לפתור את הבעיה הזו, ב-IAM משתמשים במאפיין etag במדיניות ההרשאות. המאפיין הזה בודק אם מדיניות ההרשאה השתנתה מאז הבקשה האחרונה. כששולחים בקשה עם ערך etag, המערכת משווה את הערך של etag בבקשה לערך הקיים של etag שמשויך למדיניות. כך, מדיניות ההרשאות נכתבת רק אם ערכי ה-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 ובשאילתות חיפוש, גם אם הם לא נמצאים במשאב הארגון שהמשתמש בחר. אתם יכולים להשתמש בשירות מדיניות הארגון כדי להגביל את קבוצת הפרויקטים שמוחזרים בשאילתות ובמסוף Cloud de Confiance . כך אפשר להגביל את המשתמשים כך שיוכלו לראות רק פרויקטים בדומיין שלכם.
האילוץ constraints/resourcemanager.accessBoundaries של מדיניות הארגון הוא אילוץ רשימה שנאכף על משאב הארגון. האילוץ מקבל רשימה של מזהי משאבים של הארגון, שמגדירים את קבוצת המשאבים של הארגון שהמשאבים שלהם גלויים למשתמשים בשאילתה או במסוף Cloud de Confiance .
הפרויקטים מופיעים בקטע No organization אם למשתמש אין את ההרשאה resourcemanager.organizations.get במשאב של ארגון ההורה של הפרויקט. כך, פרויקט שלא שייך למשאב הארגון שלכם יכול להיראות כאילו הוא לא משויך לאף משאב ארגון.
אם אתם משתמשים באילוץ resourcemanager.accessBoundaries כדי לא לאפשר משאב ארגוני, פרויקטים ששייכים למשאב הארגוני הזה לא יופיעו בשאילתות או במסוף Cloud de Confiance . אם תאכפו את המגבלה הזו, לא תוכלו לראות פרויקטים שעדיין לא הועברו למשאב ארגוני.
לפני אכיפת האילוץ, מומלץ להעביר למשאב הארגון פרויקטים שנמצאים בתיקייה No organization. במאמר העברת פרויקט מוסבר איך מעבירים פרויקטים למשאב ארגון.
למידע על הגדרת מדיניות ארגון, ראו שימוש באילוצים.
הענקת גישה מותנית
יש תפקידי IAM, כמו אדמין של מדיניות הארגון (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)