Dataproc サービス アカウント ベースの安全なマルチテナンシー

Dataproc サービス アカウント ベースの安全なマルチテナンシー(以下、「安全なマルチ テナンシー」と呼びます)を使用すると、クラスタの作成時に複数のユーザーとサービス アカウントにマッピングされたユーザのセットが含まれるクラスタを共有できます。安全なマルチテナンシーを使用すると、ユーザーはインタラクティブなワークロードを独立したユーザー ID でクラスタに送信できます。

ユーザーがクラスタにジョブを送信すると、ジョブは次を行います。

  • 特定の Kerberos プリンシパルを持つ特定の OS ユーザーとして実行

  • マッピングされたサービス アカウントの認証情報を使用して Google Cloud リソースにアクセス

考慮事項と制限事項

クラスタを作成し、安全なマルチテナンシーを有効にするには:

  • ジョブは、Dataproc Jobs API を介してのみ送信できます。

  • クラスタは、サービス アカウントがマッピングされているユーザーのみが使用できます。たとえば、マッピングされていないユーザーはクラスタ上でジョブを実行できません。

  • サービス アカウントは Google ユーザーにのみマッピングでき、Google グループにはマッピングできません。

  • Dataproc のコンポーネント ゲートウェイが有効になっていません。

  • クラスタ VM 上で起動スクリプトを実行するなど、クラスタと Compute Engine の機能への直接的な SSH アクセスはブロックされます。また、sudo 権限を使用してジョブを実行することはできません。

  • 安全なクラスタ内通信を行えるように、Kerberos が有効になっており、クラスタで構成されています。 Kerberos によるエンドユーザー認証はサポートされていません。

  • Dataproc Workflows はサポートされていません。

安全なマルチテナンシー クラスタを作成する

Dataproc の安全なマルチテナンシー クラスタを作成するには、--secure-multi-tenancy-user-mapping フラグを使用して、ユーザーからサービス アカウントへのマッピングのリストを指定します。

例:

次のコマンドでは、ユーザー bob@my-company.com をサービス アカウント service-account-for-bob@iam.gserviceaccount.com にマッピングし、ユーザー alice@my-company.com をサービス アカウント service-account-for-alice@iam.gserviceaccount.com にマッピングしてクラスタを作成します。

gcloud dataproc clusters create my-cluster \
    --secure-multi-tenancy-user-mapping="bob@my-company.com:service-account-for-bob@iam.gserviceaccount.com,alice@my-company.com:service-account-for-alice@iam.gserviceaccount.com" \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

あるいは、ユーザー アカウントとサービス アカウントのマッピングのリストをローカルまたは Cloud Storage の YAML ファイルまたは JSON ファイルに保存することもできます。--identity-config-file フラグを使用してファイルの場所を指定します。

ID 構成ファイルのサンプル:

user_service_account_mapping:
  bob@my-company.com: service-account-for-bob@iam.gserviceaccount.com
  alice@my-company.com: service-account-for-alice@iam.gserviceaccount.com

--identity-config-file フラグを使用してクラスタを作成するコマンドの例:

gcloud dataproc clusters create my-cluster \
    --identity-config-file=local or "gs://bucket" /path/to/identity-config-file \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

注:

  • 上記のコマンドに示されているように、クラスタ --scopes には少なくとも https://www.googleapis.com/auth/iam が含まれている必要があります。これは、クラスタ サービス アカウントが権限借用を実行するために必要なものです。

  • クラスタ サービス アカウントには、ユーザーにマッピングされたサービス アカウントに成り代わる権限が必要です(サービス アカウントの権限をご覧ください)。

  • 推奨事項: クラスタごとに異なるクラスタ サービス アカウントを使用して、各クラスタ サービス アカウントで、マッピングされたユーザー サービス アカウントの限定された目的のグループのみが権限借用できるようにします。