Dataproc 服務帳戶

本頁說明服務帳戶和 VM 存取權範圍,以及如何透過 Dataproc 使用這些帳戶和範圍。

什麼是服務帳戶?

服務帳戶是一種特殊帳戶,可供 Compute Engine 虛擬機器 (VM) 執行個體上執行的服務和應用程式使用,以便與其他 Google Cloud API 互動。應用程式可以透過服務帳戶憑證自行取得一組 API 的授權,並在授予服務帳戶的權限內,在 VM 上執行操作。

Dataproc 服務帳戶

下列服務帳戶已獲得必要權限,可在叢集所在的專案中執行 Dataproc 動作。

  • Dataproc VM 服務帳戶: Dataproc 叢集中的 VM 會使用這個服務帳戶執行 Dataproc資料層作業。 除非您在建立叢集時指定 VM 服務帳戶,否則系統會使用 Compute Engine 預設服務帳戶做為 Dataproc VM 服務帳戶。project_number-compute@developer.gserviceaccount.com根據預設,Compute Engine 預設服務帳戶會獲得 Dataproc 工作者角色, 其中包含 Dataproc 資料平面作業所需的權限。

    自訂服務帳戶:如果您在建立叢集時指定自訂服務帳戶,則必須授予自訂服務帳戶執行 Dataproc 資料平面作業所需的權限。您可以將 Dataproc 工作者角色指派給服務帳戶,因為這個角色包含 Dataproc 資料平面作業所需的權限。

    其他角色:您可以授予 VM 服務帳戶其他預先定義或自訂角色,這些角色包含其他作業所需的權限,例如從 Cloud Storage、BigQuery、Cloud Logging 和其他 Google Cloud 資源讀取及寫入資料 (詳情請參閱「查看及管理 IAM 服務帳戶角色」)。

  • Dataproc 服務代理人服務帳戶: Dataproc 會在 Dataproc 使用者的 Google Cloud 專案中,以「Dataproc 服務代理人」角色建立服務代理人服務帳戶 service-project_number@dataproc-accounts.iam.gserviceaccount.com。在您建立叢集時,此服務帳戶不得替換為自訂 VM 服務帳戶。這個服務代理帳戶可用於執行 Dataproc 控制層作業,例如建立、更新及刪除叢集 VM。

共用虛擬私有雲網路:如果叢集使用共用虛擬私有雲網路,共用虛擬私有雲管理員必須將共用虛擬私有雲主專案的網路使用者角色,授予 Dataproc 服務代理人服務帳戶。如需詳細資訊,請參閱:

查看及管理 IAM 服務帳戶角色

如要查看及管理授予 Dataproc VM 服務帳戶的角色,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「IAM」IAM頁面。

    前往「IAM」(身分與存取權管理) 頁面

  2. 按一下「包含 Google 提供的角色授權」

  3. 查看 VM 服務帳戶列出的角色。下圖顯示 Compute Engine 預設服務帳戶 (project_number-compute@developer.gserviceaccount.com) 的必要 Dataproc 工作者角色,Dataproc 預設會將這個帳戶做為 VM 服務帳戶。

  4. 您可以點選服務帳戶列中顯示的鉛筆圖示,授予或移除服務帳戶角色

Dataproc VM 存取範圍

VM 存取範圍和 IAM 角色會共同限制 VM 對 API 的存取權。 Google Cloud舉例來說,如果叢集 VM 只獲得 https://www.googleapis.com/auth/storage-full 範圍的存取權,在叢集 VM 上執行的應用程式就能呼叫 Cloud Storage API,但即使這些應用程式是以已獲授權的 VM 服務帳戶身分執行,且該帳戶已獲授權具有廣泛權限的 BigQuery 角色,應用程式也無法向 BigQuery 提出要求。

