Memory Bank מאפשר לכם לשלוט בגישה לזיכרונות ולמשאבי גרסאות זיכרון על סמך מאפייני ההיקף שלהם. אתם יכולים להשתמש בתנאים של IAM כדי להגדיר אמצעי בקרת גישה מפורטים, כמו הגבלת הגישה למשתמשים או לקבוצות ספציפיים על סמך קריטריונים שמוגדרים ב-Common Expression Language.
במאמר הזה מוסבר איך ליצור ולהחיל מדיניות של גישה מותנית לזיכרונות ולגרסאות בפרויקט.
למידע כללי על הרשאות, ראו בדיקת התפקידים הנדרשים.
סקירה כללית
תנאי IAM מאפשרים לתת גישה למשאבי זיכרון ולגרסאות זיכרון רק אם מתקיימים תנאים ספציפיים. אתם יכולים לשלוט בגישה לזיכרונות על סמך השדה scope במשאב זיכרון באמצעות מאפיין ה-API "aiplatform.googleapis.com/memoryScope" עם ביטוי שנכתב ב-Common Expression Language. ההיקף הוא מילון שרירותי שמסופק כשיוצרים או מייצרים זיכרונות, כמו {'user_id': '123'}, ומאפשר לארגן את הזיכרונות כך שכל אחד מהם ישתייך לקבוצה מסוימת.
כללי המדיניות המותנים האלה של ניהול זהויות והרשאות גישה (IAM) נוצרים ברמת הפרויקט וחלים על כל הזיכרונות בפרויקט. אפשר להחיל תנאי IAM על כל סוגי החשבונות הראשיים, כולל משתמשים בפרויקט וחשבונות שירות.
תנאי IAM שימושיים למתן הרשאות לניהול זהויות והרשאות גישה (IAM) למשאבים רבים שקשורים ל-Memory Bank בו-זמנית, כולל משאבים שעדיין לא קיימים. אתם יכולים להגביל את הגישה לזיכרונות ולגרסאות הקודמות כדי שמשתמש יוכל לגשת רק למידע שלו, או כדי שמפתחים יוכלו לצפות רק במשאבים מסוימים ב-Memory Bank בלי להעניק להם הרשאות מיוחדות.
לפני שמתחילים
כדי להגדיר כללי מדיניות מותנים של IAM לזיכרונות ולגרסאות של זיכרונות:
- בדיקת התנאים ב-IAM: מומלץ לקרוא את הסקירה הכללית על התנאים ב-IAM.
- קובעים את התפקידים הנדרשים: כדי להבטיח את העיקרון של הרשאות מינימליות, צריך לזהות אילו תפקידי IAM מיוחדים של Memory Bank מתאימים לתרחיש השימוש שלכם.
-
זיהוי חשבונות המשתמשים המושפעים: זיהוי המשתמשים בארגון שצריכים לקבל הרשאות מסוימות. לדוגמה:
- האם מפתחים יכולים לראות את כל הזיכרונות.
- האם אדמינים של פרויקטים יכולים לראות את כל הזיכרונות.
- האם זהות סוכן מסוימת יכולה לגשת רק לזיכרונות מסוימים.
-
הקצאת תפקידי IAM: מוודאים שיש לכם את התפקידים הנדרשים שכוללים את ההרשאות שאתם צריכים כדי לבצע את המשימות שמתוארות במאמר הזה.
כדי לקבל את ההרשאות שדרושות בשביל להחיל תנאי IAM על משאבי Agent Platform Memory Bank, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- לפרויקטים: אדמין IAM של פרויקט (`roles/resourcemanager.projectIamAdmin`)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה מכילים את ההרשאות שנדרשות כדי להחיל תנאי IAM על משאבי Agent Platform Memory Bank. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להחיל תנאי IAM על משאבים של Agent Platform Memory Bank, נדרשות ההרשאות הבאות:
- הגדרת גישת IAM מותנית ברמת הפרויקט: `resourcemanager.projects.setIamPolicy`
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אם אתם מתכננים להשתמש בתנאי IAM בארגון, אתם צריכים גם הרשאות לניהול מדיניות הארגון.
יצירת גישה מותנית לזיכרונות
כדי להעניק גישה מותנית לזיכרונות, מוסיפים תנאי לקישור של מדיניות IAM ברמת הפרויקט. התנאי כולל את הפונקציה api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) כדי לבדוק את מפת ההיקף של משאב זיכרון. כשיוצרים או מייצרים זיכרון, מגדירים את ההיקף שלו.
לקבלת מדריך מפורט ליצירת מדיניות IAM עם תנאים, אפשר לעיין במאמר תנאים במדיניות הרשאות.
כדי לתת תפקיד לחשבון ראשי, תוכלו לבצע את הפעולות הבאות:
המסוף
נכנסים לדף IAM במסוף Cloud de Confiance .
בוחרים את הפרויקט הרצוי.
בוחרים חשבון משתמש כדי להקצות לו תפקיד:
כדי להעניק תפקיד לישות מורשית שכבר יש לה תפקידים אחרים במשאב, מוצאים שורה שמכילה את הישות המורשית, לוחצים על Edit principal בשורה הזו, ולוחצים על Add another role.
כדי להקצות תפקיד לסוכן שירות, מסמנים את תיבת הסימון Include S3NS-provided role grants כדי לראות את כתובת האימייל שלו.
כדי להקצות תפקיד לחשבון משתמש שאין לו תפקידים קיימים במשאב, לוחצים על Grant Access ומזינים מזהה של חשבון משתמש, למשל
//iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.comאו//iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com.
בוחרים את התפקיד שרוצים להקצות מהרשימה הנפתחת. בהתאם לנוהלי האבטחה המומלצים, כדאי לבחור תפקיד שמכיל רק את ההרשאות שהחשבון הראשי צריך. אפשר לבחור אחד מתפקידי ה-IAM המיוחדים של Memory Bank.
מוסיפים תנאי לתפקיד, באמצעות
aiplatform.googleapis.com/memoryScopeכמאפיין ה-API. בדוגמאות שלמטה מפורטים כמה משפטי תנאי אפשריים.לוחצים על Save. חשבון המשתמש מקבל את התפקיד במשאב.
gcloud
-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
-
הפקודה
add-iam-policy-bindingמאפשרת להקצות תפקיד לחשבון משתמש במהירות.לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . מזהי פרויקטים מכילים אותיות וספרות, למשלmy-project. -
PRINCIPAL: מזהה של חשבון המשתמש או המנוי, שבדרך כלל נראה כך:PRINCIPAL_TYPE:ID. לדוגמה,principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.comאוprincipalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. רשימה מלאה של הערכים שיכולים להיות ל-PRINCIPALמופיעה במאמר מזהים של חשבונות משתמשים. -
ROLE_NAME: שם התפקיד שרוצים לבטל. צריך להשתמש באחד מהפורמטים הבאים:- תפקידים מוגדרים מראש:
roles/aiplatform.IDENTIFIER - תפקידים בהתאמה אישית ברמת הפרויקט:
projects/PROJECT_ID/roles/IDENTIFIER
בוחרים את התפקיד שרוצים להקצות מהרשימה הנפתחת. בהתאם לנוהלי האבטחה המומלצים, כדאי לבחור תפקיד שמכיל רק את ההרשאות שהחשבון הראשי צריך. אפשר לבחור אחד מתפקידי ה-IAM המיוחדים של Memory Bank.
- תפקידים מוגדרים מראש:
-
CONDITION: מוסיפים תנאי לתפקיד באמצעותaiplatform.googleapis.com/memoryScopeכמאפיין ה-API. בדוגמאות שבהמשך מופיעות כמה הצהרות תנאי אפשריות.
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL --role=ROLE_NAME \ --condition=CONDITION
Windows (PowerShell)
gcloud projects add-iam-policy-binding PROJECT_ID ` --member=PRINCIPAL --role=ROLE_NAME ` --condition=CONDITION
Windows (cmd.exe)
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member=PRINCIPAL --role=ROLE_NAME ^ --condition=CONDITION
התשובה תכלול את המדיניות המעודכנת של IAM.
-
Terraform
במאמר פקודות בסיסיות ב-Terraform מוסבר איך מוסיפים או מסירים הגדרות אישיות ב-Terraform. למידע נוסף, ראו את מאמרי העזרה לספקים של Terraform.
אם אתם משתמשים ב-Terraform כדי להגדיר את מדיניות ה-IAM, אתם יכולים לכלול תנאי במשאב google_project_iam_member כדי להגביל את הגישה של חבר לזיכרונות.
resource "google_project_iam_member" "example" { project = "PROJECT_ID" role = "ROLE" member = "MEMBER" condition { title = "Memory Access Condition" description = "IAM condition for Memory Bank" expression = "CONDITION" } }
מחליפים את המשתנים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . מזהי פרויקטים מכילים אותיות וספרות, למשלmy-project. -
ROLE: תפקיד ה-IAM שרוצים להקצות, למשל,roles/aiplatform.memoryEditor. -
MEMBER: החשבון הראשי שרוצים להקצות לו את התפקיד, למשלuser:developerA@corp.com. רשימה מלאה של הערכים שיכולים להיות ל-MEMBERמופיעה במאמר מזהים של חשבונות משתמשים. -
CONDITION: הצהרת תנאי ה-IAM באמצעותaiplatform.googleapis.com/memoryScopeכמאפיין ה-API. בדוגמאות שבהמשך מופיעות כמה הצהרות אפשריות של תנאים.
שיטות מומלצות להרשאות ברמת ההיקף
כשיוצרים תנאים ל-Memory Bank, כדאי להשתמש בשיטות המומלצות הבאות:
שימוש בתפקידים מיוחדים ב-Memory Bank: צריך להשתמש בתנאי IAM של Memory Bank רק לתפקידים שחלים על זיכרונות ועל גרסאות של זיכרונות. כדי למנוע גישה עם הרשאות רחבות מדי, אפשר להשתמש בתפקידים ייעודיים כמו
aiplatform.googleapis.com/memoryViewer, aiplatform.googleapis.com/memoryEditorו-aiplatform.googleapis.com/memoryUser. פרטים נוספים זמינים במאמר בנושא תפקידים ב-IAM של Specialized Memory Bank.שימוש בתנאים חיוביים: מומלץ להשתמש בתנאים חיוביים (כמו בדיקות של שוויון או של נוכחות של צמדי מפתח/ערך) במאפיין
aiplatform.googleapis.com/memoryScopeכדי לשפר את הדיוק. מכיוון שסוגים ושירותים לא נתמכים מיוצגים על ידי היקף ריק, תנאים שליליים (כמו בדיקות של אי-שוויון) עלולים להתאים בטעות למגוון רחב של משאבים, מה שיכול להוביל להרשאות רחבות מדי ולאפשר הענקת הרשאות בלתי צפויה.קיצור תנאים ככל האפשר: מומלץ להשתמש בלוגיקה הקצרה והפשוטה ביותר בביטויי תנאי IAM, במיוחד אם אתם מתכננים להשתמש בכמות גדולה של תנאים. יש מגבלת גודל לכללי מדיניות ההרשאה ב-IAM, ופישוט התנאים מונע חריגה מהמגבלות האלה. פרטים נוספים מופיעים במאמר בנושא מגבלות. לדוגמה, אפשר להשמיט את הבדיקה של נוכחות מפתח בביטוי
'user_id' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) && api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['user_id'] == 'userA'ולהשתמש במקום זאת בהצהרה הקצרה יותרapi.getAttribute('aiplatform.googleapis.com/memoryScope', {})['user_id'] == 'userA'. אם המפתחuser_idחסר, הביטוי הארוך יותר מחזיר את הערךfalse, ואילו הביטוי הקצר יותר מחזיר שגיאה. מכיוון ששגיאות בביטויי תנאי IAM גורמות לדחיית הגישה, שני הביטויים מניבים את אותה תוצאה.
תפקידי IAM מיוחדים ב-Memory Bank
חשוב מאוד למנוע מדיניות IAM עם הרשאות רחבות מדי כשמשתמשים בתנאי IAM. בטבלה הבאה מפורטים תפקידים ייעודיים שאפשר להשתמש בהם כשמקצים תפקידי IAM מותנים לממשקי Memory Bank API:
| שם התפקיד | תיאור | ההרשאות הכלולות |
|---|---|---|
roles/aiplatform.memoryViewer |
התפקיד הזה מאפשר גישה לקריאה בלבד של זיכרונות וגרסאות של זיכרונות. |
|
roles/aiplatform.memoryEditor |
ההרשאה הזו מאפשרת לכתוב ולייצר גישה לזיכרונות, ולבטל שינויים בגרסאות של זיכרונות. |
|
roles/aiplatform.memoryUser |
התפקיד הזה נותן גישה מלאה לזיכרונות ולגרסאות קודמות, כולל כל ההרשאות של צפייה ועריכה. |
התפקיד כולל את כל ההרשאות של memoryEditor וגם של memoryViewer.
|
שימוש בתנאי IAM עם Memory Bank
בקטע הזה מופיעות דוגמאות לשימוש בתנאי IAM עם Memory Bank:
הענקת גישת כתיבה לזיכרונות עם היקף שכולל זוג ספציפי של מפתח וערך.
מתן גישה מלאה לזיכרונות עם היקף המפתח באמצעות קבוצה של ערכים מותרים.
מתן הרשאת קריאה לזיכרונות עם התאמה מדויקת של היקף הגישה
התנאי הבא מעניק לאדם userA@gmail.com גישת צפייה בלבד
בזיכרונות עם היקף ההרשאות {"userId": "userA"}.
המשמעות היא שהמשתמש יכול לקבל ולאחזר זיכרונות, וגם לראות את הגרסאות הקודמות של הזיכרונות האלה, כל עוד ההיקף הוא בדיוק {"userId": "userA"}. למשתמש אין גישה לזיכרונות עם היקף כמו {'userId': 'userA', 'source': 'ADK'}.
{ "members": ["user:userA@gmail.com"], "role": "roles/aiplatform.memoryViewer", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) == {'userId': 'userA'}" } }
הענקת גישת כתיבה לזיכרונות עם היקף שמכיל צמד ספציפי של מפתח/ערך
התנאי הבא נותן לאדם developerA@corp.com גישת עריכה לכל הזיכרונות שמכילים את צמד המפתח/ערך 'userId': 'userA'.
המשמעות היא שהמשתמש יכול ליצור, לעדכן, למחוק ולייצר זיכרונות, וליצור ולבטל שינויים בזיכרונות האלה, עם היקפים כמו {'userId': 'userA'} ו-{'userId': 'userA', 'source': 'ADK'}.
{ "members": ["user:developerA@corp.com"], "role": "roles/aiplatform.memoryEditor", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'] == 'userA'" } }
מתן גישה מלאה לזיכרונות באמצעות היקף שמכיל מפתחות ספציפיים
התנאי הבא מעניק לקבוצה group:engineering@corp.com גישה (צפייה ועריכה) לזיכרונות עם המפתח 'admin_override' או 'public_access_flag'.
כלומר, לחברי הקבוצה יש גישת קריאה וכתיבה מלאה לזיכרונות עם היקפים כמו {'admin_override': 'true'}, {'admin_override': 'true',
'public_access_flag': 'false'} ו-{'userId': 'userA', 'public_access_flag':
'false'}.
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "('admin_override' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {})) || ('public_access_flag' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {}))" } }
הענקת גישה מלאה לזיכרונות עם היקף שכולל תחילית ספציפית
התנאי הבא מעניק לקבוצת המשתמשים group:engineering@corp.com (צפייה ועריכה) גישה לזיכרונות עם המפתח 'userId' והערך שמתחיל ב-'user'.אפשר להשתמש ב-'startsWith' לבדיקת קידומת וב-'endsWith' לבדיקת סיומת.
המשמעות היא שלחברי הקבוצה יש גישת קריאה וכתיבה מלאה לזיכרונות עם היקפים כמו {'userId': 'userA'}, {'userId': 'userB', 'public_access_flag':
'false'}.
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'].startsWith('user')" } }
מתן גישה מלאה לזיכרונות עם היקף המפתח וקבוצה של ערכים מותרים
התנאי הבא מעניק לקבוצת המשתמשים group:engineering@corp.com גישה (צפייה ועריכה) לזיכרונות שיש להם את המפתח 'userId' עם הערכים 'userA' או 'userB'.
המשמעות היא שלחברי הקבוצה יש גישת קריאה וכתיבה מלאה לזיכרונות עם היקפים כמו {'userId': 'userA'}, {'userId': 'userB', 'public_access_flag':
'false'}.
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'] in ['userA', 'userB']" } }
מגבלות
מגבלת חשבונות משתמשים: מדיניות IAM מוגבלת ל-1,500 חשבונות משתמשים ייחודיים. אפשר לנהל את המגבלה הזו באמצעות קבוצות Google. מידע נוסף על מגבלות על כל החשבונות
תמיכה ב-API: תנאי IAM לא נתמכים על ידי שיטות שפועלות במספר היקפים, כמו
ListMemoriesו-PurgeMemories. כדי להעניק את ההרשאות האלה, צריך להקצות לישות תפקיד לא מותנה, כמוaiplatform.googleapis.com/memoryViewerאוaiplatform.googleapis.com/memoryUser, או תפקיד רלוונטי לא מותנה בפלטפורמת הסוכנים של Gemini Enterprise.