Dataproc サービス アカウント ベースの安全なマルチテナンシーを使用すると、クラスタの作成時に、サービス アカウントにマッピングされたユーザー アカウントのセットが含まれるクラスタを複数のユーザーと共有できます。ユーザーは、独立したユーザー環境のマルチテナント クラスタで実行されているカーネルに、Jupyter ノートブックなどのインタラクティブ ワークロードを送信できます。
ユーザーがマルチテナント クラスタにジョブを送信すると、次のようになります。
ジョブは、特定の Kerberos プリンシパルを持つ特定の OS ユーザーとして実行されます。
ジョブは、マッピングされたサービス アカウントを使用して Google Cloud リソースにアクセスします。
このドキュメントでは、Dataproc マルチテナント クラスタを作成し、Jupyter ノートブックを起動してクラスタで実行されている PySpark カーネルに接続する方法について説明します。
考慮事項と制限事項
マルチテナント クラスタを作成する場合:
クラスタを使用できるのは、マッピングされたサービス アカウントを持つ Google アカウント ユーザーのみです。Google グループはマッピングできません。マッピングされていないユーザーはクラスタでジョブを実行できません。
安全なクラスタ内通信を行えるように、Kerberos が有効になっており、クラスタで構成されています。Kerberos によるエンドユーザー認証はサポートされていません。
クラスタ VM 上で起動スクリプトを実行するなど、クラスタと Compute Engine の機能への直接的な SSH アクセスはブロックされます。また、
sudo
権限を使用してジョブを実行することはできません。Dataproc Workflows はサポートされていません。
マルチテナント クラスタを作成する
マルチテナント機能は、Dataproc クラスタの作成時に有効にします。
コンソール
Google Cloud コンソールを使用して、次のように Dataproc クラスタを作成します。
Google Cloud コンソールで、Dataproc の [Compute Engine で Dataproc クラスタを作成する] ページに移動します。 Compute Engine で Dataproc クラスタを作成する
[クラスタの設定] パネルで次の操作を行います。
- [コンポーネント] で、次の操作を行います。
- [コンポーネント ゲートウェイ] で [コンポーネント ゲートウェイを有効にする] を選択します。
- [オプション コンポーネント] で [Jupyter Kernel Gateway] を選択して、複数のユーザーが Jupyter ノートブックをマルチテナント クラスタに接続できるようにします。
- [コンポーネント] で、次の操作を行います。
[クラスタのカスタマイズ] パネルで次の操作を行います。
[クラスタ プロパティ] で、次の操作を行います。
クラスタを再作成せずにマルチテナント ユーザーを追加または削除できるようにするには(マルチテナント クラスタ ユーザーを更新するを参照)、[ プロパティを追加] をクリックして、
dataproc
接頭辞とdynamic.multi.tenancy.enabled
プロパティを追加し、その値をtrue
に設定します。推奨事項: マルチテナント クラスタで実行されているノートブック カーネルごとにかなりのクラスタ リソースを YARN が消費するため、リソース割り当てを増やすため Spark プロパティと YARN プロパティを追加します。
例:
接頭辞 キー 値 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
[セキュリティ管理] パネルで次の操作を行います。
- [プロジェクト アクセス] で、[このクラスタのクラウド プラットフォーム スコープを有効にします] を選択します。
- [安全なマルチテナンシー] で、次の操作を行います。
- [有効にする] を選択します。
- [マルチテナンシー マッピング] で、次の操作を行います。
- [ マルチテナンシー マッピングを追加] をクリックして、ユーザー アカウントとサービス アカウントのマッピングを追加します。
他のクラスタ設定を確認または入力します( Google Cloud コンソールを使用して Dataproc クラスタを作成するをご覧ください)。
[作成] をクリックします。
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
--secure-multi-tenancy-user-mapping
フラグを使用してユーザー アカウントとサービス アカウントのマッピングを指定する代わりに、--identity-config-file
フラグを使用して、マッピングを含む YAML ファイル(ローカルまたは Cloud Storage)を指定できます。 マッピング ファイルの各行は、ユーザー アカウントをサービス アカウントにマッピングします。1 行目には--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 が消費するため、リソース割り当てを増やすため 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 Gateway を有効にすると、複数のユーザーが Jupyter ノートブックをマルチテナント クラスタに接続できます。
API
SecurityConfig.IdentityConfig.userServiceAccountMapping field
を使用して、ユーザー アカウントとサービス アカウントのマッピングのリストを指定します。
Identity and Access Management の権限を付与する
ユーザー ノートブックをマルチテナント クラスタで実行されているノートブック カーネルに接続するには、マッピングされたユーザー、マッピングされたサービス アカウント、クラスタ VM サービス アカウントに、リソースへのアクセスに必要な IAM 権限が必要です。
マッピングされたユーザー権限
マッピングされた各ユーザーには、マルチテナント クラスタで実行されているノートブック カーネルにアクセスして接続するために必要な dataproc.clusters.get
権限と dataproc.clusters.use
権限が必要です。これらの権限を含む Dataproc 編集者ロール(roles/dataproc.editor
)を付与するか(単一の IAM ロールを付与するをご覧ください)、これらの権限を含むカスタムロールを作成します。
マッピングされたサービス アカウントの権限
マッピングされた各サービス アカウントには、マッピングされたユーザーのノートブック アプリケーションに必要な権限(Cloud Storage バケットへのアクセス権や BigQuery テーブルへのアクセス権など)が必要です(サービス アカウントへのアクセスを管理するをご覧ください)。
VM サービス アカウントの権限
マルチテナント クラスタの VM サービス アカウントには、マッピングされた各サービス アカウントに対する iam.serviceAccounts.getAccessToken
権限が必要です。この権限を含むサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を付与するか(サービス アカウントへのアクセスを管理するをご覧ください)、この権限を含むカスタムロールを作成できます。他の VM サービス アカウントのロールについては、Dataproc VM サービス アカウントをご覧ください。
Jupyter ノートブックをマルチテナント クラスタ カーネルに接続する
マッピングされたマルチテナント クラスタ ユーザーは、Vertex AI Workbench またはユーザー管理の Jupyter ノートブックをマルチテナント クラスタにインストールされているカーネルに接続できます。
Vertex AI ノートブック
Jupyter ノートブックを作成してマルチテナント クラスタに接続するには、次の操作を行います。
- Vertex AI Workbench インスタンスを作成します。
- Workbench の [インスタンス] タブで、インスタンスの [JupyterLab を開く] リンクをクリックします。
- [Dataproc Cluster Notebooks] で、[PySpark (YARN Cluster) on
MULTI_TENANCY_CLUSTER_NAME
] カードをクリックして、新しい Jupyter PySpark ノートブックに接続して起動します。
ユーザー管理のノートブック
ユーザー管理の Jupyter ノートブックを作成して Dataproc マルチテナント クラスタに接続するには、ユーザー管理の VM に JupyterLab 拡張機能をインストールするの手順に沿って操作します。
マルチテナント クラスタのユーザーを更新する(プレビュー)
マルチテナント クラスタの作成時に dataproc:dataproc.dynamic.multi.tenancy.enabled
クラスタ プロパティを true
に設定した場合は、クラスタの作成後にマルチテナント クラスタのユーザーを追加、削除、置換できます。
ユーザーを追加する
次の更新コマンドでは、--add-user-mappings
フラグを使用して、セキュアなマルチテナント クラスタに 2 つの新しいユーザー アカウントとサービス アカウントのマッピングを追加します。
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
フラグを使用して、マルチテナント クラスタから 2 人のユーザーを削除します。このフラグには、削除するユーザーのユーザー アカウントを指定します。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
ユーザーを置き換える
更新コマンドと --identity-config-file
フラグを使用して、既存のユーザーセットを新しいセットに置き換えることができます。このフラグは、1 つの更新コマンドでユーザーの追加と削除を行う場合に便利です。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
注:
--identity-config-file
: 新しいユーザー アカウントとサービス アカウントのマッピングを含む YAML ファイル(ローカルまたは Cloud Storage)を指定します。 マッピング ファイルの各行は、ユーザー アカウントをサービス アカウントにマッピングします。1 行目には--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