基於 Managed Service for Apache Spark 服務帳戶的安全多租戶架構支援多名使用者共用叢集,其方式是在建立叢集時,將一組使用者帳戶對應至服務帳戶。使用者可在隔離的使用者環境下,將互動式工作負載(例如 Jupyter Notebook)提交至該多租戶叢集上執行的核心。
使用者將工作提交至多租戶叢集時:
這項工作會以特定 OS 使用者身分執行,並使用特定 Kerberos 主體。
這項工作會使用對應的服務帳戶存取 Google Cloud 資源。
本文將說明如何建立 Managed Service for Apache Spark 多租戶叢集,然後啟動 Jupyter Notebook,並連線至叢集上執行的 PySpark 核心。
注意事項與限制
建立多租戶叢集時,請注意下列事項:
叢集僅供對應服務帳戶的 Google 帳戶使用者使用。Google 群組無法進行對應。未對應的使用者無法在叢集上執行工作。
叢集會啟用並設定 Kerberos,以確保叢集內通訊安全。不支援透過 Kerberos 進行使用者驗證。
系統會封鎖直接透過 SSH 存取叢集和 Compute Engine 功能,例如在叢集 VM 上執行啟動指令碼。此外,工作無法以
sudo權限執行。不支援 Managed Service for Apache Spark 工作流程。
建立多租戶叢集
您可以在建立 Managed Service for Apache Spark 叢集時啟用多租戶功能。
控制台
使用 Google Cloud 控制台建立 Managed Service for Apache Spark 叢集,步驟如下:
在 Google Cloud 控制台中,前往 Managed Service for Apache Spark「Create a Managed Service for Apache Spark cluster on Compute Engine」(在 Compute Engine 上建立 Managed Service for Apache Spark 叢集) 頁面:在 Compute Engine 上建立 Managed Service for Apache Spark 叢集
在「Set up cluster」(設定叢集)面板中:
- 在「Components」(元件) 下方:
- 在「Component Gateway」(元件閘道) 下方,選取「enable component gateway」(啟用元件閘道)。
- 在「Optional components」(選用元件) 下方,選取「Jupyter Kernel Gateway」(Jupyter Kernel 閘道) ,讓多位使用者將自己的 Jupyter Notebook 連結至多租戶叢集。
- 在「Components」(元件) 下方:
在「Customize cluster」(自訂叢集) 面板中:
在「Cluster properties」(叢集屬性) 下方:
如要允許新增或移除多租戶使用者而不必重新建立叢集 (請參閱「更新多租戶叢集使用者」),請按一下「Add Properties」(新增屬性),然後新增
dataproc前置字元、dataproc.dynamic.multi.tenancy.enabled屬性,並將值設為true。建議:由於 YARN 會為多租戶叢集上執行的各個 Notebook 核心耗用大量叢集資源,因此請新增 Spark 和 YARN 屬性,以增加資源分配量。
範例:
前置字串 索引鍵 值 spark spark.driver.memory 5G spark spark.executor.memory 5G spark spark.executor.cores 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0.5
在「Manage security」(管理安全性 )面板中:
- 在「Project access」(專案存取權) 下方,選取「Enables the cloud-platform scope for this cluste為」(為此叢集啟用 cloud-platform 範圍)。
- 在「Secure Multi Tenancy」(安全多租戶架構) 下方:
- 選取「Enable」(啟用)。
- 在「Multi-tenancy Mapping」(多租戶對應) 下方:
- 按一下「Add Multi-tenancy Mapping」(新增多租戶對應) ,將使用者帳戶對應至服務帳戶。
確認或輸入其他叢集設定 (請參閱「使用 Google Cloud 控制台建立 Managed Service for Apache Spark 叢集」)。
點選「建立」。
gcloud
使用 gcloud dataproc clusters create command 搭配 --secure-multi-tenancy-user-mapping 旗標,指定使用者帳戶與服務帳戶的對應清單。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \ --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \ --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/iam \ --optional-components=JUPYTER_KERNEL_GATEWAY \ --enable-component-gateway \ other args ...
附註:
USER_MAPPINGS:指定一份以半形逗號分隔的清單,將使用者帳戶對應至服務帳戶。
使用 YAML 對應檔案:您可以透過--secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--identity-config-file旗標指定含有對應的本機或 Cloud Storage YAML 檔案,而不必使用--secure-multi-tenancy-user-mapping旗標來指定使用者帳戶與服務帳戶的對應關係。 對應檔案中的每一行都會將使用者帳戶對應至服務帳戶。第一行包含--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:標頭。user_service_account_mapping: UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true":這項屬性可讓您新增或移除多租戶叢集使用者,不必重新建立叢集 (請參閱「更新多租戶叢集使用者」)。建議:由於 YARN 會為多租戶叢集上執行的各個 Notebook 核心耗用大量叢集資源,因此請新增 Spark 和 YARN 屬性,以增加資源分配量。
範例:
--properties=" \ spark:spark.driver.memory=5g,\ spark:spark.executor.memory=5g,\ spark:spark.executor.cores=200, \ capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
CLUSTER_SERVICE_ACCOUNT (選用):您可以使用
--service-account flag為叢集指定自訂 VM 服務帳戶。如果省略此旗標,系統會使用預設叢集 VM 服務帳戶PROJECT_NUMBER-compute@developer.gserviceaccount.com。建議:針對不同的叢集,請使用不同的叢集服務帳戶,使每個叢集 VM 的服務帳戶僅模擬一組有限的對應使用者服務帳戶。
叢集服務帳戶必須設定
--scopes=https://www.googleapis.com/auth/iam才能執行模擬作業。--enable-component-gateway和--optional-components=JUPYTER_KERNEL_GATEWAY:啟用 Managed Service for Apache Spark 元件閘道和 Jupyter Kernel 閘道,即可讓多位使用者將自己的 Jupyter Notebook 連結至多租戶叢集。
API
使用 SecurityConfig.IdentityConfig.userServiceAccountMapping field 指定使用者帳戶與服務帳戶的對應清單。
授予身分與存取權管理權限
如要將使用者 Notebook 連線至在多租戶叢集上執行的 Notebook 核心,對應的使用者、對應的服務帳戶和叢集 VM 服務帳戶,都必須具備存取資源所需的 IAM 權限。
對應的使用者權限
每位對應使用者都必須具備 dataproc.clusters.get 和 dataproc.clusters.use 權限,才能存取及連線至在多租戶叢集上執行的 Notebook 核心。您可以授予Managed Service for Apache Spark 編輯者角色 (roles/dataproc.editor),其中即包含這些權限 (請參閱「授予單一身分與存取權管理角色」),或建立具備這些權限的自訂角色。
對應的服務帳戶權限
每個對應的服務帳戶都必須具備對應使用者 Notebook 應用程式所需的權限,例如存取 Cloud Storage bucket 或 BigQuery 資料表的權限 (請參閱「管理服務帳戶的存取權」)。
VM 服務帳戶權限
針對每個對應的服務帳戶,多租戶叢集的 VM 服務帳戶都必須具備 iam.serviceAccounts.getAccessToken 權限。您可以授予服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator),其中即包含這項權限 (請參閱「管理服務帳戶的存取權」),或建立具有此權限的自訂角色。如要瞭解其他 VM 服務帳戶角色,請參閱「Managed Service for Apache Spark VM 服務帳戶」。
將 Jupyter Notebook 連線至多租戶叢集核心
對應的多租戶叢集使用者可將 Vertex AI Workbench 或使用者自行管理的 Jupyter Notebook 連線至多租戶叢集所安裝的核心。
Vertex AI Notebook
如要建立 Jupyter Notebook 並連線至多租戶叢集,請執行下列操作:
- 建立 Vertex AI Workbench 執行個體。
- 在「Workbench」執行個體分頁中,按一下執行個體的「Open JupyterLab」(開啟 JupyterLab)連結。
- 在「ataproc Cluster Notebooks」(Dataproc 叢集 Notebook)下方,按一下「PySpark (YARN Cluster)」(PySpark (YARN 叢集))
MULTI_TENANCY_CLUSTER_NAME資訊卡,即可連線並啟動新的 Jupyter PySpark Notebook。
使用者自行管理的 Notebook
如要建立使用者管理的 Jupyter Notebook 並連線至 Managed Service for Apache Spark 多租戶叢集,請按照步驟在使用者自行管理的 VM 上安裝 JupyterLab 擴充功能。
更新多租戶叢集使用者 (預先發布版)
如果在建立多租戶叢集時,將 dataproc:dataproc.dynamic.multi.tenancy.enabled 叢集屬性設為 true,則可以在叢集建立之後新增、移除或替換多租戶叢集使用者。
新增使用者
下列更新指令使用 --add-user-mappings 旗標,將兩個新的使用者帳戶對應至服務帳戶,以新增至安全多租戶叢集。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com
移除使用者
下列更新指令使用 --remove-user-mappings 旗標,從多租戶叢集移除兩位使用者。此旗標會接收要移除的使用者帳戶。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
替換使用者
您可以使用更新指令搭配 --identity-config-file 旗標,以一組新使用者替換現有使用者。此旗標可透過單一更新指令新增及移除使用者,相當實用。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
附註:
--identity-config-file:指定本機或 Cloud Storage YAML 檔案,其中含有新的使用者帳戶與服務帳戶的對應關係。 對應檔案中的每一行都會將使用者帳戶對應至服務帳戶。第一行包含--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:標頭。user_service_account_mapping: new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com