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

對於無代理程式移轉,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 獲授 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 和 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. 從「Role」(角色) 下拉式清單中,選取「Service Account User」(服務帳戶使用者)

  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 欄位的值。

該值必須使用格式 projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID

字串中可接受服務帳戶電子郵件地址 (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) 或專屬 ID (123456789012345678901)。請務必使用 - 萬用字元,以專案 ID 取代該字元無效。

例如:

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": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}