שליטה בגישה לנקודות קצה (endpoints) ב-Vertex AI

בדף הזה מוסבר איך להגדיר מדיניות IAM בנקודת קצה של Vertex AI כדי לשלוט בגישה אליה. המאמר מניח שאתם כבר מכירים את המושגים של IAM, כמו מדיניות, תפקידים, הרשאות וחשבונות משתמשים, כפי שמתואר במאמרים בקרת גישה ל-Vertex AI באמצעות IAM ומושגים שקשורים לניהול גישה.

מדיניות ב-IAM כוללת קישורי תפקידים שמגדירים אילו תפקידים ב-IAM משויכים לאילו חשבונות משתמשים. תפקיד הוא אוסף של הרשאות שאתם מעניקים לחשבון משתמש. ‫Vertex AI מספק תפקידים מוגדרים מראש שאפשר להשתמש בהם במדיניות. אפשר גם ליצור תפקידים בהתאמה אישית.

טעינת המדיניות של ניהול הזהויות והרשאות הגישה

אפשר לראות את מדיניות ה-IAM הנוכחית בנקודת קצה של Vertex AI באמצעות API בארכיטקטורת REST. כדי לעשות את זה, צריכה להיות לכם הרשאת endpoints.getIamPolicy בנקודת הקצה או בפרויקט. ההרשאה הזו ניתנת בתפקיד 'אדמין של Vertex AI' (roles/aiplatform.admin).

REST

כדי לקבל את מדיניות IAM ממשאב, שולחים בקשת POST שמשתמשת בשיטה getIamPolicy.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו נמצאת נקודת הקצה, למשל, us-central1.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ENDPOINT_ID: המזהה של נקודת הקצה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON עם מדיניות ה-IAM הנוכחית:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

הגדרת מדיניות IAM

אפשר להגדיר מדיניות IAM בנקודת קצה באמצעות API בארכיטקטורת REST. כדי לעשות את זה, צריכה להיות לכם הרשאת endpoints.setIamPolicy בנקודת הקצה או בפרויקט. ההרשאה הזו ניתנת בתפקיד 'אדמין של Vertex AI' (roles/aiplatform.admin).

REST

כדי להגדיר את מדיניות ה-IAM במשאב, שולחים בקשת POST שמשתמשת ב-method ‏setIamPolicy.

הגדרת מדיניות IAM מבטלת כל מדיניות קיימת. השינויים לא מתווספים. כדי לשנות מדיניות קיימת של משאב, משתמשים ב-method ‏getIamPolicy כדי לקבל את המדיניות הקיימת שלו ואז מבצעים שינויים. צריך לכלול את המדיניות ששיניתם יחד עם etag בבקשה setIamPolicy.

אם מקבלים את קוד השגיאה 409, זה אומר שבקשה מקבילה setIamPolicy כבר עדכנה את המדיניות. משתמשים ב-method getIamPolicy כדי לקבל את etag המעודכן של המדיניות, ואז מנסים שוב לשלוח את בקשת setIamPolicy עם etag החדש.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו נמצאת נקודת הקצה, למשל, us-central1.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ENDPOINT_ID: המזהה של נקודת הקצה.
  • ROLE: תפקיד IAM שכולל את ההרשאות להענקה, כמו roles/aiplatform.user.
  • PRINCIPAL: חשבון המשתמש שמקבל את ההרשאות של התפקיד, כמו user:myuser@example.com.
  • ETAG: ערך מחרוזת שמשמש למניעת מצב שבו עדכונים בו-זמניים של מדיניות יחליפו אחד את השני. הערך הזה מוחזר כחלק מהתגובה getIamPolicy.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy

גוף בקשת JSON:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "PRINCIPAL"
        ]
      },
      ...
    ],
    "etag": "ETAG"
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON עם מדיניות ה-IAM הנוכחית:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

אימות הרשאות IAM של משתמש עבור נקודת קצה

אתם יכולים לבדוק אם למשתמשים המאומתים הקיימים יש הרשאות IAM ספציפיות לנקודת קצה.

REST

כדי לבדוק אם למשתמש יש הרשאות IAM ספציפיות למשאב, שולחים בקשת POST באמצעות השיטה testIamPermissions. בדוגמה הבאה אפשר לבדוק אם למשתמש המאומת הנוכחי יש קבוצה של הרשאות IAM לנקודת קצה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו נמצאת נקודת הקצה, למשל us-central1.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ENDPOINT_ID: המזהה של נקודת הקצה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions

גוף בקשת JSON:

{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו: התגובה כוללת רק את ההרשאות מגוף ה-JSON של הבקשה שזמינות למשתמש המאומת הנוכחי.
{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

המאמרים הבאים

מידע נוסף על הגדרת פרויקטים עם בקרת גישה מאובטחת יותר לנקודות קצה זמין במאמר הגדרת פרויקט לצוות.