建立使用服務帳戶的多租戶叢集

基於 Dataproc 服務帳戶的安全多租戶架構支援多名使用者共用叢集,其方式是在建立叢集時,將一組使用者帳戶對應至服務帳戶。使用者可在隔離的使用者環境下,將互動式工作負載(例如 Jupyter Notebook)提交至該多租戶叢集上執行的核心。

使用者將工作提交至多租戶叢集時:

  • 這項工作會以特定 OS 使用者身分執行,並使用特定 Kerberos 主體。

  • 這項工作會使用對應的服務帳戶存取 Google Cloud 資源。

本文將說明如何建立 Dataproc 多租戶叢集,然後啟動 Jupyter Notebook,並連線至叢集上執行的 PySpark 核心。

注意事項與限制

建立多租戶叢集時,請注意下列事項:

  • 叢集僅供對應服務帳戶的 Google 帳戶使用者使用。Google 群組無法進行對應。未對應的使用者無法在叢集上執行工作。

  • 叢集會啟用並設定 Kerberos,以確保叢集內通訊安全。不支援透過 Kerberos 進行使用者驗證。

  • 系統會封鎖直接透過 SSH 存取叢集和 Compute Engine 功能,例如在叢集 VM 上執行啟動指令碼。此外,工作無法以 sudo 權限執行。

  • 不支援 Dataproc 工作流程

建立多租戶叢集

您可以在建立 Dataproc 叢集時啟用多租戶功能。

控制台

使用 Google Cloud 控制台建立 Dataproc 叢集,步驟如下:

  1. 在 Google Cloud 控制台,前往 Dataproc「Create a Dataproc cluster on Compute Engine」(在 Compute Engine 上建立 Dataproc 叢集) 頁面:在 Compute Engine 上建立 Dataproc 叢集

  2. 在「Set up cluster」(設定叢集)面板中:

    1. 在「Components」(元件) 下方:
      1. 在「Component Gateway」(元件閘道) 下方,選取「enable component gateway」(啟用元件閘道)
      2. 在「Optional components」(選用元件) 下方,選取「Jupyter Kernel Gateway」(Jupyter Kernel 閘道) ,讓多位使用者將自己的 Jupyter Notebook 連結至多租戶叢集。
  3. 在「Customize cluster」(自訂叢集) 面板中:

    1. 在「Cluster properties」(叢集屬性) 下方:

      1. 如要允許新增或移除多租戶使用者而不必重新建立叢集 (請參閱「更新多租戶叢集使用者」),請按一下「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

  4. 在「Manage security」(管理安全性 )面板中:

    1. 在「Project access」(專案存取權) 下方,選取「Enables the cloud-platform scope for this cluste為」(為此叢集啟用 cloud-platform 範圍)
    2. 在「Secure Multi Tenancy」(安全多租戶架構) 下方:
      1. 選取「Enable」(啟用)。
      2. 在「Multi-tenancy Mapping」(多租戶對應) 下方:
        1. 按一下「Add Multi-tenancy Mapping」(新增多租戶對應) ,將使用者帳戶對應至服務帳戶。
  5. 確認或輸入其他叢集設定 (請參閱「使用 Google Cloud 控制台建立 Dataproc 叢集」)。

  6. 點選「Create」(建立)

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:指定一份以半形逗號分隔的清單,將使用者帳戶對應至服務帳戶。

    --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
    
    使用 YAML 對應檔案:您可以透過 --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:啟用 Dataproc 元件閘道Jupyter Kernel 閘道,即可讓多位使用者將自己的 Jupyter Notebook 連結至多租戶叢集。

API

使用 SecurityConfig.IdentityConfig.userServiceAccountMapping field 指定使用者帳戶與服務帳戶的對應清單。

授予身分與存取權管理權限

如要將使用者 Notebook 連線至在多租戶叢集上執行的 Notebook 核心,對應的使用者、對應的服務帳戶和叢集 VM 服務帳戶,都必須具備存取資源所需的 IAM 權限。

對應的使用者權限

每位對應使用者都必須具備 dataproc.clusters.getdataproc.clusters.use 權限,才能存取及連線至在多租戶叢集上執行的 Notebook 核心。您可以授予Dataproc 編輯者角色 (roles/dataproc.editor),其中即包含這些權限 (請參閱「授予單一身分與存取權管理角色」),或建立具備這些權限的自訂角色

對應的服務帳戶權限

每個對應的服務帳戶都必須具備對應使用者 Notebook 應用程式所需的權限,例如存取 Cloud Storage bucket 或 BigQuery 資料表的權限 (請參閱「管理服務帳戶的存取權」)。

VM 服務帳戶權限

針對每個對應的服務帳戶,多租戶叢集的 VM 服務帳戶都必須具備 iam.serviceAccounts.getAccessToken 權限。您可以授予服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator),其中即包含這項權限 (請參閱「管理服務帳戶的存取權」),或建立具有此權限的自訂角色。如要瞭解其他 VM 服務帳戶角色,請參閱「Dataproc VM 服務帳戶」。

將 Jupyter Notebook 連線至多租戶叢集核心

對應的多租戶叢集使用者可將 Vertex AI Workbench 或使用者自行管理的 Jupyter Notebook 連線至多租戶叢集所安裝的核心。

Vertex AI Notebook

如要建立 Jupyter Notebook 並連線至多租戶叢集,請執行下列操作:

  1. 建立 Vertex AI Workbench 執行個體
  2. 在「Workbench」執行個體分頁中,按一下執行個體的「Open JupyterLab」(開啟 JupyterLab)連結。
  3. 在「ataproc Cluster Notebooks」(Dataproc 叢集 Notebook)下方,按一下「PySpark (YARN Cluster)」(PySpark (YARN 叢集))MULTI_TENANCY_CLUSTER_NAME 資訊卡,即可連線並啟動新的 Jupyter PySpark Notebook。

使用者自行管理的 Notebook

如要建立使用者管理的 Jupyter Notebook 並連線至 Dataproc 多租戶叢集,請按照步驟在使用者自行管理的 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