Serverless Spark の Kyuubi Gateway で Kerberos を有効にすると、安全な認証とアクセス制御を適用できます。設定が完了すると、クライアントはゲートウェイにジョブを投入する際に Kerberos を使用して認証する必要があり、ジョブ実行のセキュリティが強化されます。
制限事項
EMR on ECS クラスターと Serverless Spark ワークスペースは、同じリージョンに存在する必要があります。
前提条件
Kerberos 認証が有効な EMR on ECS クラスターが作成されていること。詳細については、「クラスターの作成」をご参照ください。
Kerberos 認証が有効な Serverless Spark ワークスペースが作成されていること。詳細については、「Kerberos 認証の有効化」をご参照ください。
Serverless Spark ワークスペースに Kyuubi Gateway が作成されていること。ゲートウェイは実行中である必要はありません。
ネットワーク接続の確立
Kyuubi Gateway で Kerberos を使用するには、PrivateLink を設定して Serverless Spark と Kerberos クラスター間のネットワーク接続を確立する必要があります。この設定はセルフサービスで設定することはできません。設定を完了するには、必要な情報を記載したチケットを起票してください。テクニカルサポートチームが対応します。
エンドポイントの作成
エンドポイントは、サービスコンシューマーによって作成および管理されます。エンドポイントをエンドポイントサービスに関連付けることで、PrivateLink を介して外部サービスにアクセスするためのプライベートネットワーク接続を確立できます。詳細については、「エンドポイント」をご参照ください。
エンドポイントコンソールにログインします。
エンドポイントの作成 ページで、以下のパラメーターを使用してエンドポイントを設定し、作成 をクリックします。

パラメーター
説明
[リージョン]
エンドポイントのリージョンを選択します。リージョンは、Kerberos クラスターおよび Serverless Spark ワークスペースのリージョンと一致している必要があります。
[Node Name]
エンドポイントの任意の名前を入力します。
[エンドポイントタイプ]
[Interface Endpoint] を選択します。
[エンドポイントサービス]
利用可能なサービスの選択 をクリックし、ターゲットのエンドポイントサービスの ID を選択または入力します。
説明エンドポイントサービス ID を取得するには、次の情報を記載したチケットを起票してください。
Serverless Spark ワークスペース ID (例:
w-f8cfXXXXXX)。Kyuubi ゲートウェイにアクセスする Kerberos クラスターの VPC ID。この VPC には、2 つのゾーンで利用可能な vSwitch が必要です。例:
vpc-bp1tXXXXXX。選択された 2 つのゾーンは
I,Jのようになります。ご利用のリージョンでサポートされているゾーンについては、チケットでサポートチームにお問い合わせください。kb-564e********266fのような Kyuubi ゲートウェイ ID。
[VPC]
Kyuubi Gateway にアクセスする Kerberos クラスターの VPC を選択します。
[セキュリティグループ]
エンドポイントの Elastic Network Interface (ENI) に関連付けるセキュリティグループを選択します。
説明1 つのエンドポイントに最大 9 つのセキュリティグループを関連付けることができます。
[ゾーンと vSwitch]
先ほど指定したゾーンと、それに対応する vSwitch を選択します。
[IP バージョン]
以下のネットワークタイプがサポートされています。
IPv4:クライアントが IPv4 アドレスを使用してアクセスできます。
[Dual-stack]:クライアントが IPv4 と IPv6 の両方のアドレスを使用してアクセスできます。
説明デュアルスタックオプションは、サービスプロバイダーがデュアルスタック設定を完了した後にのみ選択できます。
[Resource Group]
エンドポイントが属するリソースグループを選択します。
[タグ]
Tag Key と Tag Value を選択または入力します。
基本情報 ページでは、Status が Status の場合、エンドポイントは使用可能です。エンドポイントサービスドメイン名は
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comです。Kerberos クラスターにログインし、ネットワーク接続をテストします。

