האצלת הרשאות של סוכן שירות לחשבון שירות שמנוהל על ידי משתמש

להעברות ללא סוכן, Storage Transfer Service משתמש כברירת מחדל בסוכן שירות כדי להעביר את הנתונים בין המקור ליעד. אתם מעניקים הרשאות לסוכן השירות כדי לגשת לקטגוריות של Cloud Storage.

מכיוון שסוכן השירות של Storage Transfer Service משמש את כל ההעברות בפרויקט, הוא חייב לקבל הרשאות לכל הקטגוריות שמשתתפות בכל העברה.

לחלופין, אתם יכולים להקצות הרשאות ל-bucket לכמה חשבונות שירות בניהול המשתמשים. לחשבונות השירות האלה בניהול המשתמשים מוקצות הרשאות בדליים ספציפיים של מקור ויעד, והם מוגבלים גם לחשבונות משתמשים ספציפיים (החשבונות שיוצרים את עבודת ההעברה או מפעילים אותה).

תרחישים לדוגמה

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

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

תרחיש 1: סוכן שירות בלבד

בתרחיש הזה, כל ההרשאות ניתנות לסוכן השירות.

  • לסוכן השירות יינתנו הרשאות כתיבה בקטגוריות A,‏ B,‏ C ו-D.

כל משתמש עם ההרשאות המתאימות ליצירת העברת נתונים יכול להעביר נתונים אל או ממאגרי A,‏ B,‏ C ו-D.

השיטה הזו מתאימה אם המשתמש ב-Storage Transfer Service הוא משתמש מהימן לנתונים בכל הקטגוריות, ויכול להגדיר את משימות ההעברה בצורה נכונה כדי למנוע העברה של נתונים לקטגוריה הלא נכונה או ממנה.

תרחיש 2: רק סוכני שירות שמנוהלים על ידי משתמשים

בתרחיש הזה, כל ההרשאות מוענקות לחשבונות שירות בניהול המשתמשים.

  • לחשבון שירות מספר 1 בניהול המשתמש הוענקו הרשאות בדליים A ו-B.
  • לחשבון שירות מספר 2 בניהול המשתמש הוענקו הרשאות בדליים C ו-D.

בנוסף:

  • למשתמש אלפא ניתנה גישה לחשבון שירות מספר 1.
  • למשתמש Bravo ניתנה גישה לחשבון שירות מספר 2.
  • למשתמש צ'רלי יש גישה לחשבונות שירות מספר 1 ומספר 2.

במקרה כזה:

  • אפשר להעביר את Alpha רק בין מאגר A למאגר B.
  • אפשר להעביר את Bravo רק בין קבוצות C ו-D.
  • צ'ארלי יכול לעבור בין קבוצות A ו-B, ובין קבוצות C ו-D בלבד.
  • צ'ארלי לא יכול לעבור בין A ל-C, בין A ל-D, בין B ל-C או בין B ל-D.

תרחיש 3: הרשאות מעורבות

בתרחיש הזה, הפרויקט מכיל שילוב של הרשאות של סוכן שירות והרשאות של חשבון שירות בניהול משתמשים.

  • לסוכן השירות יינתנו הרשאות כתיבה בקטגוריות א' וב'.
  • לחשבון שירות מספר 1 שמנוהל על ידי המשתמש הוקצו הרשאות קריאה בלבד בקטגוריה C והרשאות כתיבה בקטגוריה D.
  • למשתמש אלפא ניתנה גישה לחשבון שירות מספר 1 בניהול המשתמשים.

במקרה כזה:

  • כל משתמש עם ההרשאות המתאימות ליצירת משימת העברה יכול להעביר נתונים אל או ממאגרי A ו-B. אי אפשר להעביר אותם לקטגוריה C או D או להוציא אותם מהקטגוריות האלה.
  • משתמש אלפא יכול לעבור אל או מתוך קבוצות A ו-B.
  • ‫Alpha יכול להעביר מחוץ לדלי C אל דלי D.
  • אי אפשר להעביר את אלפא מחוץ לדלי C אל דלי A או B.

סקירה כללית על ההטמעה

ההטמעה נראית כך:

  • יוצרים חשבון שירות שמנוהל על ידי משתמש או משתמשים בחשבון קיים.
  • אתם מעניקים הרשאות:
    • כדי שמשתמש יוכל לגשת לחשבון שירות שמנוהל על ידי משתמש.
    • כדי שסוכן השירות ייצור אסימון גישה מחשבון השירות שמנוהל על ידי המשתמש.
    • כדי שלחשבון השירות בניהול המשתמשים תהיה גישה למאגרי המידע.
  • המשתמש יוצר עבודת העברה שמציינת את חשבון השירות שמנוהל על ידי המשתמש.
  • Storage Transfer Service בודק שלמשתמש יש את ההרשאות הנכונות בחשבון השירות. אם לא ניתנו ההרשאות הנכונות, יצירת משימת ההעברה תיכשל.
  • סוכן השירות יוצר אסימון OAuth בשם חשבון השירות שמנוהל על ידי המשתמש. אסימון ה-OAuth מאפשר ל-Storage Transfer Service לגשת לקטגוריות שמשתתפות בהעברה.
  • עבודת ההעברה מתבצעת.
  • הטוקן של OAuth הוא לטווח קצר והתוקף שלו פג. אם משימת ההעברה מתבצעת כשתוקף האסימון פג, Storage Transfer Service יוצר אסימון חדש וממשיך בהעברה.

הגדרת הענקת הרשאות

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

דרישות

  • כדי ליצור חשבון שירות חדש בניהול המשתמש, צריך את התפקיד 'יצירת חשבונות שירות' (roles/iam.serviceAccountCreator) בפרויקט.
  • כדי להעניק למשתמש ולסוכן השירות גישה לחשבון שירות בניהול המשתמש, צריך לקבל את התפקיד 'אדמין של חשבון שירות' (roles/iam.serviceAccountAdmin) בחשבון השירות בניהול המשתמש או בפרויקט.

יצירה או זיהוי של חשבון שירות שמנוהל על ידי משתמש

אתם יכולים ליצור חשבון שירות חדש שמנוהל על ידי משתמש או להשתמש בחשבון קיים.

  • כדי ליצור חשבון שירות שמנוהל על ידי משתמש, פועלים לפי ההוראות במאמר יצירת חשבונות שירות.

  • כדי להשתמש בחשבון שירות קיים שמנוהל על ידי משתמש, צריך את כתובת האימייל שלו, בפורמט הבא:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

הענקת גישה למשתמש

מעניקים לחשבון המשתמש גישה לחשבון השירות החדש בניהול המשתמש, ומקצים לו את התפקיד משתמש בחשבון שירות (roles/iam.serviceAccountUser). חשבון המשתמש הוא החשבון שמשמש ליצירה או לעדכון של עבודת ההעברה.

מסוף Google Cloud

  1. נכנסים לדף Service Accounts במסוף Google Cloud .

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

  3. לוחצים על כתובת האימייל של חשבון השירות שמנוהל על ידי משתמש.

  4. בוחרים בכרטיסייה גורמים ראשיים עם גישה.

  5. לוחצים על Grant access.

  6. מזינים את כתובת האימייל של המשתמש. לדוגמה, user1@example.com.

  7. מהתפריט הנפתח תפקיד, בוחרים באפשרות Service Account User.

  8. לוחצים על Save. החשבון הראשי יקבל את התפקיד בחשבון השירות.

gcloud

כדי להעניק תפקיד לישות מורשית, מריצים את הפקודה add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=PRINCIPAL --role=roles/iam.serviceAccountUser

מחליפים את המשתנים הבאים:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שמנוהל על ידי המשתמש בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • PRINCIPAL: כתובת האימייל של המשתמש שמריץ את העברת העבודה, בפורמט user:name@example.com.

הענקת גישה לסוכן השירות

כדי לאפשר לסוכן השירות ליצור אסימון גישה מחשבון השירות שמנוהל על ידי המשתמש, צריך לתת לסוכן השירות גישה לחשבון השירות שמנוהל על ידי המשתמש ולהקצות לו את התפקיד יצירת אסימונים בחשבון שירות (roles/iam.serviceAccountTokenCreator).

כדי להעניק גישה, צריך את כתובת האימייל של סוכן השירות. כדי למצוא את כתובת האימייל של סוכן השירות:

  1. עוברים אל דף העזר של googleServiceAccounts.get.

    תיפתח חלונית אינטראקטיבית עם הכותרת Try this method (נסו את השיטה הזו).

  2. בחלונית, בקטע Request parameters (פרמטרים של בקשה), מזינים את מזהה הפרויקט. הפרויקט שאתם מציינים כאן צריך להיות הפרויקט שבו אתם משתמשים כדי לנהל את Storage Transfer Service.

  3. לוחצים על Execute.

    כתובת האימייל של סוכן השירות מוחזרת כערך של accountEmail. הפורמט הוא project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

לאחר מכן, כדי לתת לסוכן השירות גישה לחשבון השירות שמנוהל על ידי המשתמש:

מסוף Google Cloud

  1. נכנסים לדף Service Accounts במסוף Google Cloud .

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

  3. לוחצים על כתובת האימייל של חשבון השירות שמנוהל על ידי משתמש.

  4. בוחרים בכרטיסייה גורמים ראשיים עם גישה.

  5. לוחצים על Grant access.

  6. מזינים את כתובת האימייל של סוכן השירות.

  7. בתפריט הנפתח Role, בוחרים באפשרות Service Account Token Creator.

  8. לוחצים על Save. החשבון הראשי יקבל את התפקיד בחשבון השירות.

gcloud

כדי להעניק תפקיד לישות מורשית, מריצים את הפקודה add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator

מחליפים את המשתנים הבאים:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שמנוהל על ידי המשתמש בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.

מתן הרשאות ל-bucket לחשבון השירות המנוהל על ידי המשתמש

צריך להעניק את ההרשאות שמפורטות במאמר הרשאות של סוכן שירות בניהול Google לחשבון השירות בניהול המשתמשים, במקום לסוכן השירות.

יצירת משימת העברה באמצעות חשבון שירות שמנוהל על ידי משתמש

אחרי שמעניקים את ההרשאות הנכונות, אפשר לציין את חשבון השירות המנוהל על ידי המשתמש כשיוצרים עבודת העברה חדשה.

מסוף Google Cloud

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

  1. בדף בחירת הגדרות, מחפשים את הקטע סוג חשבון שירות.
  2. בוחרים באפשרות חשבון שירות בניהול המשתמש.
  3. מזינים את כתובת האימייל של חשבון השירות שמנוהל על ידי משתמש, בפורמט SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  4. לוחצים על Create (יצירה) כדי ליצור את עבודת ההעברה.

API ל-REST

מציינים את חשבון השירות בניהול המשתמשים כערך של השדה serviceAccount בבקשה transferJobs.create.

אפשר להשתמש בכתובת האימייל של חשבון השירות (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) או במזהה הייחודי (123456789012345678901).

לדוגמה:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}