本頁說明服務帳戶和 VM 存取權範圍,以及如何透過 Dataproc 使用這些帳戶和範圍。
2020 年 8 月 3 日起生效的安全規定:Dataproc 使用者必須具備服務帳戶 ActAs 權限,才能部署 Dataproc 資源,例如建立叢集及提交工作。「服務帳戶使用者」角色也具有此權限,如要瞭解必要的 Dataproc 角色,請參閱「服務帳戶驗證的角色」。
現有 Dataproc 使用者選擇加入: 2020 年 8 月 3 日前已是 Dataproc 使用者的客戶,可以選擇加入這項安全規定 (請參閱「保護 Dataproc、Dataflow 和 Cloud Data Fusion 安全」)。
什麼是服務帳戶?
服務帳戶是一種特殊帳戶,可供 Compute Engine 虛擬機器 (VM) 執行個體上執行的服務和應用程式使用,以便與其他 API 互動。 Google Cloud 應用程式可以透過服務帳戶憑證自行取得一組 API 的授權,並在授予服務帳戶的權限內,在 VM 上執行操作。
Dataproc 叢集服務帳戶
下列服務帳戶必須具備必要權限,才能在叢集所在的專案中執行 Dataproc 動作。
Dataproc VM 服務帳戶
Dataproc 叢集中的 VM 會使用服務帳戶執行 Dataproc 資料層作業。除非您在建立叢集時指定自訂服務帳戶,否則系統會使用 Compute Engine 預設服務帳戶 project_number-compute@developer.gserviceaccount.com 做為 VM 服務帳戶。VM 服務帳戶必須具備「Dataproc 工作者」角色,包括 Dataproc 資料平面作業所需的權限。詳情請參閱「Dataproc 角色」。
查看 VM 服務帳戶角色
如要查看授予 Dataproc VM 服務帳戶的角色,請按照下列步驟操作:
前往 Google Cloud 控制台的「IAM」頁面。
按一下「包含 Google 提供的角色授權」。
查看 VM 服務帳戶列出的角色。下圖顯示 Compute Engine 預設服務帳戶 (
project_number-compute@developer.gserviceaccount.com) 的必要 Dataproc 工作者角色,Dataproc 預設會將該帳戶做為 VM 服務帳戶。
您可以點選服務帳戶列中顯示的鉛筆圖示,授予或移除服務帳戶角色。
Dataproc 服務代理程式服務帳戶
Dataproc 會建立服務代理程式服務帳戶 (service-project_number@dataproc-accounts.iam.gserviceaccount.com),並在 Google Cloud 專案中將 Dataproc 服務代理程式角色授予該服務帳戶。這個服務帳戶會執行 Dataproc 控制層作業,例如建立、更新及刪除叢集 VM。建立叢集時,您無法將這個服務帳戶替換為自訂 VM 服務帳戶。
在共用 VPC 網路中,將角色授予服務代理程式服務帳戶
如果 Dataproc 叢集使用共用虛擬私有雲網路,共用虛擬私有雲管理員必須將共用虛擬私有雲主專案的「網路使用者」角色授予 Dataproc 服務代理人服務帳戶。如要瞭解詳情,請參考下列資源:
使用自訂 VM 服務帳戶建立叢集
建立叢集時,您可以指定自訂 VM 服務帳戶,供叢集用於 Dataproc 資料層作業,而非預設 VM 服務帳戶 (叢集建立後就無法變更 VM 服務帳戶)。使用已指派 IAM 角色的 VM 服務帳戶,可為叢集提供專案資源的精細存取權。
初步步驟
在要建立叢集的專案中建立自訂 VM 服務帳戶。
在專案中,將 Dataproc 工作站角色授予自訂 VM 服務帳戶,以及工作所需的任何其他角色,例如 BigQuery Reader 和 Writer 角色 (請參閱「Dataproc 角色」)。
gcloud CLI 範例:
- 下列指令範例會將叢集專案中的自訂 VM 服務帳戶,授予專案層級的 Dataproc Worker 角色:
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 服務帳戶在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 服務帳戶的專案 ID。 Google Cloud 這是要建立叢集的專案 ID,或是在其他專案中建立使用自訂 VM 服務帳戶的叢集時,其他專案的 ID。
- 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。
控制台
Google Cloud 主控台不支援設定 Dataproc VM 服務帳戶。建立叢集時,您可以在叢集 VM 上設定 cloud-platform
存取範圍,方法是在 Google Cloud 控制台的 Dataproc「建立叢集」頁面中,按一下「管理安全性」面板的「為這個叢集啟用 cloud-platform 範圍」。
使用來自其他專案的自訂 VM 服務帳戶建立叢集
建立叢集時,您可以指定叢集用於 Dataproc 資料層作業的自訂 VM 服務帳戶,而非使用預設 VM 服務帳戶 (叢集建立後就無法指定自訂 VM 服務帳戶)。使用已指派 IAM 角色的自訂 VM 服務帳戶,可為叢集提供專案資源的精細存取權。
初步步驟
在服務帳戶專案 (自訂 VM 服務帳戶所在的專案) 中:
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
將服務帳戶專案的服務帳戶使用者角色授予您的電子郵件帳戶 (建立叢集的使用者),或在服務帳戶專案中,將自訂 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 服務代理程式服務帳戶權限,在服務帳戶專案中為自訂 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"