本頁說明服務帳戶和 VM 存取權範圍,以及如何搭配 Managed Service for Apache Spark 使用這些帳戶和範圍。
2020 年 8 月 3 日起生效的安全規定:Managed Service for Apache Spark 使用者必須具備服務帳戶ActAs權限,才能部署 Managed Service for Apache Spark 資源,例如建立叢集及提交工作。「服務帳戶使用者」角色包含這項權限。如要瞭解必要的 Managed Service for Apache Spark 角色,請參閱「服務帳戶驗證的角色」。
為現有 Managed Service for Apache Spark 使用者啟用: 2020 年 8 月 3 日前已使用 Managed Service for Apache Spark 的使用者,可以選擇啟用這項安全防護措施 (請參閱「保護 Managed Service for Apache Spark、Dataflow 和 Cloud Data Fusion 安全」)。
什麼是服務帳戶?
服務帳戶是一種特殊帳戶,可供在 Compute Engine 虛擬機器 (VM) 執行個體上執行的服務和應用程式使用,以便與其他 API 互動。 Google Cloud 應用程式可以透過服務帳戶憑證自行取得一組 API 的授權,並在授予服務帳戶的權限內,在 VM 上執行操作。
Managed Service for Apache Spark 叢集服務帳戶
下列服務帳戶必須具備必要權限,才能在叢集所在的專案中執行 Managed Service for Apache Spark 動作。
Managed Service for Apache Spark VM 服務帳戶
Managed Service for Apache Spark 叢集中的 VM 會使用服務帳戶,執行 Managed Service for Apache Spark 資料層作業。除非您在建立叢集時指定自訂服務帳戶,否則系統會使用 Compute Engine 預設服務帳戶 project_number-compute@developer.gserviceaccount.com 做為 VM 服務帳戶。VM 服務帳戶必須具備「Managed Service for Apache Spark Worker」(Managed Service for Apache Spark 工作人員) 角色,包括 Managed Service for Apache Spark 資料平面作業所需的權限。詳情請參閱「Managed Service for Apache Spark 角色」。
查看 VM 服務帳戶角色
如要查看授予 Managed Service for Apache Spark VM 服務帳戶的角色,請按照下列步驟操作:
前往 Google Cloud 控制台的「IAM」頁面。
按一下「包含 Google 提供的角色授權」。
查看 VM 服務帳戶列出的角色。下圖顯示 Compute Engine 預設服務帳戶 (
project_number-compute@developer.gserviceaccount.com) 的必要 Dataproc 工作站角色,Managed Service for Apache Spark 預設會將這個帳戶做為 VM 服務帳戶。
您可以點選服務帳戶列中顯示的鉛筆圖示,授予或移除服務帳戶角色。
Managed Service for Apache Spark 服務代理程式服務帳戶
Managed Service for Apache Spark 會建立服務代理程式服務帳戶 (service-project_number@dataproc-accounts.iam.gserviceaccount.com),並在 Google Cloud 專案中授予該服務帳戶「Managed Service for Apache Spark 服務代理程式」角色。這個服務帳戶會執行 Managed Service for Apache Spark 控制層作業,例如建立、更新及刪除叢集 VM。建立叢集時,您無法將這個服務帳戶替換為自訂 VM 服務帳戶。
在共用 VPC 網路中,將角色授予服務代理程式服務帳戶
如果 Managed Service for Apache Spark 叢集使用共用虛擬私有雲網路,共用虛擬私有雲管理員必須將共用虛擬私有雲主專案的網路使用者角色,授予 Managed Service for Apache Spark 服務代理程式服務帳戶。如要瞭解詳情,請參考下列資源:
使用自訂 VM 服務帳戶建立叢集
建立叢集時,您可以指定自訂 VM 服務帳戶,供叢集用於 Managed Service for Apache Spark 資料平面作業,而非預設 VM 服務帳戶 (叢集建立後就無法變更 VM 服務帳戶)。使用已指派 IAM 角色的 VM 服務帳戶,可為叢集提供專案資源的精細存取權。
初步步驟
在要建立叢集的專案中建立自訂 VM 服務帳戶。
在專案中,將「Managed Service for Apache Spark Worker」角色授予自訂 VM 服務帳戶,並視工作需求授予其他角色,例如 BigQuery「讀者」和「寫入者」角色 (請參閱「Managed Service for Apache Spark 角色」)。
gcloud CLI 範例:
- 下列指令範例會授予叢集專案中的自訂 VM 服務帳戶專案層級的 Dataproc 工作站角色:
gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
- 考慮使用自訂角色:您可以授予服務帳戶自訂角色,其中包含工作者角色權限,但會限制
storage.objects.*權限,而不授予服務帳戶預先定義的 Dataproc 工作者角色 (roles/dataproc.worker)。- 自訂角色至少須授予 VM 服務帳戶在Managed Service for Apache Spark 暫存和臨時值區中的物件,以及叢集上執行的工作所需任何其他值區的
storage.objects.create、storage.objects.get和storage.objects.update權限。
- 自訂角色至少須授予 VM 服務帳戶在Managed Service for Apache Spark 暫存和臨時值區中的物件,以及叢集上執行的工作所需任何其他值區的
建立叢集
- 在專案中建立叢集。
Google Cloud 控制台
控制台不支援設定 Managed Service for Apache Spark VM 服務帳戶。
如要在建立叢集時,設定叢集 VM 的 cloud-platform 存取權範圍,請按照下列步驟操作:
gcloud CLI
使用 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 服務帳戶的專案 ID。 Google Cloud 這是要建立叢集的專案 ID,或是其他專案的 ID (如果您要在其他專案中建立使用自訂 VM 服務帳戶的叢集)。
- SCOPE:叢集 VM 執行個體的存取權範圍,例如
https://www.googleapis.com/auth/cloud-platform。
REST API
完成 GceClusterConfig 時,請在 clusters.create API 要求中設定下列欄位:
serviceAccount:服務帳戶會位於叢集建立所在的專案中,除非您使用來自其他專案的 VM 服務帳戶。serviceAccountScopes:指定叢集 VM 執行個體的存取權範圍,例如https://www.googleapis.com/auth/cloud-platform。
使用其他專案的自訂 VM 服務帳戶建立叢集
建立叢集時,您可以指定自訂 VM 服務帳戶,供叢集用於 Managed Service for Apache Spark 資料平面作業,而非使用預設 VM 服務帳戶 (叢集建立後,您就無法指定自訂 VM 服務帳戶)。使用已指派 IAM 角色的自訂 VM 服務帳戶,可為叢集提供專案資源的精細存取權。
初步步驟
在服務帳戶專案 (自訂 VM 服務帳戶所在的專案) 中:
啟用 Dataproc API。
啟用 API 時所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
將服務帳戶專案的服務帳戶使用者角色授予您的電子郵件帳戶 (建立叢集的使用者),或在服務帳戶專案中,將自訂 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。在叢集專案中,將「Managed Service for Apache Spark Worker」角色授予自訂 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"
在叢集專案中,將服務帳戶使用者和服務帳戶權杖建立者角色授予服務帳戶專案中的Managed Service for Apache Spark 服務代理程式服務帳戶,或授予服務帳戶專案中的自訂 VM 服務帳戶,以進行更精細的控制。這麼做可讓叢集專案中的 Dataproc 服務代理程式服務帳戶,為服務帳戶專案中的自訂 Dataproc VM 服務帳戶建立權杖。
如需更多資訊:請參閱「管理專案、資料夾和機構的存取權」一文,瞭解如何授予專案層級的角色,以及參閱「管理服務帳戶的存取權」一文,瞭解如何授予服務帳戶層級的角色。
gcloud CLI 範例:
- 下列範例指令會向叢集專案中的 Managed Service for Apache Spark 服務代理程式服務帳戶,授予專案層級的「服務帳戶使用者」和「服務帳戶權杖建立者」角色:
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"
- 下列範例指令會授予叢集專案中的 Managed Service for Apache Spark 服務代理程式服務帳戶,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 服務代理程式服務帳戶權限,在服務帳戶專案中為自訂 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"
建立叢集
後續步驟
- 服務帳戶
- Managed Service for Apache Spark 權限和 IAM 角色
- Managed Service for Apache Spark 主體和角色
- 以 Managed Service for Apache Spark 服務帳戶為基礎的多租戶架構
- Managed Service for Apache Spark 個人叢集驗證
- Managed Service for Apache Spark 細微 IAM