Dataproc 服務帳戶

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

什麼是服務帳戶?

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

Dataproc 服務帳戶

以下服務帳戶已獲授權,可在叢集所在的專案中執行 Dataproc 動作。

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

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

查看及管理身分與存取權管理服務帳戶角色

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

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

    前往身分與存取權管理頁面

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

  3. 查看 VM 服務帳戶的角色清單。下圖顯示 Compute Engine 預設服務帳戶 (project_number-compute@developer.gserviceaccount.com) 的必要 Dataproc 工作站角色,Dataproc 預設會將該帳戶用作 VM 服務帳戶。

  4. 您可以按一下服務帳戶列上顯示的鉛筆圖示,授予或移除服務帳戶角色

Dataproc VM 存取範圍

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

最佳做法是將廣泛的 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 服務帳戶建立叢集

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

初步步驟

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

  2. 授予自訂 VM 服務帳戶專案中的 Dataproc 工作站角色,以及工作所需的任何其他角色,例如 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:包含VM 服務帳戶的專案的 Google Cloud 專案 ID。這是叢集建立所在專案的 ID,如果您在另一個叢集中使用自訂 VM 服務帳戶建立叢集,則為另一個專案的 ID。
  • SCOPE:叢集 VM 執行個體的存取範圍 (例如 https://www.googleapis.com/auth/cloud-platform)。

REST API

clusters.create API 要求中完成 GceClusterConfig 時,請設定下列欄位:

控制台

系統不支援在 Google Cloud 主控台中設定 Dataproc VM 服務帳戶。建立叢集時,您可以按一下 Dataproc 主控台「Create a cluster」��頁面「Manage security」面板的「Project access」 部分中的「Enables the cloud-platform scope for this cluster」(為此叢集啟用雲端平台範圍),設定叢集 VM 的 cloud-platform 存取範圍。 Google Cloud

使用其他專案的自訂 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"
    
    • 以下範例指令會在叢集專案中,為 Dataproc 服務代理人服務帳戶授予 VM 服務帳戶層級的服務帳戶使用者和服務帳戶權杖建立者角色:
    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 Service 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"
     
    • 下列範例指令會在叢集專案中,為 Compute Engine 服務代理服務帳戶授予 VM 服務帳戶層級的服務帳戶權杖建立者角色:
    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"
     

建立叢集

後續步驟