הגדרת גישה למקור: Cloud Storage

אפשר להשתמש בקטגוריית מקור של Cloud Storage ב-Storage Transfer Service בשני סוגי העברות:

  • העברות ללא סוכנים: העברות בין שירותי ענן, כמו Cloud Storage ל-Cloud Storage, ‏Cloud Storage ל-AWS S3 או Cloud Storage ל-Azure Blob Storage. ההרשאות ניתנות לסוכן השירות של Storage Transfer Service.

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

מתן הרשאות אוטומטי במסוף Google Cloud

אם אתם משתמשים במסוף Google Cloud כדי ליצור העברה ללא סוכן ויש לכם את הרשאות המשתמש הנדרשות, סוכן השירות יקבל באופן אוטומטי את ההרשאות הנדרשות בקטגוריית המקור.

אתם יכולים לדלג על השלבים שבדף הזה. אם צריך, מגדירים את הגישה ליעד ואז יוצרים העברה.

דרישות מוקדמות

  • הרשאות בחשבון המשתמש: כדי להקצות את תפקידי ה-IAM הנדרשים שמפורטים בדף הזה, לחשבון המשתמש (או לחשבון השירות שמנוהל על ידי המשתמש) צריכות להיות הרשאות לשינוי מדיניות IAM בקטגוריית המקור ובפרויקט של מאגר הנציגים. למידע נוסף על הדרישות של חשבון המשתמש, קראו את המאמר הרשאות בחשבון המשתמש.

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

איך מוצאים את כתובת האימייל של סוכן השירות

סוכן השירות נוצר באופן אוטומטי כשיוצרים משימת העברה בפעם הראשונה, מריצים פקודות הגדרה של gcloud transfer, נכנסים לדף Storage Transfer במסוףGoogle Cloud או קוראים ל-googleServiceAccounts.get.

כדי לקבל את כתובת האימייל של סוכן השירות, שמשמשת לזיהוי שלו בפקודות של Storage Transfer Service:

  1. עוברים אל דף העזר של googleServiceAccounts.get. נפתחת חלונית אינטראקטיבית בשם Try this method.
  2. בחלונית, בקטע Request parameters, מזינים את מזהה הפרויקט.
  3. לוחצים על Execute.

מעתיקים את הערך של accountEmail. הפורמט הוא: project-PROJECT_NUMBER@storage-transfer-service..

מתן ההרשאות הנדרשות

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

העברה ללא סוכן

התפקידים המוגדרים מראש הבאים נותנים לסוכן השירות את ההרשאות הנדרשות בקטגוריית המקור:

  • קריאה בקטגוריה באחסון מדור קודם (roles/storage.legacyBucketReader)
  • בנוסף, צריך להציג אחד מהמסמכים הבאים:
    • צפייה באובייקטים באחסון (roles/storage.objectViewer) אם אובייקטי המקור נשמרים.
    • משתמש באובייקטים באחסון (roles/storage.objectUser) אם מוחקים את אובייקטי המקור אחרי ההעברה (deleteObjectsFromSourceAfterTransfer).
    • אדמין של אובייקטים ב-Storage‏ (roles/storage.objectAdmin) אם שומרים את רשימות ה-ACL של האובייקטים (ACL_PRESERVE). תומך גם במחיקת אובייקטים של מקור אחרי ההעברה.

מוסיפים את סוכן השירות למדיניות ה-IAM של קטגוריית המקור:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

  2. לוחצים על התפריט Bucket overflow () של קטגוריית המקור.
  3. בוחרים באפשרות Edit access.
  4. לוחצים על ‎+ Add principal.
  5. בשדה New principals, מזינים את כתובת האימייל של סוכן השירות.
  6. בתפריט הנפתח Select a role, בוחרים באפשרות Storage Legacy Bucket Reader.
  7. לוחצים על Add another role ובוחרים באחת מהאפשרויות הבאות:
    • Storage Object Viewer
    • Storage Object User
    • Storage Object Admin
  8. לוחצים על Save.

