本頁說明服務帳戶和 VM 存取權範圍,以及如何搭配 Dataproc 使用這些帳戶和範圍。
什麼是服務帳戶?
服務帳戶是一種特殊帳戶,可供 Compute Engine 虛擬機器 (VM) 執行個體上執行的服務和應用程式使用,以便與其他 Google Cloud API 互動。應用程式可以透過服務帳戶憑證自行取得一組 API 的授權,並在授予服務帳戶的權限內執行 VM 上的動作。
Dataproc 服務帳戶
以下服務帳戶已獲授權,可在叢集所在的專案中執行 Dataproc 動作。
Dataproc VM 服務帳戶:Dataproc 叢集中的 VM 會使用此服務帳戶執行 Dataproc 資料層作業。除非您在建立叢集時指定 VM 服務帳戶,否則系統會使用 Compute Engine 預設服務帳戶
project_number-compute@developer.gserviceaccount.com
做為 Dataproc VM 服務帳戶。根據預設,Compute Engine 預設服務帳戶會獲得 Dataproc 工作站角色,其中包含 Dataproc 資料平面作業所需的權限。自訂服務帳戶:如果您在建立叢集時指定自訂服務帳戶,則必須將 Dataproc 資料平面作業所需的權限授予自訂服務帳戶。您可以將 Dataproc 工作站角色指派給服務帳戶,因為這個角色包含 Dataproc 資料平面作業所需的權限。如要授予其他作業的權限 (例如讀取及寫入 BigQuery 的資料),就必須使用其他角色 (詳情請參閱「查看及管理 IAM 服務帳戶角色」)。
Dataproc 服務代理人服務帳戶:Dataproc 會在 Dataproc 使用者的 Google Cloud 專案中,以 Dataproc 服務代理人角色建立服務代理人服務帳戶
service-project_number@dataproc-accounts.iam.gserviceaccount.com
。在您建立叢集時,此服務帳戶不得替換為自訂的 VM 服務帳戶。這個服務代理帳戶可用來執行 Dataproc 控制層作業,例如建立、更新及刪除叢集 VM。
共用虛擬私有雲網路:如果叢集使用共用虛擬私有雲網路,共用 VPC 管理員必須將共用 VPC 主專案的網路使用者角色授予 Dataproc 服務代理人服務帳戶。如需詳細資訊,請參閱:
查看及管理身分與存取權管理服務帳戶角色
如要查看及管理授予 Dataproc VM 服務帳戶的角色,請按照下列步驟操作:
前往 Google Cloud 控制台的「IAM」頁面。
按一下「包含 Google 提供的角色授權」。
查看 VM 服務帳戶的角色清單。下圖顯示 Compute Engine 預設服務帳戶 (
project_number-compute@developer.gserviceaccount.com
) 的必要 Dataproc 工作站角色,Dataproc 預設會將該帳戶用作 VM 服務帳戶。您可以按一下服務帳戶列上顯示的鉛筆圖示,授予或移除服務帳戶角色。
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 服務帳戶,可讓叢集精細控管專案資源的存取權。
初步步驟
在要建立叢集的專案中建立自訂 VM 服務帳戶。
授予自訂 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.*
權限,而非授予服務帳戶預先定義的 DataprocWorker
角色。- 自訂角色至少必須為 VM 服務帳戶授予 Dataproc 暫存和暫時值區中的物件,以及叢集中執行的工作所需的任何其他值區,授予
storage.objects.create
、storage.objects.get
和storage.objects.update
權限。
- 自訂角色至少必須為 VM 服務帳戶授予 Dataproc 暫存和暫時值區中的物件,以及叢集中執行的工作所需的任何其他值區,授予
建立叢集
- 在專案中建立叢集。
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
時,請設定下列欄位:
serviceAccount
:除非您使用其他專案的 VM 服務帳戶,否則服務帳戶會位於要建立叢集的專案中。serviceAccountScopes
:指定叢集 VM 執行個體的存取範圍 (例如https://www.googleapis.com/auth/cloud-platform
)。
控制台
系統不支援在 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 服務帳戶,可讓叢集取得專案資源的精細存取權。
初步步驟
在服務帳戶專案 (自訂 VM 服務帳戶所在的專案) 中:
Enable the Dataproc API.
請為您的電子郵件帳戶 (建立叢集的使用者) 授予服務帳戶專案的服務帳戶使用者角色,或者為服務帳戶專案中的自訂 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
。在叢集專案中,將 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"
請為叢集專案中的 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"
在叢集專案中,將服務帳戶憑證建立者角色授予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"
建立叢集
後續步驟
- 服務帳戶
- Dataproc 權限和身分與存取權管理角色
- Dataproc 主體和角色
- 以 Dataproc 服務帳戶為基礎的多用戶群安全架構
- Dataproc 個人叢集驗證
- Dataproc 精細的身分與存取權管理