設定來源的存取權:Cloud Storage

Storage 移轉服務可使用 Cloud Storage 來源 bucket 執行兩種移轉作業:

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

  • 代理程式驅動的移轉作業:涉及檔案系統或地端部署儲存空間的移轉作業,使用移轉代理程式和代理程式集區。您必須將權限授予服務代理和移轉代理帳戶。

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

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

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

必要條件

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

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

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

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

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

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

複製 accountEmail 的值。格式如下:project-PROJECT_NUMBER@storage-transfer-service.。

授予必要權限

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

無代理程式移轉

下列預先定義的角色會將來源 bucket 的必要權限授予服務代理:

  • Storage 舊版值區讀取者 (roles/storage.legacyBucketReader)
  • 以及下列其中一項:
    • 如果保留來源物件,則為 Storage 物件檢視者 (roles/storage.objectViewer)。
    • Storage 物件使用者 (roles/storage.objectUser):如果要在移轉後刪除來源物件 (deleteObjectsFromSourceAfterTransfer)。
    • 如要保留物件 ACL (ACL_PRESERVE),請使用 Storage 物件管理員 (roles/storage.objectAdmin)。這項角色也支援在移轉後刪除來源物件。

將服務代理新增至來源 bucket IAM 政策:

控制台

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

    前往「Buckets」(值區) 頁面

  2. 按一下來源 bucket 的「Bucket overflow」(Bucket 溢位) 選單 ()。
  3. 選擇「編輯權限」。
  4. 按一下「+ 新增主體」。
  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. 按一下「儲存」。

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:來源 bucket 的名稱。
  • SERVICE_AGENT_EMAIL:服務代理電子郵件。
  • OBJECT_ROLE:根據轉移選項,選擇下列其中一項:
  • objectViewer:是否保留來源物件。
  • objectUser:是否在轉移後刪除來源物件。
  • objectAdmin:是否保留物件 ACL。也支援在移轉後刪除來源物件。

REST API

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

    gcloud auth print-access-token
  2. 擷取現有的 bucket 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;如要保留物件 ACL,請選擇 objectAdmin。
  3. 使用 curl 提交 PUT 要求:

    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:在步驟 1 產生的 OAuth 2.0 存取權杖。
    • BUCKET_NAME:來源 bucket 的名稱。

代理程式驅動的移轉作業

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

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

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

  • Storage 物件檢視者 (roles/storage.objectViewer) (如要保留來源物件),或 Storage 物件使用者 (roles/storage.objectUser) (如要在移轉後刪除來源物件)。

請在來源 bucket 授予這些角色。

控制台

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

    前往「Buckets」(值區) 頁面

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

gcloud

  1. 將 bucket 中繼資料讀取和移轉記錄寫入角色授予服務代理:

    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:來源 bucket 的名稱。
    • SERVICE_AGENT_EMAIL:服務代理電子郵件。
    • serviceAccount_OR_user:如果移轉代理程式帳戶是服務帳戶,請指定 serviceAccount;如果代理程式是透過使用者帳戶安裝,請指定 user。
    • TRANSFER_AGENT_ACCOUNT:安裝移轉代理程式的帳戶電子郵件地址。例如 my-agent-sa@PROJECT_ID. 或 user@example.com。
    • OBJECT_ROLE:如要保留來源物件,請指定 objectViewer;如要在移轉後刪除來源物件,請指定 objectUser。

REST API

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

    gcloud auth print-access-token
  2. 擷取現有的 bucket 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 更新 bucket 政策:

    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:在步驟 1 產生的 OAuth 2.0 存取權杖。
    • BUCKET_NAME:來源 bucket 的名稱。

跨專案 Cloud Storage 移轉作業

如要在不同 Google Cloud 雲端專案的 Cloud Storage bucket 之間移轉物件,您必須將來源 bucket 和目的地 bucket 的權限,授予建立移轉作業的專案服務代理。

建立移轉作業的使用者帳戶或使用者自行管理的服務帳戶,只需要具備建立移轉工作的專案權限。

如要授予跨專案移轉作業的角色,請按照下列步驟操作:

  1. 取得要執行移轉作業的專案服務代理電子郵件地址。請參閱「找出服務代理電子郵件地址」。
  2. 在來源 bucket,將下列角色授予該服務代理:
    • Storage 舊版值區讀取者 (roles/storage.legacyBucketReader)
    • 以及下列其中一個物件角色:
      • Storage 物件檢視者 (roles/storage.objectViewer) (如要保留來源物件)。
      • Storage 物件使用者 (roles/storage.objectUser):如果要在移轉後刪除來源物件 (deleteObjectsFromSourceAfterTransfer)。
      • 如要保留物件 ACL (ACL_PRESERVE),請使用 Storage 物件管理員 (roles/storage.objectAdmin)。這項角色也支援在移轉後刪除來源物件。
  3. 在目的地 bucket 中,將下列角色授予同一個服務代理:
    • Storage 舊版值區讀取者 (roles/storage.legacyBucketReader)
    • Storage 物件使用者 (roles/storage.objectUser),或 Storage 物件管理員 (roles/storage.objectAdmin) (如要保留物件 ACL (ACL_PRESERVE))。

如需授予目的地 bucket 存取權的逐步說明,請參閱「設定接收器的存取權:Cloud Storage」。

組織權限限制

如果貴組織已套用組織政策限制,請確認這些限制允許跨專案服務代理存取:

  • 網域限定共用 (constraints/iam.allowedPolicyMemberDomains):託管 bucket 的專案政策必須允許包含服務代理的成員網域。請參閱「限制網域」。
  • 停用跨專案服務帳戶使用 (constraints/iam.disableCrossProjectServiceAccountUsage):請確保這項限制不會阻擋跨專案服務帳戶存取。請參閱「限制服務帳戶」。
  • VPC Service Controls:如果 bucket 屬於不同的 service perimeter,請設定輸入和輸出規則,允許移轉通訊。請參閱「設定 VPC Service Controls 以進行雲端物件儲存庫移轉作業」。

精細權限參考資料

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

無代理程式移轉

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

權限 說明
storage.buckets.get 允許服務代理取得 bucket 的位置。
storage.objects.list 允許服務代理列出 bucket 中的物件。
storage.objects.get 允許服務代理讀取 bucket 中的物件。
storage.objects.delete 允許服務代理刪除 bucket 中的物件。如果 deleteObjectsFromSourceAfterTransfer 為 true,則為必要欄位。
storage.objects.getIamPolicy 可讀取來源物件的 ACL。如果啟用物件 ACL 保留功能 (ACL_PRESERVE),則為必填。
storage.folders.list
storage.folders.get
可列出及讀取資料夾。從已啟用階層命名空間的 bucket 移轉時,必須提供這項資訊。

代理程式驅動的移轉作業

如要透過代理程式從 Cloud Storage 來源移轉資料,權限會分配給兩個主體:

  • 服務代理:需要 bucket 層級的讀取權限,才能解析 bucket 中繼資料和位置,以及物件建立權限,才能寫入代理移轉記錄。

  • 移轉代理帳戶:用於建立移轉代理的服務帳戶或使用者帳戶。

服務代理權限

權限 說明
storage.buckets.get 允許服務代理檢查 bucket 中繼資料和位置。
storage.objects.create 允許服務代理在從 Cloud Storage 移轉至檔案系統時,將代理移轉記錄寫入來源 bucket。

轉移代理帳戶權限

權限 說明
storage.objects.list 允許代理列出來源 bucket 中的物件。
storage.objects.get 允許代理從來源 bucket 讀取物件。
storage.objects.delete 如果啟用 deleteObjectsFromSourceAfterTransfer,代理就能刪除來源物件。
storage.folders.list
storage.folders.get
允許代理從已啟用階層命名空間的 bucket 轉移資料時,列出及讀取資料夾。

後續步驟

您必須設定目的地的存取權: