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

E-MapReduce:Kyuubi トークンを使用した EMR Serverless Spark における DLF データの権限管理

最終更新日:Dec 02, 2025

このトピックでは、EMR Serverless Spark の Kyuubi ゲートウェイでトークンベースの ID 認証を構成する方法について説明します。この方法では、Resource Access Management (RAM) ユーザーにバインドされたトークンを使用して、Data Lake Formation (DLF) の Paimon カタログデータに対する詳細なアクセス制御を可能にします。異なるクライアントは、それぞれの一意の認証情報を使用して同じ Kyuubi ゲートウェイにアクセスできますが、権限を持つデータのみをクエリできます。

利用シーン

企業のデータ分析プラットフォームでは、複数のユーザーやアプリケーションが Kyuubi ゲートウェイなどの統一された SQL ゲートウェイを介してデータにアクセスします。データセキュリティを確保するためには、異なる ID のアクセスを分離する必要があります。これにより、各ユーザーは自身の権限範囲内のデータにのみアクセスできるようになります。例えば、アナリスト A はビジネスレポートのみをクエリでき、データエンジニア B は基盤となる生のデータセットにアクセスできます。このソリューションは、マルチテナンシー環境でデータ権限の分離を提供し、エンドツーエンドの ID 認証とアクセス制御を実現します。

操作手順

ステップ 1:環境と RAM ユーザー権限の準備

  1. 基本的なリソースの準備

  2. RAM ユーザーと権限の構成 RAM ユーザーを準備し、必要な権限を付与します。

    • EMR Serverless Spark 権限:RAM ユーザーに EMR Serverless Spark へのアクセスに必要な基本的な操作権限を付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    • ワークスペース権限:RAM ユーザーをワークスペースに追加し、その役割に基づいてロールを割り当てます。詳細については、「ユーザーとロールの管理」をご参照ください。

ステップ 2:DLF での RAM ユーザーへのテーブル権限の付与

DLF で RAM ユーザーに特定のテーブルへのアクセス権限を付与します。Kyuubi ゲートウェイが Spark セッションを初期化できるようにするには、RAM ユーザーに DLF の default データベースに対する Describe 権限も付与する必要があります。

  1. にログインします

  2. ターゲットカタログ内のデータベースとテーブルに移動します。

  3. 権限を付与するテーブルを選択し、[権限] タブをクリックします。

  4. [権限の付与] をクリックします。

    1. [プリンシパル][DLF ユーザー/DLF ロール] を選択します。

    2. [DLF ユーザーの選択]:ターゲットの RAM ユーザーを選択します。

    3. 権限:必要な権限を選択します。

  5. [OK] をクリックします。これで権限付与は完了です。

    説明

    EMR Serverless Spark は、デフォルトで DLF のメタデータとデータのキャッシュを有効にします。テーブルの権限を再付与した場合、変更が有効になるまでに約 10 分かかります。

    権限の変更をすぐに有効にしたい場合は、Kyuubi ゲートウェイの Spark 構成に spark.sql.catalog.lakehouse.cache-enabled false を追加します。

ステップ 3:RAM ユーザー用の Kyuubi トークンの生成

  1. [Kyuubi ゲートウェイ] ページで、ターゲットのゲートウェイを見つけ、[操作] 列の [トークン] をクリックします。

  2. [トークンの作成] をクリックします。表示されるダイアログボックスで、次のパラメーターを構成し、[OK] をクリックします。

    パラメーター

    説明

    名前

    新しいトークンの名前。

    [有効期限]

    トークンの有効期限を設定します。値は 1 以上である必要があります。デフォルトでは、この機能は有効になっており、トークンは 365 日後に有効期限が切れます。

    [割り当て先]

    ドロップダウンリストから、ターゲットの RAM ユーザーを選択します。

  3. トークン情報をコピーします。

    重要

    トークンを作成したら、すぐにトークン情報をコピーする必要があります。後で取得することはできません。トークンの有効期限が切れたり、紛失したりした場合は、新しいトークンを作成するか、既存のトークンをリセットする必要があります。

