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

‫Storage Transfer Service משתמש בסוכן שירות כדי להעביר נתונים מקטגוריית מקור ב-Cloud Storage. סוכן השירות הזה נוצר בפעם הראשונה שמתקשרים אל googleServiceAccounts.get.

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

הרשאות של משתמשים

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

  • storage.buckets.getIamPolicy
  • storage.buckets.setIamPolicy

התפקיד בעלים של קטגוריית אחסון מדור קודם (roles/storage.legacyBucketOwner) או התפקיד אדמין לניהול אחסון (roles/storage.admin) מספקים את ההרשאות הנדרשות.

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

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

אפשר לדלג על השלבים בדף הזה ולעבור ישירות אל יצירת העברה.

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

לסוכן השירות צריכות להיות ההרשאות הבאות בקטגוריית המקור:

הרשאה תיאור
storage.buckets.get מאפשר לסוכן השירות לקבל את המיקום של הקטגוריה.
storage.objects.list מאפשרת לסוכן השירות להציג רשימה של אובייקטים בקטגוריה.
storage.objects.get מאפשרת לסוכן השירות לקרוא אובייקטים בקטגוריה.
storage.objects.create

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

‫Storage Transfer Service יוצר ומאכלס שתי תיקיות בקטגוריית המקור: cloud-ingest/ מכילה מידע על מערכת הקבצים, ו-storage-transfer/ מכילה יומני העברה.

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

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

  • אחת מהאפשרויות:
    • צפייה באובייקטים באחסון (roles/storage.objectViewer) אם ההעברה היא לקטגוריה אחרת של Cloud Storage.
    • יצירת אובייקטים של אחסון (roles/storage.objectCreator) אם ההעברה היא למערכת קבצים.
  • בנוסף לאחד מהפרטים הבאים:
    • Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter) אם נדרשת הרשאת מחיקת אובייקט.
    • Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) אם לא נדרשת הרשאת מחיקת אובייקטים.
  • בנוסף, אם שומרים את רשימות ה-ACL של האובייקטים באמצעות ACL_PRESERVE:
    • בעלים של אובייקטים באחסון מדור קודם (roles/storage.legacyObjectOwner)

כל תפקיד ב-Cloud Storage שמסומן כlegacy אפשר להקצות רק ברמת הקטגוריה.

רשימה מלאה של התפקידים ב-Cloud Storage וההרשאות שמוגדרות בהם מופיעה במאמר תפקידי IAM.

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

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

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

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

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

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

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

    כתובת האימייל של סוכן השירות מוחזרת כערך של accountEmail. מעתיקים את הערך הזה.

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

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

המסוף

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

    כניסה לדף Buckets

  2. לוחצים על התפריט Bucket overflow () שמשויך לקטגוריה שבה רוצים להקצות תפקיד לחשבון המשתמש.

  3. בוחרים באפשרות Edit access.

  4. לוחצים על הלחצן + Add principal.

  5. בשדה New principals, מזינים את כתובת האימייל של חשבון סוכן השירות.

  6. בתפריט הנפתח בחירת תפקיד, בוחרים באפשרות Storage Object Viewer או Storage Object Creator.

  7. לוחצים על הוספת תפקיד נוסף.

  8. בוחרים באפשרות Storage Legacy Bucket Writer או באפשרות Storage Legacy Bucket Reader.

  9. לוחצים על Save.

gcloud

משתמשים בפקודה gcloud storage buckets add-iam-policy-binding:

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

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

דוגמאות קוד

C++

מידע על התקנת ספריית הלקוח של Cloud Storage והשימוש בה מופיע במאמר ספריות הלקוח של Cloud Storage. מידע נוסף מופיע במאמרי העזרה של Cloud Storage C++ API.

כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& role, std::string const& member) {
  auto policy = client.GetNativeBucketIamPolicy(
      bucket_name, gcs::RequestedPolicyVersion(3));

  if (!policy) throw std::move(policy).status();

  policy->set_version(3);
  for (auto& binding : policy->bindings()) {
    if (binding.role() != role || binding.has_condition()) {
      continue;
    }
    auto& members = binding.members();
    if (std::find(members.begin(), members.end(), member) == members.end()) {
      members.emplace_back(member);
    }
  }

  auto updated = client.SetNativeBucketIamPolicy(bucket_name, *policy);
  if (!updated) throw std::move(updated).status();

  std::cout << "Updated IAM policy bucket " << bucket_name
            << ". The new policy is " << *updated << "\n";
}

C#

מידע על התקנת ספריית הלקוח של Cloud Storage והשימוש בה מופיע במאמר ספריות הלקוח של Cloud Storage. מידע נוסף מופיע במאמרי העזרה של Cloud Storage C# API.

כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;
using System.Collections.Generic;

public class AddBucketIamMemberSample
{
    public Policy AddBucketIamMember(
        string bucketName = "your-unique-bucket-name",
        string role = "roles/storage.objectViewer",
        string member = "serviceAccount:dev@iam.gserviceaccount.com")
    {
        var storage = StorageClient.Create();
        var policy = storage.GetBucketIamPolicy(bucketName, new GetBucketIamPolicyOptions
        {
            RequestedPolicyVersion = 3
        });
        // Set the policy schema version. For more information, please refer to https://cloud.google.com/iam/docs/policies#versions.
        policy.Version = 3;

        Policy.BindingsData bindingToAdd = new Policy.BindingsData
        {
            Role = role,
            Members = new List<string> { member }
        };

        policy.Bindings.Add(bindingToAdd);
        var bucketIamPolicy = storage.SetBucketIamPolicy(bucketName, policy);
        Console.WriteLine($"Added {member} with role {role} " + $"to {bucketName}");
        return bucketIamPolicy;
    }
}

Go

מידע על התקנת ספריית הלקוח של Cloud Storage והשימוש בה מופיע במאמר ספריות הלקוח של Cloud Storage. מידע נוסף מופיע במאמרי העזרה של Cloud Storage Go API.

כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/iam"
	"cloud.google.com/go/storage"
)

// addBucketIAMMember adds the bucket IAM member to permission role.
func addBucketIAMMember(w io.Writer, bucketName string) error {
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	bucket := client.Bucket(bucketName)
	policy, err := bucket.IAM().Policy(ctx)
	if err != nil {
		return fmt.Errorf("Bucket(%q).IAM().Policy: %w", bucketName, err)
	}
	// Other valid prefixes are "serviceAccount:", "user:"
	// See the documentation for more values.
	// https://cloud.google.com/storage/docs/access-control/iam
	identity := "group:cloud-logs@google.com"
	var role iam.RoleName = "roles/storage.objectViewer"

	policy.Add(identity, role)
	if err := bucket.IAM().SetPolicy(ctx, policy); err != nil {
		return fmt.Errorf("Bucket(%q).IAM().SetPolicy: %w", bucketName, err)
	}
	// NOTE: It may be necessary to retry this operation if IAM policies are
	// being modified concurrently. SetPolicy will return an error if the policy
	// was modified since it was retrieved.
	fmt.Fprintf(w, "Added %v with role %v to %v\n", identity, role, bucketName)
	return nil
}

Java

מידע על התקנת ספריית הלקוח של Cloud Storage והשימוש בה מופיע במאמר ספריות הלקוח של Cloud Storage. מידע נוסף מופיע במאמרי העזרה של Cloud Storage Java API.

כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


import com.google.cloud.Binding;
import com.google.cloud.Policy;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public