設定接收端存取權:Cloud Storage

Storage 移轉服務可使用 Cloud Storage 目的地 (接收器) bucket,進行兩種移轉作業:

  • 無代理程式移轉:雲端對雲端移轉,例如 AWS S3、Azure Blob Storage 或 Cloud Storage 到 Cloud Storage。權限會授予 Storage 移轉服務的服務代理。

  • 代理程式驅動的移轉作業:使用移轉代理程式和代理程式集區,將檔案系統、HDFS 或與 S3 相容的儲存空間中的資料移轉至 Cloud Storage。必須將權限授予服務代理和移轉代理帳戶。

在 Cloud de Confiance 控制台中自動授予權限

如果您使用 Cloud de Confiance 控制台建立無代理程式移轉作業,且具備必要的使用者授權,系統會自動授予服務代理目標 bucket 的必要權限。

您可以略過本頁步驟。如有需要,請設定來源存取權,然後建立移轉作業。

必要條件

  • 使用者帳戶權限:如要授予本頁列出的必要 IAM 角色,使用者帳戶 (或使用者自行管理的服務帳戶) 必須具備修改目的地 bucket 和代理程式集區專案 IAM 政策的權限。如要進一步瞭解使用者帳戶規定,請參閱「使用者帳戶權限」。

  • 代理程式型移轉專案權限:如果是代理程式型移轉作業,請務必為服務代理和移轉代理帳戶設定必要的專案層級角色。請參閱「代理程式型專案層級權限」。

找出服務代理的電子郵件地址

當您首次建立移轉工作、執行 gcloud transfer 設定指令、造訪Cloud de Confiance 控制台中的「Storage 移轉」頁面,或呼叫 googleServiceAccounts.get 時,系統會自動建立服務代理。

如要取得服務代理的電子郵件地址,以便在 Storage 移轉服務指令中識別該代理,請按照下列步驟操作:

  1. 前往 googleServiceAccounts.get 參考頁面。互動式面板隨即開啟,標題為「試用這個方法」。
  2. 在面板的「Request parameters」(要求參數) 下方,輸入專案 ID。
  3. 點選「Execute」。

複製 accountEmail 的值。格式如下:project-PROJECT_NUMBER@storage-transfer-service.s3ns-system.iam.gserviceaccount.com。

授予必要權限

選取轉移類型,查看授予存取權的步驟。

無代理程式移轉

下列預先定義的角色會一併將目的地 bucket 的必要權限授予服務代理:

  • Storage 舊版值區讀取者 (roles/storage.legacyBucketReader)
  • Storage 物件使用者 (roles/storage.objectUser),或 Storage 物件管理員 (roles/storage.objectAdmin) (如要保留物件 ACL (ACL_PRESERVE))。

將服務代理新增至目的地 bucket IAM 政策:

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 按一下目的地 bucket 的「Bucket overflow」(Bucket 溢位) 選單 ()。
  3. 選擇「編輯權限」。
  4. 按一下「+ 新增主體」。
  5. 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
  6. 從「Select a role」(選取角色) 下拉式選單中選取「Storage Legacy Bucket Reader」。
  7. 按一下「新增其他角色」,然後選取「Storage Object User」,或選取「Storage Object Admin」來保留物件 ACL。
  8. 按一下「儲存」。

gcloud

執行下列 gcloud storage 指令:

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

更改項目:

  • BUCKET_NAME:目的地 bucket 的名稱。
  • SERVICE_AGENT_EMAIL:服務代理電子郵件。
  • OBJECT_ROLE:預設指定 objectUser,如要保留物件 ACL (ACL_PRESERVE),則指定 objectAdmin。

REST API

  1. 產生存取權杖,驗證要求。如果您使用的是 gcloud CLI,請執行:

    gcloud auth print-access-token
  2. 擷取現有的 bucket IAM 政策 (GET https://storage.s3nsapis.fr/storage/v1/b/<var>BUCKET_NAME</var>/iam),將下列繫結附加至其 bindings 陣列,然後將合併的政策儲存為 sink_policy.json:

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

    更改項目:

    • SERVICE_AGENT_EMAIL:服務代理電子郵件。
    • OBJECT_ROLE:預設指定 objectUser,如要保留物件 ACL (ACL_PRESERVE),則指定 objectAdmin。
  3. 使用 curl 提交 PUT 要求:

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

    更改項目:

    • OAUTH2_TOKEN:在步驟 1 產生的 OAuth 2.0 存取權杖。
    • BUCKET_NAME:目的地 bucket 的名稱。

代理程式驅動的移轉作業

下列預先定義的角色會將目的地 bucket 的必要存取權授予服務代理:

  • Storage 物件建立者 (roles/storage.objectCreator)
  • Storage 物件檢視者 (roles/storage.objectViewer)
  • Storage 舊版值區讀取者 (roles/storage.legacyBucketReader)

下列角色會將目的地 bucket 的必要存取權授予移轉代理帳戶:

  • Storage 物件使用者 (roles/storage.objectUser)

請在目的地 bucket 授予這些角色。

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 按一下目的地 bucket 的「Bucket overflow」選單 (),然後選取「編輯權限」。
  3. 按一下「+ 新增主體」。
  4. 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
  5. 從「Select a role」(選取角色) 下拉式選單中,選取 Storage Object Creator、Storage Object Viewer 和 Storage Legacy Bucket Reader。
  6. 再次點選「+ 新增主體」。
  7. 輸入轉移代理帳戶的電子郵件地址。這是安裝移轉代理程式時使用的使用者或服務帳戶。例如 my-agent-sa@PROJECT_ID.s3ns.iam.gserviceaccount.com 或 user@example.com。
  8. 從「Select a role」(選取角色) 下拉式選單中選取「Storage Object User」。
  9. 按一下「儲存」。

gcloud

  1. 將記錄和檢視者角色授予服務代理:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. 將寫入和管理角色授予移轉代理帳戶:

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

    更改項目:

    • BUCKET_NAME:目的地 bucket 的名稱。
    • SERVICE_AGENT_EMAIL:服務代理電子郵件。
    • serviceAccount_OR_user:如果移轉代理程式帳戶是服務帳戶,請指定 serviceAccount;如果代理程式是透過使用者帳戶安裝,請指定 user。
    • TRANSFER_AGENT_ACCOUNT:安裝移轉代理程式的帳戶電子郵件地址。例如 my-agent-sa@PROJECT_ID.s3ns.iam.gserviceaccount.com 或 user@example.com。

REST API

  1. 產生存取權杖,驗證要求。如果您使用的是 gcloud CLI,請執行:

    gcloud auth print-access-token
  2. 擷取現有的 bucket IAM 政策 (GET https://storage.s3nsapis.fr/storage/v1/b/<var>BUCKET_NAME</var>/iam),將下列繫結附加至其 bindings 陣列,然後將合併的政策儲存為 agent_sink_policy.json:

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

    更改項目:

    • SERVICE_AGENT_EMAIL:服務代理電子郵件。
    • serviceAccount_OR_user:如果移轉代理程式帳戶是服務帳戶,請指定 serviceAccount;如果代理程式是透過使用者帳戶安裝,請指定 user。
    • TRANSFER_AGENT_ACCOUNT:安裝移轉代理程式的帳戶電子郵件地址。例如 my-agent-sa@PROJECT_ID.s3ns.iam.gserviceaccount.com 或 user@example.com。
  3. 透過 curl 更新 bucket 政策:

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

    更改項目:

    • OAUTH2_TOKEN:在步驟 1 產生的 OAuth 2.0 存取權杖。
    • BUCKET_NAME:目的地 bucket 的名稱。

精細權限參考資料

選取移轉類型,查看必要的角色和權限。

無代理程式移轉

如要執行無代理程式移轉作業,必須將權限授予 Storage 移轉服務代理:

權限 說明
storage.buckets.get 允許服務代理檢查 bucket 中繼資料和位置。
storage.objects.create 允許服務代理將移轉的物件寫入目的地 bucket。
storage.objects.get 可查看現有物件和中繼資料。如果移轉作業設為在不同或從未覆寫時,覆寫接收端中的物件,則為必要。
storage.objects.list 允許列出目的地 bucket 中的物件。如要檢查接收器中是否已有物件,則必須提供這項資訊。
storage.objects.delete 允許刪除目的地 bucket 中的物件。如果啟用覆寫或刪除不重複物件選項,則必須提供這項資訊。
storage.objects.setIamPolicy 允許在目的地 bucket 中設定物件 ACL。如果啟用物件 ACL 保留功能 (ACL_PRESERVE),則為必填。
storage.folders.create
storage.folders.get
可建立及讀取資料夾。如要移轉至已啟用階層命名空間的目的地 bucket,就必須提供這項資訊。

代理程式驅動的移轉作業

如要透過代理程式將資料移轉至 Cloud Storage 目的地,權限會分配給兩個主體:

  • 服務代理:必須具備寫入移轉記錄,以及驗證目的地 bucket 中是否存在物件的權限。

  • 移轉代理程式帳戶:執行移轉代理程式的服務帳戶或使用者帳戶,負責將檔案寫入 Cloud Storage。

服務代理權限

權限 說明
storage.buckets.get 允許服務代理檢查 bucket 中繼資料和位置。
storage.objects.create 允許在 bucket 中建立移轉記錄。
storage.objects.get 可檢查物件是否已轉移。

轉移代理帳戶權限

權限 說明
storage.objects.create 允許代理在移轉期間將物件寫入目的地值區。
storage.objects.get 允許代理讀取目的地 bucket 中的物件資料和中繼資料。
storage.objects.list 允許代理列出目標值區中的現有物件。
storage.objects.delete 如果移轉作業設定為覆寫或刪除接收端中的物件,則為必要。
storage.multipartUploads.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
允許代理對大型檔案執行多部分上傳。自動納入 roles/storage.objectUser。
storage.folders.create
storage.folders.get
允許代理在轉移至已啟用階層命名空間的目的地 bucket 時,建立及讀取資料夾。

後續步驟