最佳做法是將廣泛的 cloud-platform 範圍 (https://www.googleapis.com/auth/cloud-platform) 授予 VM,然後將特定 IAM 角色授予 VM 服務帳戶,藉此限制 VM 存取權。

預設 Dataproc VM 範圍。如果建立叢集時未指定範圍 (請參閱 gcloud dataproc cluster create --scopes),Dataproc VM 會使用下列預設範圍集:

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/bigtable.admin.table
https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

如果您在建立叢集時指定範圍,叢集 VM 會具有您指定的範圍下列最低必要範圍集 (即使您未指定這些範圍):

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

使用自訂 VM 服務帳戶建立叢集

建立叢集時,您可以指定自訂VM 服務帳戶,供叢集用於 Dataproc 資料層作業,而非預設 VM 服務帳戶 (叢集建立後就無法變更 VM 服務帳戶)。使用已指派 IAM 角色的 VM 服務帳戶,可為叢集提供專案資源的精細存取權。

初步步驟

  1. 在要建立叢集的專案中建立自訂 VM 服務帳戶

  2. 在專案中將「Dataproc Worker」角色授予自訂 VM 服務帳戶,並授予工作所需的任何其他角色,例如 BigQuery「Reader」和「Writer」角色 (請參閱「Dataproc 權限和 IAM 角色」)。

    gcloud CLI 範例:

    • 以下指令範例會將專案層級的 Dataproc 工作站角色,授予叢集專案中的自訂 VM 服務帳戶:
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • 考慮使用自訂角色:您可以授予服務帳戶自訂角色,其中包含 Worker 角色權限,但會限制 storage.objects.* 權限,而不是授予服務帳戶預先定義的 Dataproc Worker 角色。
      • 自訂角色至少須授予 VM 服務帳戶在Dataproc 暫存和臨時值區中的物件,以及叢集上執行的工作所需的任何其他值區,具有 storage.objects.createstorage.objects.getstorage.objects.update 權限。

建立叢集

  • 在專案中建立叢集。

gcloud 指令

使用 gcloud dataproc clusters create 指令,以自訂 VM 服務帳戶建立叢集。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

取代下列項目:

  • CLUSTER_NAME:叢集名稱,在專案中不得重複。 名稱開頭須為小寫英文字母,最多可包含 51 個小寫英文字母、數字和連字號。結尾不得為連字號。刪除叢集後,即可再次使用該叢集的名稱。
  • REGION:叢集所在的區域
  • SERVICE_ACCOUNT_NAME:服務帳戶名稱。
  • PROJECT_ID:包含 Google Cloud 虛擬機器服務帳戶的專案 ID。這是要建立叢集的專案 ID,如果您要在其他叢集中建立使用自訂 VM 服務帳戶的叢集,則為其他專案的 ID。
  • SCOPE:叢集 VM 執行個體的存取範圍 (例如 https://www.googleapis.com/auth/cloud-platform)。

REST API

完成 GceClusterConfig 做為 clusters.create API 要求的一部分時,請設定下列欄位:

控制台

系統不支援在 Google Cloud 主控台中設定 Dataproc VM 服務帳戶。在 Google Cloud 控制台的 Dataproc「建立叢集頁面中,按一下「管理安全性」面板的「啟用這個叢集的 cloud-platform 範圍」,即可在建立叢集時,設定叢集 VM 的cloud-platform存取範圍

使用其他專案的自訂 VM 服務帳戶建立叢集

建立叢集時,您可以指定叢集要用於 Dataproc 資料層作業的自訂VM 服務帳戶,而非預設 VM 服務帳戶 (叢集建立後就無法指定自訂 VM 服務帳戶)。使用指派 IAM 角色的自訂 VM 服務帳戶,可為叢集提供專案資源的精細存取權。

初步步驟

  1. 在服務帳戶專案 (自訂 VM 服務帳戶所在的專案) 中:

    1. 啟用服務帳戶,以便跨專案附加

    2. Enable the Dataproc API.

      Enable the API

  2. 將服務帳戶專案的服務帳戶使用者角色授予您的電子郵件帳戶 (建立叢集的使用者),或在服務帳戶專案中,將自訂 VM 服務帳戶的相同角色授予您的電子郵件帳戶,以進行更精細的控制。

    如需更多資訊:請參閱「管理專案、資料夾和機構的存取權」一文,瞭解如何授予專案層級的角色,以及「管理服務帳戶的存取權」一文,瞭解如何授予服務帳戶層級的角色。

    gcloud CLI 範例:

    • 以下範例指令會授予使用者專案層級的服務帳戶使用者角色:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    附註: USER_EMAIL:請提供使用者帳戶電子郵件地址,格式如下: user:user-name@example.com

    • 下列範例指令會在服務帳戶層級,將服務帳戶使用者角色授予使用者:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    附註: USER_EMAIL:請提供使用者帳戶電子郵件地址,格式如下: user:user-name@example.com

  3. 在叢集專案中,將 Dataproc 工作站角色授予自訂 VM 服務帳戶。

    gcloud CLI 範例:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. 在叢集專案中,將服務帳戶使用者服務帳戶權杖建立者角色授予Dataproc 服務代理服務帳戶,對象可以是服務帳戶專案,也可以是服務帳戶專案中的自訂 VM 服務帳戶 (如要進行更精細的控制)。這麼做可讓叢集專案中的 Dataproc 服務代理人服務帳戶,為服務帳戶專案中的自訂 Dataproc VM 服務帳戶建立權杖。

    如需更多資訊:請參閱「管理專案、資料夾和機構的存取權」一文,瞭解如何授予專案層級的角色,以及「管理服務帳戶的存取權」一文,瞭解如何授予服務帳戶層級的角色。

    gcloud CLI 範例:

    • 下列範例指令會授予叢集專案中的 Dataproc 服務代理人服務帳戶專案層級的「服務帳戶使用者」和「服務帳戶權杖建立者」角色:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • 下列範例指令會在 VM 服務帳戶層級,授予叢集專案中的 Dataproc 服務代理人服務帳戶「服務帳戶使用者」和「服務帳戶權杖建立者」角色:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. 在叢集專案中,將Compute Engine 服務代理服務帳戶服務帳戶憑證建立者角色,授予服務帳戶專案,或授予服務帳戶專案中的自訂 VM 服務帳戶,以進行更精細的控制。這麼做可授予叢集專案中的 Compute Agent 服務代理人服務帳戶權限,為服務帳戶專案中的自訂 Dataproc VM 服務帳戶建立權杖。

    如需更多資訊:請參閱「管理專案、資料夾和機構的存取權」一文,瞭解如何授予專案層級的角色,以及「管理服務帳戶的存取權」一文,瞭解如何授予服務帳戶層級的角色。

    gcloud CLI 範例:

    • 下列範例指令會在專案層級,將服務帳戶權杖建立者角色授予叢集專案中的 Compute Engine 服務代理人服務帳戶:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • 下列範例指令會在 VM 服務帳戶層級,將服務帳戶權杖建立者角色授予叢集專案中的 Compute Engine 服務代理服務帳戶:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

建立叢集

後續步驟