Serverless Spark ワークスペースで Kerberos 認証を有効にすると、すべてのクライアントは Spark タスクを送信する前に認証が必要になります。これにより、不正アクセスが減少し、タスク実行のセキュリティが向上します。
制限事項
1 つのワークスペースは、1 つの Kerberos クラスターにのみバインドできます。
Kerberos 認証は、Spark バッチジョブでのみサポートされています。
Kerberos 認証には、EMR Serverless Spark とご利用の Virtual Private Cloud (VPC) との間のネットワーク接続が必要であり、Kerberos トラフィックのために UDP ポート 88 を開く必要があります。認証を設定する前に、ステップ 1 でネットワーク設定を完了してください。
前提条件
開始する前に、以下を確認してください。
Kerberos プリンシパルが作成され、その keytab ファイルがエクスポートされて Object Storage Service (OSS) にアップロードされていること。
EMR on ECS クラスターについては、「Kerberos の基本的な使用方法」をご参照ください。
Serverless Spark ワークスペースが作成されていること。詳細については、「ワークスペースの管理」をご参照ください。
ステップ 1:ネットワークの準備
EMR Serverless Spark とご利用の VPC との間にネットワーク接続を確立します。詳細については、「EMR Serverless Spark と他の VPC との間のネットワーク接続の確立」をご参照ください。
セキュリティグループルールを追加する際は、Kerberos トラフィックのために UDP ポート 88 を開いてください。代わりに TCP 経由でネットワーク接続を設定する場合は、ステップ 2 で krb5.conf ファイルの [libdefaults] の下に udp_preference_limit = 1 を追加してください。
ステップ 2:Kerberos 認証の設定
このステップでは、Serverless Spark ワークスペースを Kerberos クラスターにバインドし、認証の強制を有効にします。
EMR コンソールの左のナビゲーションウィンドウで、[EMR Serverless] > [Spark] を選択します。
[Spark] ページで、対象のワークスペースの名前をクリックします。
左側のナビゲーションウィンドウで、[セキュリティ] > [Kerberos 認証] をクリックします。
[Kerberos のバインド] をクリックします。
[Kerberos のバインド] ページで、次のパラメーターを設定し、[OK] をクリックします。
パラメーター 説明 Kerberos 名 カスタム名を入力します。 ネットワーク接続 ステップ 1 で作成したネットワーク接続を選択します。 ケルベロス krb5.conf krb5.confファイルの内容を入力します。以下の手順をご参照ください。krb5.confコンテンツの取得方法krb5.confファイルは通常、Kerberos サーバーの/etc/krb5.confにあります。EMR DataLake クラスター: マスターノードにログオンし (クラスターにログオンするをご参照ください)、
cat /etc/krb5.confを実行して、その出力を [Kerberos Krb5.conf] フィールドにコピーします。その他の EMR クラスターまたは自己管理型 Kerberos:ファイル内の
hostnameの値を、ご利用の VPC のプライベート IP アドレスに置き換えます。
ステップ 1 で UDP ポート 88 を開いた場合、
krb5.confを変更する必要はありません。TCP を使用した場合は、[libdefaults]の下にudp_preference_limit = 1を追加します。
操作列で[有効化]をクリックし、確認ダイアログで [OK] をクリックします。
ステップ 3:Kerberos 認証を使用した Spark バッチジョブの送信
Kerberos 認証を有効にした後、すべての Spark バッチジョブに Kerberos 認証情報を含める必要があります。認証情報なしでジョブを送信すると、spark.kerberos.keytab and spark.kerberos.principal not configured というエラーが返されます。
Spark バッチジョブを作成します。詳細については、「PySpark クイックスタート」をご参照ください。
「開発」タブで、[ネットワーク接続] をステップ 1 で追加した接続に設定し、次に [Spark 設定] に次の Kerberos パラメーターを追加して、[実行] をクリックします。
spark.files oss://<bucketname>/path/test.keytab spark.kerberos.keytab test.keytab spark.kerberos.principal <username>@<REALM>パラメーター 説明 spark.filesOSS にアップロードされた keytab ファイルの完全なパス。 spark.kerberos.keytabkeytab ファイルの名前。 spark.kerberos.principalkeytab ファイル内のプリンシパル。Kerberos での身元認証に使用されます。 klist -kt <keytab_file>を実行してプリンシパルを表示します。(任意) ジョブから Kerberos が有効な Hive メタストアに接続する Kerberos で保護された Hive メタストアからメタデータをクエリするには、以下のパラメーターを [Spark 設定] に追加します:
spark.hive.metastore.sasl.enabled true spark.hive.metastore.kerberos.principal hive/<hostname>@<REALM>spark.hive.metastore.kerberos.principalを、Hive Metastore が使用する keytab ファイルのプリンシパルに設定します。これを見つけるには:EMR on ECS コンソールで、Hive サービスの [設定] ページに移動して [hive-site.xml] タブを開き、
hive.metastore.kerberos.keytab.fileの値を見つけます。klist -kt <path_to_Hive_Metastore_keytab_file>を実行してプリンシパルを取得します。
プリンシパルのフォーマットは
hive/<hostname>@<REALM>です。ここで、<hostname>は Hive Metastore を実行しているノードの完全修飾ドメイン名 (FQDN) であり (hostname -fを実行して取得)、<REALM>は KDC レルムです。Hive Metastore のエンドポイントがホスト名を使用している場合は、
hive/_HOST@<REALM>を使用します。Spark は自動的に_HOSTを Hive Metastore のエンドポイントのホスト名に置き換えます。このフォーマットは、複数の Hive Metastore を設定する場合に必要です。ジョブの実行後、[実行記録] セクションに移動し、[操作] 列の [詳細] をクリックします。
[ジョブ履歴] では、[ログ探索] ページでログを表示できます。

ステップ 4 (オプション):ワークスペースのデータカタログを Kerberos が有効な Hive Metastore に接続
ワークスペースのデータカタログが Kerberos で保護された Hive Metastore からメタデータをフェッチする必要がある場合は、外部 Hive Metastore を追加する際に keytab ファイルのパスとプリンシパルを指定します。

| フィールド | 説明 |
|---|---|
| Kerberos キータブファイル | Kerberos keytab ファイルのパス。 |
| Kerberos プリンシパル | keytab ファイルのプリンシパル名。Kerberos での身元認証に使用されます。klist -kt <keytab_file> を実行してプリンシパルを表示します。 |