すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Kyuubi Gateway での Kerberos 認証の使用

最終更新日:Mar 26, 2026

Serverless Spark は、Kyuubi Gateway の Kerberos 認証をサポートしており、すべてのジョブ送信に対して本人確認とアクセスの制御を強制します。設定が完了すると、クライアントはゲートウェイにタスクを送信する前に Kerberos で認証する必要があります。

仕組み

Kerberos はチケットベースの認証モデルを使用します。クライアントが Kyuubi Gateway に接続する前に、キー配布センター (KDC) と認証情報を交換してチケットを取得します。以下の手順は、認証フローを説明したものです。

  1. Kerberos クライアントは、プリンシパルとシークレット (パスワードまたは keytab ファイル) を KDC に送信します。

  2. KDC はチケット認可チケット (TGT) を返します。

  3. クライアントは TGT をチケットキャッシュに保存します。

  4. JDBC クライアント (kyuubi-beeline) はキャッシュから TGT を読み取ります。

  5. JDBC クライアントは TGT と Kyuubi サーバープリンシパルを KDC に送信します。

  6. KDC は client-to-server チケットを返します。

  7. JDBC クライアントは、認証のために client-to-server チケットを Kyuubi Gateway に提示します。

このフローを理解することで、各設定ステップが必要な理由がわかります。keytab によって Kyuubi Gateway は KDC に対して自身を認証でき、kinit ステップでクライアント用の TGT を取得し、JDBC URL の principal パラメーターによって、クライアントはどのサーバーに対してチケットをリクエストするかを知ることができます。

制限事項

  • E-MapReduce (EMR) クラスターと Serverless Spark ワークスペースは、同じリージョンにある必要があります。

  • Kerberos が有効になっているワークスペースでは、Kyuubi Gateway は 1 つしか作成できません。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • Kerberos 認証が有効になっている EMR on ECS クラスター。詳細については、「クラスターの作成」をご参照ください。

  • Kerberos 認証が有効になっている Serverless Spark ワークスペース。詳細については、「Kerberos 認証の有効化」をご参照ください。

ネットワーク接続の作成

Kyuubi Gateway は Serverless Spark 内で実行されます。Kerberos クラスターに到達するには、PrivateLink を設定して、2 つの環境間にプライベートネットワーク接続を確立します。

エンドポイントの作成

エンドポイントはサービス利用者によって作成および維持されます。エンドポイントサービスに関連付けて、PrivateLink を介して Kerberos クラスターにアクセスします。詳細については、「エンドポイント」をご参照ください。

  1. エンドポイントコンソールにログインします。

  2. [エンドポイントの作成]」ページで、以下のパラメーターを設定し、「[OK]」をクリックします。

    パラメーター説明
    リージョンエンドポイントが存在するリージョンを選択します。Kerberos クラスターと Serverless Spark ワークスペースのリージョンと一致する必要があります。
    エンドポイント名エンドポイントのカスタム名を入力します。
    エンドポイントタイプインターフェースエンドポイント を選択します。
    エンドポイントサービス[サービスの選択] をクリックし、ターゲットのエンドポイントサービス ID を選択または入力します。
    説明

    エンドポイントサービス ID を取得するには、Serverless Spark ワークスペース ID (例:w-f8cfXXXXXX)、Kerberos クラスターの VPC ID (例:vpc-bp1tXXXXXX)、および利用可能な vSwitch がある 2 つのゾーン (例:I,J) の情報を含めてチケットを送信してください。チケットでカスタマーサービスに連絡し、ご利用のリージョンでサポートされているゾーンを確認してください。

    VPCKerberos クラスターの VPC を選択します。
    セキュリティグループエンドポイント ENI に関連付けるセキュリティグループを選択します。デフォルトでは、エンドポイントごとに最大 9 つのセキュリティグループを追加できます。
    ゾーンと vSwitchチケットで指定されたゾーンと、それに対応する vSwitch を選択します。
    IP バージョンネットワークタイプ:IPv4 クライアントのみのアクセスの場合は [IPv4] を、IPv4 と IPv6 の両方の場合は [デュアルスタック] を選択します。デュアルスタックには、サービスプロバイダーによる事前のデュアルスタック構成が必要です。
    リソースグループエンドポイントのリソースグループを選択します。
    タグ必要に応じて[タグキー][タグ値]を入力します。

    image

  3. [基本情報] ページで、[ステータス] が「有効」であることを確認します。エンドポイントのドメイン名は次の形式です:

    ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com
  4. Kerberos クラスターにログインし、ネットワーク接続が機能していることを確認します。

    image

