Storage 移轉服務會使用服務代理程式,從 Cloud Storage 來源 bucket 移轉資料。首次呼叫 googleServiceAccounts.get 時,系統會建立這項服務代理程式。
來源 bucket 不必與服務代理屬於相同專案。無論 bucket 位於哪個專案,步驟都相同。
使用者權限
如要授予服務代理必要權限,您必須具備來源 bucket 的相關權限:
storage.buckets.getIamPolicystorage.buckets.setIamPolicy
Storage 舊版 bucket 擁有者角色 (roles/storage.legacyBucketOwner) 或 Storage 管理員角色 (roles/storage.admin) 可提供必要權限。
在 Google Cloud 控制台中自動授予權限
如果您使用 Google Cloud 控制台建立轉移作業,且具備「使用者授權」一節列出的權限,系統會自動授予服務代理來源 bucket 的必要權限。
您可以略過本頁步驟,直接建立移轉作業。
所需權限
服務代理必須具備來源 bucket 的下列權限:
| 權限 | 說明 |
|---|---|
storage.buckets.get |
允許服務代理取得 bucket 的位置。 |
storage.objects.list |
允許服務代理列出 bucket 中的物件。 |
storage.objects.get |
允許服務代理讀取 bucket 中的物件。 |
storage.objects.create |
允許服務代理在 bucket 中建立物件。如果轉移至檔案系統,則為必要項目。 Storage 移轉服務會在來源 bucket 中建立並填入兩個資料夾: |
storage.objects.delete |
允許服務代理刪除 bucket 中的物件。如果將 deleteObjectsFromSourceAfterTransfer 設為 true,就必須提供這項屬性。 |
storage.objects.getIamPolicy |
允許服務代理讀取來源物件的 ACL。如果已啟用物件 ACL 保留功能 (ACL_PRESERVE),則為必填。 |
下列預先定義的角色會共同授予必要權限:
- 擇一採用下列格式:
- 如果轉移至其他 Cloud Storage bucket,則為 Storage 物件檢視者 (
roles/storage.objectViewer)。 - Storage 物件建立者 (
roles/storage.objectCreator),前提是轉移至檔案系統。
- 如果轉移至其他 Cloud Storage bucket,則為 Storage 物件檢視者 (
- 加上下列其中一項:
- Storage 舊版 bucket 寫入者 (
roles/storage.legacyBucketWriter) (如需物件刪除權限)。 - Storage 舊版 bucket 讀取者 (
roles/storage.legacyBucketReader) (如果不需要物件刪除權限)。
- Storage 舊版 bucket 寫入者 (
- 此外,如果使用
ACL_PRESERVE保留物件 ACL:- Storage 舊版物件擁有者 (
roles/storage.legacyObjectOwner)
- Storage 舊版物件擁有者 (
標示為 legacy 的 Cloud Storage 角色只能在 bucket 層級授予。
如需 Cloud Storage 角色的完整清單及其權限,請參閱身分與存取權管理角色一文。
授予必要權限
如要將必要權限授予服務代理,請按照下列步驟操作。
找出服務代理的電子郵件地址
前往
googleServiceAccounts.get參考頁面。系統會開啟互動式面板,標題為「試試這個方法」。
在面板的「要求參數」下方,輸入專案 ID。您在此指定的專案必須是用來管理 Storage 移轉服務的專案,可能與來源 bucket 的專案不同。
點選「Execute」。
服務代理的電子郵件會以
accountEmail的值傳回。複製這個值。服務代理的電子郵件地址格式為
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com。
將服務代理程式新增至 bucket 層級政策
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
按一下與要授予主體角色的 bucket 相關聯的「Bucket overflow」(bucket 溢位) 選單 ()。
選擇「編輯權限」。
按一下「+ 新增主體」按鈕。
在「New principals」(新增主體) 欄位中,輸入服務代理的帳戶電子郵件。
從「Select a role」(選取角色) 下拉式選單中,選取「
Storage Object Viewer」或「Storage Object Creator」。按一下 [Add another role] (新增其他角色)。
選取「
Storage Legacy Bucket Writer」或「Storage Legacy Bucket Reader」。按一下 [儲存]。
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
更改下列內容:
BUCKET_NAME是您要授予主體存取權的 bucket 名稱。例如:my-bucket。YOUR_AGENT_EMAIL是您在「找出服務專員的電子郵件地址」中複製的服務專員帳戶電子郵件地址。
程式碼範例
C++
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱 Cloud Storage C++ API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱 Cloud Storage C# API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱「Cloud Storage Go API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱「Cloud Storage Node.js API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱「Cloud Storage PHP API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
如要瞭解如何安裝及使用 Cloud Storage 的用戶端程式庫,請參閱「Cloud Storage 用戶端程式庫」。詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":[ "YOUR_AGENT_EMAIL" ] }, { "role": "roles/storage.legacyBucketReader", "members":[ "YOUR_AGENT_EMAIL" ] } ] }
更改下列內容:
YOUR_AGENT_EMAIL是您在「找出服務代理的電子郵件地址」中複製的代理帳戶電子郵件地址。
使用
cURL來透過PUT setIamPolicy要求呼叫呼叫 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
更改下列內容:
JSON_FILE_NAME是您在步驟 2 建立的檔案路徑。OAUTH2_TOKEN是您在步驟 1 中產生的存取權杖。BUCKET_NAME是要授予主體存取權的 bucket 名稱。例如:my-bucket。