將服務代理人權限委派給使用者管理的服務帳戶

對於無代理程式移轉,Storage 移轉服務預設會使用服務代理程式,在來源和目的地之間移轉資料。您授予服務代理存取 Cloud Storage 值區的權限。

由於專案內的所有轉移作業都使用相同的 Storage 移轉服務代理,因此該代理必須擁有所有轉移作業涉及值區的權限。

或者,您也可以改為將 bucket 權限指派給多個使用者管理的服務帳戶。這些使用者管理的服務帳戶會獲得特定來源和目的地 bucket 的權限,且僅限特定使用者帳戶 (建立或觸發轉移工作的帳戶) 使用。

範例情境

以下情境說明如何使用服務代理程式和使用者代管的服務帳戶,設定不同的權限選項。

展開各個部分即可查看詳細資料。

情境 1:僅限服務代理

在此情況下,所有權限都會授予服務代理程式。

  • 服務代理已獲授權,可寫入 bucket A、B、C 和 D。

只要使用者具備建立移轉作業的正確權限,就能將資料移入或移出 A、B、C 和 D 儲存空間。

如果 Storage 移轉服務使用者是所有 bucket 中資料的信任使用者,且能正確設定移轉工作,避免將資料移入或移出錯誤的 bucket,這個方法就非常適合。

情境 2:僅限使用者管理的服務代理

在此情境中,所有權限都會授予使用者管理的服務帳戶。

  • 使用者管理的服務帳戶 #1 已獲授 bucket A 和 B 的權限。
  • 使用者管理的服務帳戶 #2 獲授 bucket C 和 D 的權限。

此外:

  • 使用者 Alpha 獲得服務帳戶 #1 的存取權。
  • 使用者 Bravo 獲得服務帳戶 #2 的存取權。
  • 使用者 Charlie 獲准存取服務帳戶 #1 和 #2。

在這種情況下:

  • Alpha 只能在 Bucket A 和 Bucket B 之間轉移。
  • Bravo 只能在 C 和 D 儲存區之間轉移。
  • Charlie 只能在 A 和 B 之間,以及 C 和 D 之間轉移。
  • Charlie 無法在 A 和 C、A 和 D、B 和 C 或 B 和 D 之間轉移。

情境 3:混合權限

在這個情境中,專案同時包含服務代理權限和使用者管理的服務帳戶權限。

  • 服務代理會獲得 bucket A 和 B 的寫入權限。
  • 使用者管理的服務帳戶 #1 獲得 bucket C 的唯讀權限,以及 bucket D 的寫入權限。
  • 使用者 Alpha 獲准存取使用者管理的服務帳戶 #1。

在這種情況下:

  • 只要使用者具備建立轉移作業的適當權限,即可將資料轉移至 A 和 B 儲存空間,或從這兩個儲存空間轉移資料。無法轉移至 C 或 D 值區,也無法從這兩個值區轉移。
  • 使用者 Alpha 可以轉移至 Bucket A 和 Bucket B,也可以從這兩個 Bucket 轉移。
  • Alpha 可以將物件從 C 值區移出,並移入 D 值區。
  • Alpha 無法從 C 值區轉出至 A 或 B 值區。

導入程序總覽

實作方式如下:

  • 建立使用者管理的服務帳戶,或使用現有帳戶。
  • 授予權限:
    • 讓使用者存取使用者管理的服務帳戶。
    • 服務代理程式可從使用者管理的服務帳戶產生存取權杖
    • 讓使用者管理的服務帳戶存取您的 bucket。
  • 使用者建立移轉作業,並指定使用者代管的服務帳戶。
  • Storage 移轉服務會檢查使用者是否具備服務帳戶的正確權限。如果未授予正確的權限,轉移工作就會建立失敗。
  • 服務代理會代表使用者管理的服務帳戶產生 OAuth 權杖。OAuth 權杖可讓 Storage 移轉服務存取轉移作業涉及的值區。
  • 執行轉移工作。
  • OAuth 權杖效期短暫,如果轉移工作在權杖過期時正在進行,Storage 移轉服務會產生新的權杖,並繼續轉移。

設定權限委派

按照操作說明,將服務代理人存取權委派給使用者管理的服務帳戶。