gcloud

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

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE

מחליפים את:

  • ‫BUCKET_NAME: השם של קטגוריית המקור.
  • ‫SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.
  • ‫OBJECT_ROLE: בוחרים אחת מהאפשרויות הבאות, בהתאם לאפשרויות ההעברה:
  • objectViewer: אם שומרים את אובייקטי המקור.
  • ‫objectUser: אם מוחקים את אובייקטי המקור אחרי ההעברה.
  • ‫objectAdmin: אם שומרים את רשימות ה-ACL של האובייקטים. אפשר גם למחוק את אובייקטי המקור אחרי ההעברה.

‫API בארכיטקטורת REST

  1. יוצרים אסימון גישה כדי לאמת את הבקשה. אם אתם משתמשים ב-CLI של gcloud, הריצו את הפקודה:

    gcloud auth print-access-token
  2. מאחזרים את מדיניות ה-IAM הקיימת של הקטגוריה (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), מוסיפים את הקישורים הבאים למערך bindings שלה ושומרים את המדיניות הממוזגת בתור source_policy.json:

    {
    "bindings": [
      {
        "role": "roles/storage.legacyBucketReader",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      },
      {
        "role": "roles/storage.OBJECT_ROLE",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      }
    ]
    }

    מחליפים את:

    • ‫SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.
    • ‫OBJECT_ROLE: בוחרים באפשרות objectViewer אם שומרים את אובייקטי המקור, באפשרות objectUser אם מוחקים את אובייקטי המקור או באפשרות objectAdmin אם שומרים את רשימות ה-ACL של האובייקטים.
  3. שולחים בקשה לPUT באמצעות curl:

    curl -X PUT --data-binary @source_policy.json \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: application/json" \
      "https://storage./storage/v1/b/BUCKET_NAME/iam"

    מחליפים את:

    • ‫OAUTH2_TOKEN: טוקן הגישה מסוג OAuth 2.0 שנוצר בשלב 1.
    • ‫BUCKET_NAME: השם של קטגוריית המקור.

העברה באמצעות סוכן

התפקידים המוגדרים מראש הבאים נותנים לסוכן השירות את הגישה הנדרשת לקטגוריית המקור:

  • קריאה בקטגוריה באחסון מדור קודם (roles/storage.legacyBucketReader)
  • יצירת אובייקטים באחסון (roles/storage.objectCreator)

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

  • צפייה באובייקטים באחסון (roles/storage.objectViewer) אם שומרים את אובייקטי המקור, או Storage Object User‏ (roles/storage.objectUser) אם מוחקים את אובייקטי המקור אחרי ההעברה.

מקצים את התפקידים האלה בקטגוריית המקור.

המסוף

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

  2. לוחצים על התפריט Bucket overflow () של קטגוריית המקור ובוחרים באפשרות Edit access.
  3. לוחצים על ‎+ Add principal.
  4. בשדה New principals, מזינים את כתובת האימייל של סוכן השירות.
  5. בתפריטים הנפתחים של Select a role, בוחרים באפשרויות Storage Legacy Bucket Reader ו-Storage Object Creator.
  6. לוחצים שוב על ‎+ Add principal.
  7. מזינים את כתובת האימייל של החשבון של סוכן ההעברות. זהו המשתמש או חשבון השירות שמשמשים להתקנת סוכני העברה. לדוגמה, my-agent-sa@PROJECT_ID. או user@example.com.
  8. בוחרים באפשרות Storage Object Viewer אם רוצים לשמור את אובייקטי המקור, או באפשרות Storage Object User אם רוצים למחוק את אובייקטי המקור אחרי ההעברה.
  9. לוחצים על Save.

gcloud

  1. מקצים לסוכן השירות תפקידים לקריאת מטא-נתונים של קטגוריות ולכתיבת יומני העברות:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
  2. מקצים תפקידי גישה לאובייקטים לחשבון של נציג ההעברה:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.OBJECT_ROLE

    מחליפים את:

    • ‫BUCKET_NAME: השם של קטגוריית המקור.
    • ‫SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.
    • ‫serviceAccount_OR_user: מציינים את הערך serviceAccount אם חשבון סוכן ההעברה הוא חשבון שירות, או את הערך user אם הסוכנים הותקנו עם חשבון משתמש.
    • ‫TRANSFER_AGENT_ACCOUNT: כתובת האימייל של החשבון שבו הותקנו סוכני ההעברה. לדוגמה, my-agent-sa@PROJECT_ID. או user@example.com.
    • ‫OBJECT_ROLE: מציינים objectViewer אם רוצים לשמור את אובייקטי המקור, או objectUser אם רוצים למחוק את אובייקטי המקור אחרי ההעברה.

‫API בארכיטקטורת REST

  1. יוצרים אסימון גישה כדי לאמת את הבקשה. אם אתם משתמשים ב-CLI של gcloud, הריצו את הפקודה:

    gcloud auth print-access-token
  2. מאחזרים את מדיניות ה-IAM הקיימת של הקטגוריה (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), מוסיפים את הקישורים הבאים למערך bindings שלה ושומרים את המדיניות הממוזגת בתור agent_source_policy.json:

    {
      "bindings": [
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.OBJECT_ROLE",
          "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"]
        }
      ]
    }

    מחליפים את:

    • ‫SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.
    • ‫serviceAccount_OR_user: מציינים את הערך serviceAccount אם חשבון סוכן ההעברה הוא חשבון שירות, או את הערך user אם הסוכנים הותקנו עם חשבון משתמש.
    • ‫TRANSFER_AGENT_ACCOUNT: כתובת האימייל של החשבון שבו הותקנו סוכני ההעברה. לדוגמה, my-agent-sa@PROJECT_ID. או user@example.com.
    • ‫OBJECT_ROLE: מציינים objectViewer אם רוצים לשמור את אובייקטי המקור, או objectUser אם רוצים למחוק את אובייקטי המקור אחרי ההעברה.
  3. מעדכנים את מדיניות הקטגוריה באמצעות curl:

    curl -X PUT --data-binary @agent_source_policy.json \
        -H "Authorization: Bearer OAUTH2_TOKEN" \
        -H "Content-Type: application/json" \
        "https://storage./storage/v1/b/BUCKET_NAME/iam"

    מחליפים את:

    • ‫OAUTH2_TOKEN: טוקן הגישה מסוג OAuth 2.0 שנוצר בשלב 1.
    • ‫BUCKET_NAME: השם של קטגוריית המקור.

העברות של Cloud Storage בין פרויקטים

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

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

כדי להקצות תפקידים להעברות בין פרויקטים:

  1. משיגים את כתובת האימייל של סוכן השירות של הפרויקט שבו תתבצע ההעברה. איך מוצאים את כתובת האימייל של סוכן השירות
  2. בקטגוריית המקור, מקצים לסוכן השירות את התפקידים הבאים:
    • קריאה בקטגוריה באחסון מדור קודם (roles/storage.legacyBucketReader)
    • בנוסף לאחד מתפקידי האובייקט הבאים:
      • צפייה באובייקטים באחסון (roles/storage.objectViewer) אם שומרים את אובייקטי המקור.
      • משתמש באובייקטים באחסון (roles/storage.objectUser) אם מוחקים את אובייקטי המקור אחרי ההעברה (deleteObjectsFromSourceAfterTransfer).
      • אדמין של אובייקטים ב-Storage‏ (roles/storage.objectAdmin) אם שומרים את רשימות ה-ACL של האובייקטים (ACL_PRESERVE). תומך גם במחיקת אובייקטים של מקור אחרי ההעברה.
  3. בקטגוריית היעד, מקצים את התפקידים הבאים לאותו סוכן שירות:
    • קריאה בקטגוריה באחסון מדור קודם (roles/storage.legacyBucketReader)
    • משתמש באובייקטים באחסון (roles/storage.objectUser), או אדמין של אובייקטים באחסון (roles/storage.objectAdmin) אם שומרים את רשימות ה-ACL של האובייקטים (ACL_PRESERVE).

