Serverless Spark の Kyuubi ゲートウェイで Kerberos を有効にすることで、安全な認証とアクセス制御を適用できます。設定が完了すると、クライアントはゲートウェイにジョブを送信する際に Kerberos による認証が必要となり、ジョブ実行のセキュリティが向上します。
制限事項
-
KDC と Serverless Spark ワークスペースは、同じリージョンに存在する必要があります。
前提条件
-
Kerberos 認証が有効になっている EMR on ECS クラスターが作成済みであること。詳細については、「クラスターの作成」をご参照ください。
-
Kerberos 認証が有効になっている Serverless Spark ワークスペースが作成済みであること。詳細については、「Kerberos 認証の有効化」をご参照ください。
-
Serverless Spark ワークスペースに Kyuubi ゲートウェイが作成済みであること。ゲートウェイは実行中である必要はありません。
ネットワーク接続の確立
Kyuubi ゲートウェイで Kerberos を使用するには、PrivateLink を設定して、Serverless Spark と Kerberos クラスター間のネットワーク接続を確立する必要があります。この設定はセルフサービスでは行えません。設定を完了するには、必要な情報を記載したチケットを送信し、epsrv-bp10******2j5ms のようなエンドポイントサービス ID を取得する必要があります。
エンドポイントサービス ID を取得するには、チケットシステムで次の情報を送信してください。
-
Serverless Spark ワークスペース ID (例:
w-f8cfXXXXXX)。 -
Kyuubi ゲートウェイ ID (例:
kb-564e********266f)。 -
Kyuubi サービスへのアクセスに使用できるゾーン (2 つ以上)。例:
cn-hangzhou-j,cn-hangzhou-k。各リージョンでサポートされているゾーンの詳細については、チケットでカスタマーサービス担当者にお問い合わせください。
エンドポイントの作成
エンドポイントは、サービスコンシューマーによって作成および維持され、エンドポイントサービスに関連付けることで、PrivateLink を介して外部サービスにアクセスするためのプライベートネットワーク接続を確立できます。詳細については、「エンドポイント」をご参照ください。
-
[Endpoint コンソール]にログオンします。
-
エンドポイントの作成 ページで、次のパラメーターを使用してエンドポイントを設定し、作成 をクリックします。
Parameter
Description
[リージョン]
エンドポイントのリージョンを選択します。リージョンが Kerberos クラスターおよび Serverless Spark ワークスペースのリージョンと同じであることを確認してください。
[エンドポイント名]
エンドポイントのカスタム名を入力します。
[エンドポイントタイプ]
[インターフェイスエンドポイント] を選択します。
[エンドポイントサービス]
利用可能なサービスの選択 をクリックし、ターゲットエンドポイントサービスの ID として、前のステップで取得した値
epsrv-bp10******2j5msを選択または入力します。[VPC]
Kyuubi ゲートウェイにアクセスするノードが存在する VPC を選択します。
[ゾーンと vSwitch]
先ほど指定したゾーンと vSwitch を選択します。少なくとも 2 つのゾーンを選択することを推奨します。
[セキュリティグループ]
エンドポイントのネットワークインターフェイスに関連付けるセキュリティグループを選択します。接続要求がセキュリティグループによってブロックされるのを防ぐため、Kyuubi ゲートウェイにアクセスするノードが存在するクラスターのセキュリティグループを選択することを推奨します。
[IP バージョン]
サポートされているネットワークタイプです。デフォルトでは IPv4 が使用されます。
[Resource Group]
任意。エンドポイントが属するリソースグループを選択します。
[タグ]
任意: Tag Key と Tag Value を設定します。
-
エンドポイントの 基本情報 ページで、Status が「利用可能」の場合、エンドポイントは作成済みです。エンドポイントサービスドメイン名は
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comです。 -
Kerberos クラスターにログインし、ネットワーク接続をテストします。
ping コマンドを使用して、Kerberos クラスターノードからエンドポイントのプライベートネットワーク接続を確認します。正常な応答は、ネットワークが接続されていることを示します。
[root@master-1-1(xxx) ~]# ping ep-bp1ixxx.cn-hangzhou.privatelink.aliyuncs.com PING ep-bp1xxx xxx.cn-hangzhou.privatelink.aliyuncs.com (xxx) 56(84) bytes of data. 64 bytes from xxx (xxx): icmp_seq=1 ttl=102 time=0.989 ms
DNS 名前解決の設定 (任意)
デフォルトのエンドポイントサービスのドメイン名は長いです。使用を簡素化するために、カスタムの内部権威ドメイン名を設定できます。詳細については、「内部権威ドメイン名」をご参照ください。
-
にログインし、[権威ゾーン] ページで [ユーザー定義ゾーン] タブをクリックして、[ゾーンの追加] をクリックします。
-
[権威ゾーン] のドメイン名を入力し、ドメイン名が有効になる VPC を選択してから、OK をクリックします。この例では、
kyuubi-kerberos.abcを使用します。説明[ドメインタイプ] オプションが利用可能な場合は、[加速ゾーン] を選択します。[ドメインタイプ] オプションが利用できない場合は、選択する必要はなく、デフォルトで [加速ゾーン] ドメイン名が作成されます。
-
[ユーザー定義ゾーン] タブで、ターゲットドメイン名を見つけ、操作 列にある [設定] をクリックします。 次に、[レコードの追加] をクリックし、ダイアログボックスで [フォームエディターモード] を選択します。
-
[レコードタイプ] を CNAME に設定します。 [ホスト名] には、ビジネス要件に基づいて値を入力します。 この例では、
testが使用されます。 [レコード値] には、エンドポイントサービスのドメイン名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comを入力します。 OK をクリックすると、エンドポイントサービスのドメイン名が [test.kyuubi-kerberos.abc] にマッピングされます。 -
Kerberos クラスターにログインし、ネットワーク接続をテストします。
ping test.kyuubi-kerberos.abc
keytab ファイルの作成
kyuubi.keytab ファイルを作成します。この keytab ファイルは、Serverless Spark の Kyuubi ゲートウェイ認証サービスでのみ使用されます。
-
Kerberos クラスターにログインし、Kadmin ノード (EMR on ECS クラスターの master-1-1 ノードなど) にアクセスします。
-
次のコマンドを実行して、Kerberos の kadmin.local ツールを起動します。
kadmin.local次のコマンドを実行して、既存のプリンシパルを表示します。
listprincs -
kyuubi/<fqdn>@<REALM>の形式でプリンシパルを作成します。fqdn部分には、エンドポイントのドメイン名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comを使用することを推奨します。CNAME レコードを設定してカスタムドメイン名を解決している場合は、カスタムドメイン名test.kyuubi-kerberos.abcを使用します。<REALM>部分は、現在のクラスター設定と一致している必要があります。既存の他のプリンシパルを参照できます。addprinc -randkey kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM -
keytab ファイルをエクスポートし、エクスポートが完了したら kadmin.local ツールを終了します。
xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COMquit -
生成された keytab ファイルを Object Storage Service (OSS) バケットにアップロードします。
hadoop fs -put /root/kyuubi.keytab oss://<bucket_name>.oss-<region-id>-internal.aliyuncs.com/<path>/
Kyuubi ゲートウェイの設定
Kyuubi Gateway で Kerberos を使用するには、KDC クラスターにアクセスできる[ネットワーク接続]を選択し、次のKyuubi Configurationを追加します。
kyuubi.authentication KERBEROS
kyuubi.kinit.principal kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM
kyuubi.files oss://<bucket_name>/<path>/kyuubi.keytab
kyuubi.kinit.keytab /opt/kyuubi/work-dir/kyuubi.keytab
|
パラメーター |
説明 |
|
kyuubi.authentication |
Kyuubi ゲートウェイが使用する認証モードを指定します。このパラメーターを |
|
kyuubi.kinit.principal |
Kyuubi ゲートウェイが Kerberos 認証に使用するプリンシパルを指定します。形式は |
|
kyuubi.files |
このパラメーターは、指定されたファイルを |
|
kyuubi.kinit.keytab |
Kyuubi ゲートウェイが使用する keytab ファイルを指定します。注意:パスは |
Kerberos 認証が有効な Hive メタストア (HMS) に接続し、ワークスペースデータカタログが HMS データカタログで既に構成されている場合は、以下の Spark Configuration を追加します。
spark.hive.metastore.kerberos.principal hive/_HOST@EMR.C-DFD4*****C204.COM
spark.hive.metastore.sasl.enabled true
|
パラメーター |
説明 |
|
spark.hive.metastore.kerberos.principal |
Kerberos 環境における HMS のプリンシパルです。前の手順で |
|
spark.hive.metastore.sasl.enabled |
Kerberos 認証を有効にするかどうかを指定します。このパラメーターを true に設定します。 |
任意。Kerberos が有効な HMS に接続する必要があり、ワークスペースのデータカタログが HMS データカタログで設定されて[いない]場合は、次の [Spark Configuration] も[追加]する必要があります。
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.hadoop.hive.metastore.uris |
Hive Metastore (HMS) のアドレスです。 |
|
spark.hadoop.hive.imetastoreclient.factory.class |
固定値です。 |
-
高可用性 (HA) クラスターでは、
metastore.urisに複数の Thrift アドレスを設定できます。アドレスはカンマで区切り、IP アドレスではなくホスト名を使用する必要があります。 -
metastore.urisに Thrift アドレスを 1 つだけ指定する場合、IP アドレスを使用できます。ただし、metastore.kerberos.principalはhive/<hostname of HMS>@<REALM>の形式である必要があります。 -
metastore.kerberos.principalをhive/_HOST@<REALM>形式に簡略化できるのは、metastore.urisがホスト名を使用している場合のみです。
設定を保存し、Kyuubi ゲートウェイを起動します。
ジョブの送信
Kerberos クラスターが Kyuubi ゲートウェイに接続し、Spark ジョブを開始できることを確認します。
-
(任意) 必要な権限を持つ Kerberos ユーザーを準備し、そのユーザーの keytab ファイルをエクスポートします。
-
次のコマンドを実行して、keytab ファイルをエクスポートします。
kadmin.local addprinc -randkey emr-user@EMR.C-DFD4*****C204.COM xst -kt /root/emr-user.keytab emr-user@EMR.C-DFD4*****C204.COM quit
-
keytab ファイルを使用して Kerberos で認証します。
kinit -kt /root/emr-user.keytab emr-user前の手順で keytab ファイルが作成されていない場合は、EMR on ECS にデフォルトで存在する hive.keytab ファイルのような既存のサービス keytab ファイルを使用することもできます。
説明テスト目的で、クラスター上の既存の keytab ファイルを直接使用できます。ただし、既存のサービス keytab ファイルを変更または再エクスポートしないでください。そうしないと、元のサービスが利用できなくなる可能性があります。
klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab kinit -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab hive/master-1-1.c-596f1842f3ed8ad0.cn-hangzhou.emr.aliyuncs.com@EMR.C-596F1842F3ED8AD0.COM -
現在の Kerberos チケットを表示します。
klist -
kyuubi-beeline または spark-beeline を使用して Kyuubi ゲートウェイに接続し、Spark ジョブを開始します。
kyuubi-beeline -u 'jdbc:hive2://ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com:10009/;principal=kyuubi/_HOST@EMR.C-DFD43*****7C204.COM'説明-
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comは、「エンドポイントの作成」の手順で取得したサービスドメイン名です。 -
デフォルトのポート番号は 10009 です。
-
principal は Kyuubi サービスのプリンシパルです。
<fqdn>部分は_HOSTに簡略化できます。つまり、kyuubi/_HOST@EMR.C-DFD43*****7C204.COMです。
-
-
接続が確立された後、
show databasesを実行します。2025-08-21 14:55:18.392 INFO KyuubiSessionManager-exec-pool: Thread-83 org.apache.kyuubi.operation.ExecuteState STATE -> FINISHED_STATE, time taken: 0.301 seconds 2025-08-21 14:55:18.393 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.MessageSender: [KyuubiSqlStateme success! 2025-08-21 14:55:18.418 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.MessageSender: channel listener 2025-08-21 14:55:18.420 INFO nioEventLoopGroup-3-1 org.apache.kyuubi.websocket.WebSocketClientHandler: channel: ! +------------+ | namespace | +------------+ | default | +------------+ 1 row selected (0.539 seconds)
よくある質問
-
Kerberos が有効な HDFS サービスに接続するにはどうすればよいですか?
HDFS サービスが存在するクラスターの HADOOP-COMMON または HDFS コンポーネントの core-site.xml 設定ファイルを変更する必要があります。kyuubi ユーザーが HDFS/HMS サービスにアクセスする際に他のユーザーを偽装できるように、次のプロパティをファイルに追加します。そうしないと、接続が失敗する可能性があります。プロパティを追加した後、HDFS/HMS サービスを再起動します。新しいバージョンの EMR DataLake クラスターには、デフォルトでこれらのプロパティが既に含まれています。
hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *
次の [Spark Configuration] も追加する必要があります。
spark.kerberos.access.hadoopFileSystems hdfs://hdfs-cluster
-
Kerberos 認証なしで Kyuubi にジョブを送信し、Spark ジョブが HMS にアクセスするときにのみ Kerberos 認証を実行するにはどうすればよいですか?
次のように Kyuubi 設定を変更します。この場合、Kyuubi に接続する際にプリンシパルを指定する必要はありません。
kyuubi.authentication KERBEROS,NONE
-
Kerberos を有効にした後、Ranger サービスに接続するにはどうすればよいですか?
次の [Spark Configuration] を追加します。
spark.ranger.plugin.enabled true
spark.emr.serverless.user.defined.jars /opt/ranger/ranger-spark.jar
ranger.plugin.spark.policy.rest.url http://master-1-1.c-xxxx.cn-hangzhou.emr.aliyuncs.com:6080
spark.files oss://<bucket_name>/<path>/kyuubi.keytab
ranger.plugin.spark.policy.download.loginKeytab true
ranger.plugin.spark.policy.download.keytab /opt/spark/work-dir/kyuubi.keytab
ranger.plugin.spark.policy.download.principal kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD43******7C204.COM
|
パラメーター |
説明 |
|
spark.files |
このパラメーターは、指定されたファイルを |
|
ranger.plugin.spark.policy.download.loginKeytab |
固定値です。 |
|
ranger.plugin.spark.policy.download.keytab |
任意の有効な keytab ファイルです。 |
|
ranger.plugin.spark.policy.download.principal |
keytab ファイルに保存されているプリンシパルです。このプリンシパルは、認証の失敗を防ぐために Ranger ポリシーをダウンロードするために使用されます。 |