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 移轉服務指令中識別該代理,請按照下列步驟操作:
- 前往
googleServiceAccounts.get參考頁面。互動式面板隨即開啟,標題為「試用這個方法」。 - 在面板的「Request parameters」(要求參數) 下方,輸入專案 ID。
- 點選「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)。這項角色也支援在移轉後刪除來源物件。
- 如果保留來源物件,則為 Storage 物件檢視者 (
將服務代理新增至來源 bucket IAM 政策:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
- 按一下來源 bucket 的「Bucket overflow」(Bucket 溢位) 選單 ()。
- 選擇「編輯權限」。
- 按一下「+ 新增主體」。
- 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
- 從「Select a role」(選取角色) 下拉式選單中選取「
Storage Legacy Bucket Reader」。 - 按一下「Add another role」(新增其他角色),然後選取下列其中一項:
Storage Object ViewerStorage Object UserStorage Object Admin
- 按一下「儲存」。
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
產生存取權杖,驗證要求。如果您使用的是
gcloudCLI,請執行:gcloud auth print-access-token
擷取現有的 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。
使用
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 授予這些角色。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
- 按一下來源 bucket 的「Bucket overflow」(Bucket 溢位) 選單 (),然後選取「Edit access」(編輯權限)。
- 按一下「+ 新增主體」。
- 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
- 在「選取角色」下拉式選單中,選取「
Storage Legacy Bucket Reader」和「Storage Object Creator」。 - 再次點選「+ 新增主體」。
- 輸入轉移代理帳戶的電子郵件地址。這是安裝移轉代理程式時使用的使用者或服務帳戶。例如
my-agent-sa@PROJECT_ID.或user@example.com。 - 如要保留來源物件,請選取
Storage Object Viewer;如要在移轉後刪除來源物件,請選取Storage Object User。 - 按一下「儲存」。
gcloud
將 bucket 中繼資料讀取和移轉記錄寫入角色授予服務代理:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReadergcloud 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_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
產生存取權杖,驗證要求。如果您使用的是
gcloudCLI,請執行:gcloud auth print-access-token
擷取現有的 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。
透過
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 的權限,授予建立移轉作業的專案服務代理。
建立移轉作業的使用者帳戶或使用者自行管理的服務帳戶,只需要具備建立移轉工作的專案權限。
如要授予跨專案移轉作業的角色,請按照下列步驟操作:
- 取得要執行移轉作業的專案服務代理電子郵件地址。請參閱「找出服務代理電子郵件地址」。
- 在來源 bucket,將下列角色授予該服務代理:
- Storage 舊版值區讀取者 (
roles/storage.legacyBucketReader) - 以及下列其中一個物件角色:
- Storage 物件檢視者 (
roles/storage.objectViewer) (如要保留來源物件)。 - Storage 物件使用者 (
roles/storage.objectUser):如果要在移轉後刪除來源物件 (deleteObjectsFromSourceAfterTransfer)。 - 如要保留物件 ACL (
ACL_PRESERVE),請使用 Storage 物件管理員 (roles/storage.objectAdmin)。這項角色也支援在移轉後刪除來源物件。
- Storage 物件檢視者 (
- Storage 舊版值區讀取者 (
- 在目的地 bucket 中,將下列角色授予同一個服務代理:
- Storage 舊版值區讀取者 (
roles/storage.legacyBucketReader) - Storage 物件使用者 (
roles/storage.objectUser),或 Storage 物件管理員 (roles/storage.objectAdmin) (如要保留物件 ACL (ACL_PRESERVE))。
- Storage 舊版值區讀取者 (
如需授予目的地 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.liststorage.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.liststorage.folders.get |
允許代理從已啟用階層命名空間的 bucket 轉移資料時,列出及讀取資料夾。 |
後續步驟
您必須設定目的地的存取權: