בדף הזה מוסבר איך ליצור רמות גישה באמצעות Access Context Manager ולהחיל אותן על משאבים שמאובטחים על ידי שרת proxy לאימות זהויות (IAP).
סקירה כללית
רמת גישה היא קבוצה של מאפיינים שמוקצים לבקשות על סמך המקור שלהן. באמצעות מידע כמו סוג המכשיר, כתובת ה-IP וזהות המשתמש, אתם יכולים להגדיר איזו רמת גישה להעניק. לדוגמה, אפשר להקצות רמת מהימנות High_Trust לחיבורים מתוך הרשת הארגונית, ורמת מהימנות Medium_Trust למכשירים חיצוניים שמופעלות בהם מערכות הפעלה מאושרות.
אחרי שמגדירים אימות בנקודת קצה (Endpoint), המערכת אוספת מידע על המכשיר ומשתמשת בו ברמות הגישה. הכלי 'בדיקת נקודות קצה' יוצר מלאי של כל המכשירים הארגוניים והאישיים שניגשים למשאבים הארגוניים שלכם.
כדי לאכוף רמת גישה, מוסיפים אותה כתנאי בניהול הזהויות והרשאות הגישה (IAM) במשאב שמאובטח באמצעות IAP. שרת IAP מאפשר להחיל מודל פרטני של בקרת גישה ברמת המשאב, במקום להשתמש בחומות אש ברמת הרשת. לדוגמה, יכול להיות שתציינו שבעוד שמשאבים רבים זמינים לרמת 'בינונית', משאבים מסוימים שרגישים יותר דורשים את הרמה 'גבוהה'.
מידע נוסף זמין במאמר סקירה כללית של Access Context Manager.
לפני שמתחילים
לפני שמתחילים, צריך:
- אבטחת משאב באמצעות IAP.
- מגדירים את אימות נקודות קצה. הערה: צריך להשתמש באפשרות הזו רק אם רוצים להגביל את הגישה למשאבים על סמך מידע על מכשיר המשתמש, כמו סטטוס ההצפנה של האחסון.
ודאו שאחד מהתפקידים הבאים הוקצה לכם בפרויקט.
- אדמין של Access Context Manager
- עורך Access Context Manager
יצירת רמת גישה
כך יוצרים רמת גישה.
בדוגמה הזו, נניח שאתם רוצים ליצור רמת גישה שתאפשר לקבוצה של מבקרים פנימיים לגשת ל-Google Cloud Observability עבור פרויקט. לכל המכשירים של המבקרים מוקצים כתובות IP ברשת משנה בטווח שבין 203.0.113.0 ל-203.0.113.127. כדאי גם לוודא שהמכשירים שלהם מוצפנים. אתם יודעים שלא יוקצו לרשת המשנה הזו מכשירים אחרים מלבד אלה שבהם משתמשים המבקרים.
המסוף
נכנסים לדף Access Context Manager במסוף Google Cloud .
אם מוצגת בקשה לעשות זאת, בוחרים את הארגון.
בחלק העליון של הדף Access Context Manager, לוחצים על New (חדש).
בחלונית New Access Level (רמת גישה חדשה), בקטע Conditions (תנאים), לוחצים על Add attribute (הוספת מאפיין) ואז על Device Policy (מדיניות מכשירים).
לוחצים על התפריט הנפתח הצפנת אחסון ובוחרים באפשרות מוצפן. הערה: הכלל הזה פועל רק אחרי הגדרת אימות בנקודת קצה במכשירים של העובדים.
לוחצים שוב על הוספת מאפיין ובוחרים באפשרות רשתות משנה של כתובות IP.
בתיבה IP Subnetworks (תת-רשתות של כתובות IP), מזינים טווח אחד או יותר של כתובות IPv4 או IPv6 בפורמט של בלוקים CIDR.
בדוגמה הזו, כדי להגביל את הגישה רק לרואי החשבון, מזינים
203.0.113.0/25בתיבה IP Subnetworks.לוחצים על Save.
gcloud
יוצרים קובץ YAML לרמת גישה שכולל טווח אחד או יותר של כתובות IPv4 או IPv6 בפורמט של בלוקים של CIDR.
בדוגמה הזו, כדי להגביל את הגישה רק למבקרים, מזינים את השורות הבאות בקובץ ה-YAML:
- ipSubnetworks: - 203.0.113.0/25 - devicePolicy: allowedEncryptionStatuses - ENCRYPTEDרשימה של מאפייני רמת הגישה ופורמט ה-YAML שלהם מופיעה במאמר בנושא מאפייני רמת הגישה. בדוגמה הזו לקובץ YAML של רמת גישה מופיע קובץ YAML מקיף של כל המאפיינים האפשריים.
שימו לב שהכלל
devicePolicyפועל רק אחרי שמגדירים אימות בנקודת קצה במכשירים של העובדים.שומרים את הקובץ. בדוגמה הזו, שם הקובץ הוא CONDITIONS.yaml.
יוצרים את רמת הגישה.
gcloud access-context-manager levels create NAME \ --title TITLE \ --basic-level-spec CONDITIONS.yaml \ --policy=POLICY_NAME
כאשר:
NAME הוא השם הייחודי של רמת הגישה. הוא חייב להתחיל באות ולהכיל רק אותיות, מספרים וקווים תחתונים.
TITLE הוא שם שקריא לבני אדם. הוא חייב להיות ייחודי למדיניות.
POLICY_NAME הוא השם של מדיניות הגישה של הארגון.
הפלט אמור להיראות כך:
Create request issued for: NAME Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done. Created level NAME.
API
יוצרים גוף בקשה ליצירת משאב
AccessLevelשכולל טווח אחד או יותר של כתובות IPv4 או IPv6 בפורמט של בלוקים CIDR ומדיניות מכשירים שדורשת אחסון מוצפן.בדוגמה הזו, כדי להגביל את הגישה רק לרואי החשבון, צריך להזין את הטקסט הבא בגוף הבקשה:
{ "name": "NAME", "title": "TITLE", "basic": { "conditions": [ { "ipSubnetworks": [ "203.0.113.0/25" ] }, { "devicePolicy": [ "allowedEncryptionStatuses": [ "ENCRYPTED" ] ] } ] } }
כאשר:
NAME הוא השם הייחודי של רמת הגישה. הוא חייב להתחיל באות ולהכיל רק אותיות, מספרים וקווים תחתונים.
TITLE הוא שם שקריא לבני אדם. הוא חייב להיות ייחודי למדיניות.
יוצרים את רמת הגישה באמצעות קריאה ל-
accessLevels.create.POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevelsכאשר:
- POLICY_NAME הוא השם של מדיניות הגישה של הארגון.
החלת רמת גישה
למשאב שמאובטח באמצעות IAP יש מדיניות IAM שמקשרת את תפקיד ה-IAP למשאב.
כדי להגביל עוד יותר את הגישה למשאבים, אפשר להוסיף קישור מותנה ב-IAM למדיניות IAM. הגישה למשאבים תוגבל על סמך מאפייני הבקשה. מאפייני הבקשות האלה כוללים:
- רמות גישה
- מארח ונתיב של כתובת URL
- תאריך ושעה
חשוב לזכור שהערכים של הבקשה שמושווים לערכים request.host ו-request.path שצוינו בקישור תנאי של IAM חייבים להיות זהים. לדוגמה, אם מגבילים את הגישה לנתיבים שמתחילים ב-/internal admin, אפשר לעקוף את ההגבלה על ידי מעבר אל /internal%20admin. מידע נוסף זמין במאמר בנושא שימוש בתנאים של שם המארח ונתיב.
כשמחילים רמות גישה על משאב IAP, חשוב לוודא שרמות הגישה הן ברמת הארגון ולא ברמת הפרויקט או התיקייה. כדי להוסיף את רמת הגישה שלכם למשאב שמאובטח באמצעות IAP, צריך לעדכן את מדיניות ה-IAM שלו.
המסוף
עוברים אל דף ה-IAP.
מסמנים את התיבה לצד המשאבים שרוצים לעדכן את הרשאות ה-IAM שלהם.
בצד שמאל, בחלונית המידע, לוחצים על הוספת ישות מרכזית.
בתיבה New principal, מזינים את חשבונות המשתמשים שרוצים להקצות להם תפקיד.
ברשימה הנפתחת Select a role, בוחרים בתפקיד IAP-secured Web App User.
כדי לציין רמות גישה קיימות, בוחרים אותן מהרשימה הנפתחת רמות גישה. כדי לראות את רמות הגישה הקיימות, צריך לבחור את התפקיד משתמש באפליקציית אינטרנט באבטחת IAP ולקבל הרשאות ברמת הארגון.
כשמחילים כמה רמות גישה על משאב, המשתמשים מקבלים גישה למשאב אם הם עומדים בתנאים שצוינו לפחות באחת מרמות הגישה שנבחרו (זהו OR לוגי של רמות הגישה ברשימה). אם רוצים שהמשתמשים יעמדו בתנאים של יותר מרמת גישה אחת (פעולת AND לוגית של רמות גישה), צריך ליצור רמת גישה שמכילה כמה רמות גישה.
אם רוצים להוסיף עוד תפקידים לחשבונות הראשיים, לוחצים על Add another role.
כשמסיימים להוסיף תפקידים, לוחצים על Save.
gcloud
בשלב הזה, אפשר להשתמש ב-CLI של gcloud רק כדי להגדיר קשירות מותנות ברמת הפרויקט.
כדי להגדיר קשירות מותנות, עורכים את הקובץ policy.yaml של הפרויקט:
פותחים את מדיניות IAM של האפליקציה באמצעות פקודת gcloud הבאה:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
עורכים את הקובץ
policy.yamlומציינים בו את הפרטים הבאים:- המשתמשים והקבוצות שרוצים להחיל עליהם את תנאי ה-IAM.
- תפקיד
iap.httpsResourceAccessorכדי לתת להם גישה למשאבים. - תנאי IAM עם רמת הגישה.
התנאי הבא מעניק גישה למשתמש ולקבוצה אם הדרישות של רמת הגישה ACCESS_LEVEL_NAME מתקיימות ונתיב כתובת ה-URL של המשאב מתחיל ב-
/.... - members: - group:EXAMPLE_GROUP@GOOGLE.COM - user:EXAMPLE_USER@GOOGLE.COM role: roles/iap.httpsResourceAccessor condition: expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/") title: CONDITION_TITLE ...
מקשרים את המדיניות לאפליקציה באמצעות הפקודה
set-iam-policy.none gcloud projects set-iam-policy PROJECT_ID policy.yaml
API
כדי לערוך את קובץ policy.json של האפליקציה, פועלים לפי התהליך שמתאים לסוג האפליקציה. מידע נוסף על שימוש בממשק ה-API של IAM לניהול מדיניות גישה זמין במאמר ניהול גישה למשאבים שמאובטחים באמצעות IAP.
לפני שמבצעים את השלבים של ממשק ה-API הספציפי לאפליקציה, צריך לייצא את המשתנים הבאים:
export PROJECT_NUM=PROJECT_NUMBER export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
App Engine
מייצאים את המשתנים הבאים של App Engine:
# The APP_ID is usually the project ID export GAE_APP_ID=APP_ID export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}
מקבלים את מדיניות ה-IAM של אפליקציית App Engine באמצעות השיטה
getIamPolicy. ביט הנתונים הריק בסוף הופך את הבקשהcurlל-POST במקום ל-GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
מוסיפים את הקישור המותנה של IAM לקובץ JSON של מדיניות ה-IAM. זו דוגמה לקובץ
policy.jsonשעבר עריכה, שבו התפקידiap.httpsResourceAccessorמשויך לשני משתמשים, וכך ניתנת להם גישה למשאבים המאובטחים של Chrome Enterprise Premium. נוסף תנאי IAM כדי להעניק להם גישה למשאבים רק אם הם עומדים בדרישה של רמת הגישה ACCESS_LEVEL_NAME ונתיב כתובת ה-URL של המשאב מתחיל ב-/. יכול להיות רק תנאי אחד לכל קשירה.
קובץ לדוגמה של policy.json{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group:EXAMPLE_GROUP@GOOGLE.COM", "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
מגדירים את קובץ
policy.jsonהחדש באמצעות ה-methodsetIamPolicy.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
שירותים וגרסאות של App Engine
אפשר גם לעדכן את מדיניות IAM של שירות App Engine, את כל הגרסאות או גרסה ספציפית של שירות. כדי לעשות את זה לגרסה ספציפית של שירות:
- מייצאים את המשתנים הנוספים הבאים.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- מעדכנים את המשתנה GAE_BASE_URL שיוצא.
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
- אפשר לקבל ולהגדיר את מדיניות ה-IAM של הגרסה באמצעות הפקודות
getIamPolicyו-setIamPolicy.
GKE ו-Compute Engine
מייצאים את מזהה הפרויקט של שירות לקצה העורפי.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
מקבלים את מדיניות ה-IAM של אפליקציית Compute Engine באמצעות ה-method
getIamPolicy. ביט הנתונים הריק בסוף הופך את הבקשהcurlל-POST במקום ל-GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''
מוסיפים את הקישור המותנה של IAM לקובץ JSON של מדיניות ה-IAM. זו דוגמה לקובץ
policy.jsonשעבר עריכה, שבו התפקידiap.httpsResourceAccessorמשויך לשני משתמשים, וכך ניתנת להם גישה למשאבים המאובטחים של Chrome Enterprise Premium. נוסף תנאי IAM כדי להעניק להם גישה למשאבים רק אם הדרישה של רמת הגישה ACCESS_LEVEL_NAME מתקיימת ונתיב ה-URL של המשאב מתחיל ב-/. יכול להיות רק תנאי אחד לכל קשירה.
קובץ לדוגמה של policy.json{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group":EXAMPLE_GROUP@GOOGLE.COM, "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
מגדירים את קובץ
policy.jsonהחדש באמצעות ה-methodsetIamPolicy.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \ -d @${JSON_NEW_POLICY}