הוראות מפורטות להענקת גישה לקטגוריית היעד מופיעות במאמר הגדרת גישה ל-sink: Cloud Storage.

הגבלות על ארגון

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

  • שיתוף מוגבל לדומיין (constraints/iam.allowedPolicyMemberDomains): המדיניות בפרויקט שמארח את הקטגוריה חייבת לאפשר דומיינים של חברים שמכילים את סוכן השירות. מידע נוסף על הגבלת דומיינים
  • השבתת השימוש בחשבונות שירות בפרויקטים שונים (constraints/iam.disableCrossProjectServiceAccountUsage): צריך לוודא שהאילוץ הזה לא חוסם את הגישה של חשבונות שירות בפרויקטים שונים. הגבלת חשבונות שירות
  • ‫VPC Service Controls: אם הקטגוריות שייכות לגבולות גזרה שונים לשירות, צריך להגדיר כללי תעבורת נתונים נכנסת ויוצאת כדי לאפשר תקשורת להעברה. איך מגדירים את VPC Service Controls להעברות של מאגר אובייקטים בענן

מסמך עזר בנושא הרשאות מפורטות

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

העברה ללא סוכן

בהעברות ללא סוכן, צריך לתת הרשאות לסוכן השירות של Storage Transfer Service:

הרשאה תיאור
storage.buckets.get מאפשרת לסוכן השירות לקבל את המיקום של הקטגוריה.
storage.objects.list מאפשרת לסוכן השירות להציג רשימה של אובייקטים בקטגוריה.
storage.objects.get מאפשר לסוכן השירות לקרוא אובייקטים בקטגוריה.
storage.objects.delete מאפשר לסוכן השירות למחוק אובייקטים בקטגוריה. חובה אם הערך של deleteObjectsFromSourceAfterTransfer הוא true.
storage.objects.getIamPolicy מאפשר לקרוא רשימות ACL באובייקטים של המקור. חובה אם מופעלת שמירה של רשימות ACL של אובייקטים (ACL_PRESERVE).
storage.folders.list
storage.folders.get
מאפשרת להציג רשימה של תיקיות ולקרוא אותן. נדרש כשמעבירים מקטגוריה שמופעל בה מרחב שמות היררכי.

העברה באמצעות סוכן

בהעברות מבוססות-סוכנים ממקור ב-Cloud Storage, ההרשאות מחולקות בין שני חשבונות משתמשים:

  • סוכן שירות: נדרשת גישת קריאה ברמת הקטגוריה כדי לפתור את המטא-נתונים והמיקום של הקטגוריה, וגם גישה ליצירת אובייקטים כדי לכתוב יומני העברה של הסוכן.

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

הרשאות של סוכן שירות

הרשאה תיאור
storage.buckets.get מאפשר לסוכן השירות לבדוק את המטא-נתונים והמיקום של הקטגוריה.
storage.objects.create מאפשרת לסוכן השירות לכתוב יומני העברות של סוכנים לקטגוריית המקור, כשמעבירים מ-Cloud Storage למערכת קבצים.

העברת הרשאות בחשבון של סוכן

הרשאה תיאור
storage.objects.list מאפשרת לסוכנים להציג רשימה של אובייקטים בקטגוריית המקור.
storage.objects.get מאפשרת לסוכנים לקרוא אובייקטים מקטגוריית המקור.
storage.objects.delete הסוכנים יכולים למחוק אובייקטים במקור אם האפשרות deleteObjectsFromSourceAfterTransfer מופעלת.
storage.folders.list
storage.folders.get
מאפשרת לסוכנים להציג ולקרוא תיקיות כשמעבירים מקטגוריה שמופעל בה מרחב שמות היררכי.

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

צריך להגדיר את הגישה ליעד: