Serverless Spark の Kyuubi Gateway で Kerberos を使用して、安全な身分認証とアクセスの制御を行うことができます。構成が完了すると、クライアントは Kerberos 認証を使用してワークスペース内の Kyuubi Gateway にタスクを送信する必要があります。このプロセスにより、タスク実行のセキュリティが強化されます。
制限事項
クラスターと Serverless Spark ワークスペースは同じリージョンにある必要があります。
Kerberos が有効になっているワークスペースでは、Kyuubi Gateway は 1 つしか作成できません。
前提条件
Kerberos 認証が有効になっている EMR on ECS クラスターを作成済みであること。詳細については、「クラスターの作成」をご参照ください。
Kerberos 認証が有効になっている Serverless Spark ワークスペースを作成済みであること。詳細については、「Kerberos 認証を有効にする」をご参照ください。
ネットワーク接続の確立
Kyuubi Gateway で Kerberos を使用するには、PrivateLink を構成して、Serverless Spark と Kerberos クラスター間のネットワーク接続を確立する必要があります。
エンドポイントの作成
エンドポイントは、サービス利用者によって作成および維持されます。エンドポイントをエンドポイントサービスに関連付けて、PrivateLink を介して外部サービスにアクセスするためのネットワーク接続を確立できます。詳細については、「エンドポイント」をご参照ください。
[エンドポイントコンソール] にログインします。
[エンドポイントの作成] ページで、エンドポイントの次のパラメーターを構成し、[作成] をクリックします。

構成
説明
リージョン
エンドポイントが存在するリージョンを選択します。Kerberos クラスターおよび Serverless Spark ワークスペースと同じリージョンであることを確認してください。
エンドポイント名
エンドポイントのカスタム名を入力します。
エンドポイントタイプ
[インターフェイスエンドポイント] を選択します。
エンドポイントサービス
[利用可能なサービスを選択] をクリックし、ターゲットのエンドポイントサービス ID を選択または入力します。
説明次の情報を チケット で送信して、エンドポイントサービス ID を取得します。
Serverless Spark ワークスペース ID (例:
w-f8cfXXXXXX)。Kyuubi Gateway にアクセスする Kerberos クラスターの VPC ID。VPC には、2 つのゾーンで利用可能な vSwitch が必要です (例:
vpc-bp1tXXXXXX)。選択した 2 つのゾーン (例:
I,J)。リージョンでサポートされているゾーンを確認するには、チケットでカスタマーサービスにお問い合わせください。
VPC
Kyuubi Gateway にアクセスする Kerberos クラスターの VPC を選択します。
セキュリティグループ
エンドポイント ENI に関連付けるセキュリティグループを選択します。
説明デフォルトでは、エンドポイントに最大 9 つのセキュリティグループを追加できます。
ゾーンと VSwitch
前述のゾーンとそれに対応する vSwitch を選択します。
IP バージョン
サポートされているネットワークタイプ。
IPv4: IPv4 アドレスを使用したクライアントアクセスをサポートします。
デュアルスタック: IPv4 と IPv6 の両方のアドレスを使用したクライアントアクセスをサポートします。
説明サービス利用者は、サービスプロバイダーがデュアルスタック構成を完了した後にのみ、このオプションを選択できます。
リソースグループ
エンドポイントが属するリソースグループを選択します。
タグ
[タグキー] と [タグ値] を選択または入力します。
[基本情報] ページで、[ステータス] が アクティブな になっている場合は、エンドポイントサービスが正常に作成されたことを示します。エンドポイントサービスのドメイン名は
ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comです。Kerberos クラスターにログインし、ネットワーク接続をテストします。

ドメイン名解決の設定 (オプション)
デフォルトのエンドポイントサービスのドメイン名は長いです。便宜上、カスタムの内部権限のあるドメイン名を設定できます。詳細については、「内部権限のあるドメイン名」をご参照ください。
コンソールにログインします。[内部権限] タブで、[カスタムドメイン名] タブをクリックし、[ゾーンの追加] をクリックします。
[内部権限のあるドメイン名] を入力し、ドメイン名が適用される VPC を選択して、[OK] をクリックします。このトピックでは、例として
kyuubi-kerberos.abcを使用します。説明[ドメイン名タイプ] オプションが利用可能な場合は、[内部権限アクセラレーションゾーン] を選択します。[ドメイン名タイプ] オプションが利用できない場合は、デフォルトで [内部権限アクセラレーションゾーン] ドメイン名が作成されるため、タイプを選択する必要はありません。
[カスタムドメイン名] タブで、ターゲットのドメイン名を見つけ、[アクション] 列の [DNS 設定] をクリックします。表示されるダイアログボックスで、[レコードの追加] をクリックし、[フォームモード] を選択します。
[レコードタイプ] を CNAME に設定します。[ホスト名] には、
testなどの値を入力します。[レコード値] には、エンドポイントサービスのドメイン名ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.comを入力します。[OK] をクリックすると、エンドポイントサービスのドメイン名が test.kyuubi-kerberos.abc にマッピングされます。Kerberos クラスターにログインし、ネットワーク接続をテストします。
ping test.kyuubi-kerberos.abc
keytab の作成
次のコマンドを実行して、Kerberos admin.local ツールにアクセスします。
kadmin.localフォーマット
kyuubi/<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 ファイルをエクスポートし、Kerberos admin.local ツールを終了します。
xst -kt /root/kyuubi.keytab kyuubi/ep-xxxxxxxxxxx.epsrv-xxxxxxxxxxx.cn-hangzhou.privatelink.aliyuncs.com@EMR.C-DFD4*****C204.COM quit生成された keytab ファイルを OSS バケットにアップロードします。
hadoop fs -put /root/kyuubi.keytab oss://<YOUR_BUCKET>.<region>.oss-dls.aliyuncs.com/
Kyuubi Gateway の構成
Kyuubi Gateway で Kerberos を使用するには、次の [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 | 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 構成] が必要です。
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 | 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/<HMS のホスト名>@<REALM>` のフォーマットである必要があります。
`metastore.uris` がホスト名を使用している場合にのみ、`metastore.kerberos.principal` を `hive/_HOST@<REALM>` のフォーマットに簡略化できます。
構成を保存し、Kyuubi Gateway を起動します。
ジョブの送信
show databases ジョブを使用して、Kerberos クラスターが Kyuubi Gateway に接続し、Spark ジョブを正常に開始できることを確認できます。
必要な権限を持つ Kerberos ユーザーを準備し、その keytab ファイルをエクスポートします。
次のコマンドを実行して keytab ファイルをエクスポートします。
kadmin.local addprinc -randkey hadoop xst -kt /root/hadoop.keytab hadoop quit
Kerberos 認証に keytab ファイルを使用します。
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-DFD43*****7C204.COM'接続後、
show databasesを実行します。
Spark ジョブが Kerberos 認証が有効になっている HMS または Hadoop 分散ファイルシステム (HDFS) サービスに接続する必要がある場合は、クラスター上の HADOOP-COMMON または HDFS コンポーネントの core-site.xml ファイルを変更する必要があります。ファイルに次の 2 つの構成を追加します。これにより、kyuubi ユーザーは HDFS または HMS サービスにアクセスする際に他のユーザーを偽装できます。これらの構成を追加しないと、接続が失敗する可能性があります。
hadoop.proxyuser.kyuubi.hosts = *
hadoop.proxyuser.kyuubi.groups = *新しいバージョンの EMR DataLake クラスターには、これらのパラメーターがデフォルトで含まれています。パラメーターを追加した後、HDFS または HMS サービスを再起動する必要があります。