需求條件

  • 如要建立新的使用者管理服務帳戶,您必須在專案中擁有「建立服務帳戶」(roles/iam.serviceAccountCreator) 角色。
  • 如要授予使用者和服務代理程式使用者管理的服務帳戶存取權,您必須擁有使用者管理的服務帳戶或專案的「服務帳戶管理員」roles/iam.serviceAccountAdmin角色。

建立或找出使用者代管的服務帳戶

您可以建立新的使用者管理服務帳戶,也可以使用現有帳戶。

  • 如要建立使用者管理的服務帳戶,請按照「建立服務帳戶」一文中的操作說明進行。

  • 如要使用現有的使用者代管服務帳戶,您需要該帳戶的電子郵件地址,格式如下:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

如果服務帳戶與轉移工作位於不同專案,請參閱「啟用服務帳戶,以便附加至不同專案」。

授予使用者存取權

授予使用者帳戶存取新使用者管理服務帳戶的權限,並指派「服務帳戶使用者」角色 (roles/iam.serviceAccountUser)。使用者帳戶是用來建立或更新轉移工作的帳戶。

Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。

  3. 按一下使用者代管服務帳戶的電子郵件地址。

  4. 選取「具備存取權的主體」分頁標籤。

  5. 按一下 「授予存取權」

  6. 輸入使用者的電子郵件地址。例如 user1@example.com

  7. 從「角色」下拉式清單中,選取「服務帳戶使用者」

  8. 按一下 [儲存]。主體就會取得服務帳戶的角色。

gcloud

如要將角色授予主體,請執行 add-iam-policy-binding 指令:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=PRINCIPAL --role=roles/iam.serviceAccountUser

請替換下列變數:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL:使用者管理的服務帳戶電子郵件地址,格式為 SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  • PRINCIPAL:執行轉移作業的使用者電子郵件地址,格式為 user:name@example.com

授予服務代理存取權

如要讓服務代理程式從使用者管理的服務帳戶產生存取權杖,請授予服務代理程式使用者管理的服務帳戶存取權,並指派「服務帳戶權杖建立者」角色 (roles/iam.serviceAccountTokenCreator)。

如要授予存取權,您需要服務代理的電子郵件地址。如要尋找服務專員的電子郵件地址,請按照下列步驟操作:

  1. 前往googleServiceAccounts.get參考資料頁面

    系統會開啟互動式面板,標題為「試試這個方法」

  2. 在面板的「Request parameters」下方,輸入專案 ID。您在此指定的專案,必須是您用來管理 Storage 移轉服務的專案。

  3. 點選「Execute」

    服務專員的電子郵件地址會以 accountEmail 的值傳回。格式為 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com

接著,如要授予服務代理使用者自行管理的服務帳戶存取權,請按照下列步驟操作:

Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。

  3. 按一下使用者代管服務帳戶的電子郵件地址。

  4. 選取「具備存取權的主體」分頁標籤。

  5. 按一下 「授予存取權」

  6. 輸入服務專員的電子郵件地址。

  7. 在「Role」(角色) 下拉式清單中,選取「Service Account Token Creator」(服務帳戶憑證建立者)

  8. 按一下 [儲存]。主體就會取得服務帳戶的角色。

gcloud

如要將角色授予主體,請執行 add-iam-policy-binding 指令:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator

請替換下列變數:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL:使用者管理的服務帳戶電子郵件地址,格式為 SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  • SERVICE_AGENT_EMAIL:服務代理的電子郵件地址。

將 bucket 權限授予使用者管理的服務帳戶

向使用者管理的服務帳戶授予「Google 管理的服務代理程式權限」一文列出的權限,而不是向服務代理程式授予權限。

使用使用者代管的服務帳戶建立移轉作業

授予正確權限後,您可以在建立新的轉移工作時,指定使用者管理的服務帳戶。

Google Cloud 控制台

按照操作說明建立轉移作業。完成轉移工作前,請先完成下列事項:

  1. 在「選擇設定」頁面中,找到「服務帳戶類型」部分。
  2. 選取「使用者自行管理的服務帳戶」
  3. 輸入使用者代管的服務帳戶電子郵件地址,格式為 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
  4. 按一下「建立」,即可建立轉移工作。

REST API

transferJobs.create 請求中,將使用者管理的服務帳戶指定為 serviceAccount 欄位的值。

系統接受服務帳戶電子郵件地址 (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) 或專屬 ID (123456789012345678901)。

例如:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}