ドメイン名解決の設定 (任意)

デフォルトのエンドポイントドメイン名は長いです。便宜上、内部権威 DNS ゾーンを使用して、より短いカスタムドメイン名にマッピングします。詳細については、「内部権威ドメイン名」をご参照ください。

  1. コンソールにログインします。[権威ゾーン] タブで、[ユーザー定義ゾーン] をクリックし、次に [ゾーンの追加] をクリックします。

  2. 権威ゾーン名を入力し、ドメイン名が適用される VPC を選択して、[OK] をクリックします。このガイドでは、例として kyuubi-kerberos.abc を使用します。

    [ドメイン名タイプ]」オプションが利用可能な場合は、「[内部権威アクセラレーションゾーン]」を選択します。オプションが表示されない場合、ゾーンタイプは自動的に内部権威アクセラレーションにデフォルト設定されます。
  3. [ユーザー定義ゾーン] タブで、ゾーンを見つけ、[操作] 列の [設定] をクリックします。ダイアログボックスで、[レコードの追加] をクリックし、[フォームエディターモード] を選択します。

  4. [レコードタイプ] を [CNAME] に設定します。[ホスト名] には、test のような値を入力します。[レコード値] には、エンドポイントのドメイン名を入力します:

    addprinc -randkey kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM

    OK」をクリックすると、ドメイン test.kyuubi-kerberos.abc がエンドポイントにマップされます。

  5. Kerberos クラスターにログインし、接続性をテストします。

    ping test.kyuubi-kerberos.abc

keytab の作成

Kerberos クラスターで次の手順を実行します。

  1. Kerberos クラスターにログインします。

  2. Kerberos 管理ツールを開きます。

    kadmin.local
  3. フォーマット kyuubi/<fqdn>@<REALM> でプリンシパルを作成します。<fqdn> には、エンドポイントドメイン名を使用します。CNAME を設定した場合は、代わりにカスタムドメイン名を使用します。

    addprinc -randkey kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM
  4. keytab ファイルをエクスポートして終了します。

    xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM
    quit
  5. keytab を Object Storage Service (OSS) バケットにアップロードします。

    hadoop fs -put /root/kyuubi.keytab oss://<YOUR_BUCKET>.<region>.oss-dls.aliyuncs.com/

Kyuubi Gateway の設定

次の [Kyuubi 構成] パラメーターをゲートウェイに追加してください。

kyuubi.authentication              KERBEROS
kyuubi.kinit.principal             kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM
kyuubi.kinit.keytab                /opt/kyuubi/work-dir/kyuubi.keytab
kyuubi.files                       oss://bucket/path/to/kyuubi.keytab
パラメーター説明
kyuubi.authentication認証メソッド。KERBEROS に設定します。
kyuubi.kinit.principalKyuubi Gateway が Kerberos 認証に使用するプリンシパル。フォーマット: <user>/<host>@<realm>
kyuubi.kinit.keytabゲートウェイ内の keytab ファイルへのローカルパス。パス /opt/kyuubi/work-dir/ は固定です。ファイル名のみを置き換えてください。
kyuubi.files前のステップでアップロードした keytab ファイルの OSS パス。Kyuubi は起動時に kyuubi.kinit.keytab で指定されたパスにダウンロードします。

Spark ジョブが Kerberos 対応の Hive Metastore (HMS) にアクセスする場合、以下の Spark 構成 パラメーターを追加します。

spark.hadoop.hive.metastore.uris                    thrift://master-1-1.c-1d36*****e840c.cn-hangzhou.emr.aliyuncs.com:9083
spark.hadoop.hive.imetastoreclient.factory.class    org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory
spark.hive.metastore.kerberos.principal             hive/_HOST@EMR.C-DFD4*****C204.COM
spark.hive.metastore.sasl.enabled                   true
spark.emr.serverless.network.service.name           <network_name>
パラメーター説明
spark.hadoop.hive.metastore.urisThrift フォーマットの HMS アドレス。
spark.hadoop.hive.imetastoreclient.factory.classHMS クライアントを作成するためのファクトリクラス。org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory を使用します。
spark.hive.metastore.kerberos.principalKerberos 環境の HMS プリンシパル。
spark.hive.metastore.sasl.enabledHMS の Kerberos 認証を有効にするには true に設定します。
spark.emr.serverless.network.service.nameServerless Spark と EMR クラスター間のネットワーク接続の名前。

HMS アドレスのフォーマットルール:

  • 高可用性 (HA) クラスター:複数の Thrift アドレスをカンマで区切って指定します。ホスト名を使用してください。HA モードでは IP アドレスはサポートされていません。

  • 単一の HMS アドレス:IP アドレスを使用できますが、spark.hive.metastore.kerberos.principalhive/<hostname-of-HMS>@<REALM> のフォーマットである必要があります。

  • hive/_HOST@<REALM> という短縮形 (_HOST はランタイム時に実際のホスト名に解決されます) は、metastore.uris がホスト名を使用している場合にのみ機能します。

設定を保存し、Kyuubi Gateway を起動します。

ジョブの送信

show databases クエリを使用して、Kyuubi Gateway が Kerberos 認証で正しく動作していることを確認します。

  1. Kerberos クラスターにログインし、ジョブ送信用の Kerberos ユーザーを作成します。

    kadmin.local
    addprinc -randkey hadoop
    xst -kt /root/hadoop.keytab hadoop
    quit
  2. keytab を使用して認証します。

    kinit -kt hadoop.keytab hadoop

    これにより、hadoop プリンシパルの TGT がキャッシュされ、次のステップで kyuubi-beeline がこれを読み取ります。

  3. Kyuubi Gateway に接続し、テストクエリを実行します。

    /opt/apps/KYUUBI/kyuubi-1.9.2-1.0.0/bin/kyuubi-beeline -u 'jdbc:hive2://ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com:10009/;principal=kyuubi/_HOST@EMR.C-DFD43*****7C204.COM'

    JDBC URL に関する注意:

    • principal は Kyuubi サーバープリンシパルを指定します。この値は、サーバー側の kyuubi.kinit.principal と一致する必要があります。

    • _HOST は、ランタイム時に実際のホスト名に解決されるプレースホルダーです。

    • URL は、シェルが ; 文字でコマンドを分割するのを防ぐために、シングルクォーテーションで囲まれています。

  4. 接続後、show databases を実行して、Spark ジョブが正常に開始されることを確認します。

    image

HDFS と HMS のプロキシユーザーアクセスの設定

Spark ジョブが Kerberos 対応の HMS または Hadoop 分散ファイルシステム (HDFS) にアクセスする必要がある場合は、クラスター上の HADOOP-COMMON または HDFS コンポーネントの core-site.xml に次の 2 つのプロパティを追加します。

hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *

これらのプロパティにより、kyuubi サービスアカウント (Kyuubi Gateway を起動するユーザー) は、他のユーザーに代わって HDFS または HMS にアクセスする際に、そのユーザーの権限を借用できます。hosts の値は kyuubi アカウントが接続できるホストアドレスを制御し、groups の値は権限を借用できるユーザーグループを制御します。これらのプロパティがない場合、kyuubi 以外のユーザーとして実行されている Spark ジョブからの接続は失敗する可能性があります。

ワイルドカード値 (*) は、すべてのホストからのアクセスと、すべてのユーザーグループに対するアクセスを許可します。本番環境では、* を特定の値に置き換えてください。たとえば、hosts を Kyuubi Gateway ノードの IP アドレスに設定し、groups をクライアントユーザーが所属するグループに設定します。

新しいバージョンの EMR DataLake クラスターには、これらのプロパティがデフォルトで含まれています。プロパティを追加した後、変更を有効にするために HDFS または HMS サービスを再起動してください。