ステップ 4:Beeline を使用した接続と権限の検証

  1. JDBC 接続コマンドの構築

    beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<UserName or RoleName>;httpPath=cliservice/token/<Token>"

    パラメーターの説明:

    パラメーター

    説明

    <endpoint>

    Kyuubi ゲートウェイのエンドポイント。

    <port>

    アクセスポート。パブリックエンドポイントのポートは 443 です。内部ネットワークエンドポイントのポートは 80 です。

    <UserName or RoleName>

    RAM ユーザーまたは RAM ロール。短縮名または完全名を使用できます。例:

    • RAM ユーザー:agent または agent@xxxx05398154xxxx.onaliyun.com

    • RAM ロール:AliyunServiceRoleForDataworksEngine

    <Token>

    ステップ 3 で RAM ユーザー用に生成されたトークン。

    image

  2. アクセス制御効果の検証

    • 権限のあるテーブルのクエリ

      SELECT * FROM <database_name>.<authorized_table_name> LIMIT 10;

      クエリデータが正常に返されます。image

    • 権限のないテーブルのクエリ

      SELECT * FROM <database_name>.<unauthorized_table_name> LIMIT 10;

      クエリは失敗し、emr_test doesn't have privilege SELECT on TABLE のような権限関連のエラーが返されます。image

よくある質問

Q1:権限を付与した後でも、権限のないテーブルをクエリして結果を取得できてしまいます。権限が有効になっていないのでしょうか?
この問題は、次の理由で発生する可能性があります:

  • DLF メタデータキャッシュ:Spark エンジンはテーブルスキーマ情報をキャッシュするため、権限付与チェックがバイパスされることがあります。
    解決策:Spark 構成に spark.sql.catalog.lakehouse.cache-enabled false を追加して、メタデータキャッシュを無効にします。

  • 権限の遅延:まれに、DLF の権限同期に短い遅延 (通常は 10 秒以内) が発生することがあります。
    推奨事項:しばらく待ってから再試行するか、DLF コンソールで権限が正しく付与されていることを確認してください。

Q2:トークンを作成した後に表示できなくなりました。紛失した場合はどうすればよいですか?
プレーンテキストのトークンは、作成後にダイアログボックスに一度だけ表示されます。システムは元の値を保存しません。トークンを紛失したり漏洩したりした場合は、すぐに次の操作を行う必要があります:

  • トークン管理ページで、対応するエントリを見つけて [トークンのリセット] をクリックします。

  • 古いトークンは自動的に無効になり、新しい認証情報が生成されます。

  • すべてのクライアント構成を新しいトークンで更新します。

Q3:RAM ユーザーが Kyuubi ゲートウェイに接続するために、なぜ default データベースに対する Describe 権限が必要なのですか?
デフォルトでは、Spark セッションが確立されると、Kyuubi ゲートウェイは初期コンテキストとして default データベースをロードしようとします。現在の ID にこのデータベースへのアクセス権限がない場合、セッションの初期化は失敗し、接続は終了します。このチェックは、ビジネステーブルが他のデータベースにある場合でも必須です。したがって、ゲートウェイに接続するすべての RAM ユーザーは、default データベースに対する DescribeDatabase 権限を持っている必要があります。

付録:ID プロキシと権限実行フロー

このソリューションの中核は、Kyuubi ゲートウェイのトークンを ID 認証情報として使用することです。ゲートウェイは、トークンの所有者である RAM ユーザーに代わってアクセスリクエストをプロキシします。このプロセスにより、Data Lake Formation (DLF) の権限システムが EMR Serverless Spark のクエリワークフローに統合されます。

ワークフローは次のとおりです:

  1. トークンの生成:Kyuubi ゲートウェイで指定された RAM ユーザーに対して一時的なトークンが生成されます。このトークンは、その RAM ユーザーの ID に一意にバインドされます。

  2. クライアント認証:Beeline などのクライアントが Java Database Connectivity (JDBC) 接続を確立する際、このトークンと対応する RAM ユーザー名を接続リクエストに含めて Kyuubi ゲートウェイに送信します。

  3. ID プロキシ:Kyuubi ゲートウェイはトークンを検証します。Spark SQL クエリの実行中、EMR Serverless Spark エンジンは RAM ユーザーの ID を借用 (impersonate) します。

  4. DLF 権限付与:Spark エンジンが DLF のメタデータまたはデータにアクセスする際、借用した RAM ユーザーの ID を使用して DLF にリクエストを送信します。

  5. 権限の適用:DLF は、RAM ユーザーに構成されているアクセスポリシーに基づいてリクエストを承認し、結果を返します。