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 移轉服務指令中識別該代理,請按照下列步驟操作:
- 前往
googleServiceAccounts.get參考頁面。互動式面板隨即開啟,標題為「試用這個方法」。 - 在面板的「Request parameters」(要求參數) 下方,輸入專案 ID。
- 點選「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 政策:
控制台
- 前往 Cloud de Confiance 控制台的「Cloud Storage bucket」頁面。
- 按一下目的地 bucket 的「Bucket overflow」(Bucket 溢位) 選單 ()。
- 選擇「編輯權限」。
- 按一下「+ 新增主體」。
- 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
- 從「Select a role」(選取角色) 下拉式選單中選取「
Storage Legacy Bucket Reader」。 - 按一下「新增其他角色」,然後選取「
Storage Object User」,或選取「Storage Object Admin」來保留物件 ACL。 - 按一下「儲存」。
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
產生存取權杖,驗證要求。如果您使用的是
gcloudCLI,請執行:gcloud auth print-access-token
擷取現有的 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。
使用
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 授予這些角色。
控制台
- 前往 Cloud de Confiance 控制台的「Cloud Storage bucket」頁面。
- 按一下目的地 bucket 的「Bucket overflow」選單 (),然後選取「編輯權限」。
- 按一下「+ 新增主體」。
- 在「New principals」(新增主體) 中,輸入服務代理電子郵件。
- 從「Select a role」(選取角色) 下拉式選單中,選取
Storage Object Creator、Storage Object Viewer和Storage Legacy Bucket Reader。 - 再次點選「+ 新增主體」。
- 輸入轉移代理帳戶的電子郵件地址。這是安裝移轉代理程式時使用的使用者或服務帳戶。例如
my-agent-sa@PROJECT_ID.s3ns.iam.gserviceaccount.com或user@example.com。 - 從「Select a role」(選取角色) 下拉式選單中選取「
Storage Object User」。 - 按一下「儲存」。
gcloud
將記錄和檢視者角色授予服務代理:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorgcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud 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_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
產生存取權杖,驗證要求。如果您使用的是
gcloudCLI,請執行:gcloud auth print-access-token
擷取現有的 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。
透過
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.createstorage.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.createstorage.multipartUploads.abortstorage.multipartUploads.listPartsstorage.multipartUploads.list |
允許代理對大型檔案執行多部分上傳。自動納入 roles/storage.objectUser。 |
storage.folders.createstorage.folders.get |
允許代理在轉移至已啟用階層命名空間的目的地 bucket 時,建立及讀取資料夾。 |