DNS 名前解決の設定 (任意)
デフォルトのエンドポイントサービスのドメイン名は長いため、これを簡略化するためにカスタムの内部権威ドメイン名を設定できます。詳細については、「内部権威ドメイン名」をご参照ください。
にログインします。[Authoritative Zone] ページで、[User-defined Zones] タブをクリックし、[Add Zone] をクリックします。
[内部権威ドメイン名] を入力し、ドメイン名を適用する VPC を選択して、OK をクリックします。 この例では、
kyuubi-kerberos.abcを使用します。説明[ドメインタイプ] オプションが利用可能な場合は、[プライベート権威アクセラレーションゾーン] を選択します。[ドメインタイプ] オプションが利用できない場合は、選択する必要はなく、デフォルトで [プライベート権威アクセラレーションゾーン] ドメインが作成されます。
[User-defined Zones] タブで、ターゲットのドメイン名を見つけ、操作 列の [Settings] をクリックします。次に、[Add Record] をクリックし、ダイアログボックスで [Form Editor Mode] を選択します。
[レコードタイプ] を CNAME に設定します。[ホスト名] にプレフィックスを入力します。この例では、
testを使用します。[レコード値] に、エンドポイントサービスのドメイン名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comを入力します。OK をクリックすると、エンドポイントサービスのドメイン名が test.kyuubi-kerberos.abc にマッピングされます。Kerberos クラスターにログインし、ネットワーク接続をテストします。
ping test.kyuubi-kerberos.abc
keytab ファイルの作成
次のコマンドを実行して、Kerberos の kadmin.local ツールを起動します。
kadmin.localkyuubi/<fqdn>@<REALM>形式でプリンシパルを作成します。fqdn部分には、エンドポイントドメイン名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comを使用することをお勧めします。 カスタムドメイン名を解決するように CNAME レコードを設定している場合は、test.kyuubi-kerberos.abcなどのカスタムドメイン名を使用します。addprinc -randkey kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COMkeytab ファイルをエクスポートし、kadmin.local ツールを終了します。
xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM quit生成された keytab ファイルを Object Storage Service (OSS) バケットにアップロードします。
hadoop fs -put /root/kyuubi.keytab oss://<YOUR_BUCKET>.<region>.oss-dls.aliyuncs.com/
Kyuubi Gateway の設定
Kyuubi Gateway で Kerberos を使用するには、次の [Kyuubi Configuration] を追加します。
kyuubi.authentication KERBEROS
kyuubi.kinit.principal kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM
kyuubi.kinit.keytab /opt/kyuubi/work-dir/kyuubi.keytab
kyuubi.files oss://bucket/path/to/kyuubi.keytabパラメーター | 説明 |
kyuubi.authentication | Kyuubi Gateway が使用する認証モードを指定します。このパラメーターを |
kyuubi.kinit.principal | Kyuubi Gateway が Kerberos 認証に使用するプリンシパルを指定します。形式は |
kyuubi.kinit.keytab | Kyuubi Gateway が使用する keytab ファイルを指定します。注: パスは固定のため、keytab ファイル名のみを置き換えてください。 |
kyuubi.files | 「keytab ファイルの作成」セクションでアップロードした keytab ファイルの OSS パスを指定します。 |
Kerberos が有効な Hive Metastore (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.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.uris | Hive Metastore (HMS) のアドレスを指定します。 |
spark.hadoop.hive.imetastoreclient.factory.class | HMS クライアントを作成するためのファクトリクラスを指定します。 |
spark.hive.metastore.kerberos.principal | Kerberos 環境における HMS のプリンシパルを指定します。 |
spark.hive.metastore.sasl.enabled | Kerberos 認証を有効にするかどうかを指定します。 |
spark.emr.serverless.network.service.name | ネットワーク接続の名前を指定します。 |
高可用性 (HA) クラスターでは、
metastore.urisに複数の Thrift アドレスを設定できます。アドレスはコンマで区切り、IP アドレスではなくホスト名を使用する必要があります。metastore.urisに Thrift アドレスを 1 つだけ指定する場合、IP アドレスを使用できます。ただし、metastore.kerberos.principalはhive/<hostname of HMS>@<REALM>形式である必要があります。metastore.urisがホスト名を使用する場合にのみ、metastore.kerberos.principalをhive/_HOST@<REALM>形式に簡略化できます。
設定を保存し、Kyuubi Gateway を起動します。
ジョブの投入
show databases コマンドを実行して、Kerberos クラスターが Kyuubi ゲートウェイに接続し、Spark ジョブを開始できることを確認します。
必要な権限を持つ Kerberos ユーザーを準備し、その keytab ファイルをエクスポートします。
次のコマンドを実行して、keytab ファイルをエクスポートします。
kadmin.local addprinc -randkey hadoop xst -kt /root/hadoop.keytab hadoop quit
keytab ファイルを使用して Kerberos で認証します。
kinit -kt hadoop.keytab hadoop次のコマンドを実行して Kyuubi Gateway に接続し、Spark ジョブを開始します。
/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-DFD4*****C204.COM'接続後、
show databasesを実行します。
Spark ジョブが Kerberos 対応の Hive Metastore (HMS) または Hadoop 分散ファイルシステム (HDFS) サービスに接続する必要がある場合、HMS または HDFS クラスターの core-site.xml 設定ファイルを変更する必要があります。kyuubi ユーザーがサービスにアクセスする際に他のユーザーを偽装できるように、このファイルに次のプロパティを追加します。そうしないと、接続が失敗する可能性があります。
hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *新しいバージョンの EMR DataLake クラスターには、デフォルトでこれらのプロパティが含まれています。これらのプロパティを追加した後、HDFS または HMS サービスを再起動する必要があります。