メインコンテンツまでスキップ
バージョン: 3.4

Apache Ranger で権限を管理する

Apache Ranger は、ユーザーが視覚的なウェブページを通じてアクセス ポリシーをカスタマイズできる集中型のセキュリティ管理フレームワークを提供します。これにより、どの役割がどのデータにアクセスできるかを決定し、Hadoop エコシステム内のさまざまなコンポーネントとサービスに対してきめ細かいデータ アクセス制御を実行できます。

Apache Ranger は次のコア モジュールを提供します。

  • Ranger Admin: Ranger のコア モジュールで、組み込みのウェブページがあります。ユーザーはこのページまたは REST インターフェースを通じてセキュリティ ポリシーを作成および更新できます。Hadoop エコシステムのさまざまなコンポーネントのプラグインは、定期的にこれらのポリシーをポーリングして取得します。
  • Agent Plugin: Hadoop エコシステムに埋め込まれたコンポーネントのプラグイン。これらのプラグインは、Ranger Admin から定期的にセキュリティ ポリシーを取得し、ポリシーをローカル ファイルに保存します。ユーザーがコンポーネントにアクセスすると、対応するプラグインが設定されたセキュリティ ポリシーに基づいてリクエストを評価し、認証結果を対応するコンポーネントに送信します。
  • User Sync: ユーザーおよびユーザー グループ情報を取得し、ユーザーおよびユーザー グループの権限データを Ranger のデータベースに同期するために使用されます。

StarRocks v3.1.9 では、ネイティブの RBAC 特権システムに加えて、Apache Ranger を通じたアクセス制御もサポートしています。現在、StarRocks は以下をサポートしています。

  • Apache Ranger を通じてアクセス ポリシー、マスキング ポリシー、および行レベル フィルタ ポリシーを作成します。
  • Ranger の監査ログ。
  • Kerberos を使用して認証する Ranger サーバーはサポートされていません。
  • 同じ Apache Ranger サービスに複数の StarRocks サービスを登録することで、異なる StarRocks クラスタでの権限管理を行うことができます。

このトピックでは、StarRocks と Apache Ranger の権限制御方法と統合プロセスについて説明します。Ranger でセキュリティ ポリシーを作成してデータ セキュリティを管理する方法については、Apache Ranger 公式ウェブサイト を参照してください。

権限制御方法

StarRocks は Apache Ranger と統合され、次の権限制御方法を提供します。

  • Ranger で StarRocks Service を作成して権限制御を実装します。ユーザーが StarRocks の内部テーブル、外部テーブル、またはその他のオブジェクトにアクセスする際、StarRocks Service に設定されたアクセス ポリシーに従ってアクセス制御が実行されます。
  • ユーザーが外部データ ソースにアクセスする場合、Apache Ranger 上の外部サービス (Hive Service など) を再利用してアクセス制御を行うことができます。StarRocks は、異なる External Catalog に対して Ranger サービスを一致させ、データ ソースに対応する Ranger サービスに基づいてアクセス制御を実装します。

StarRocks が Apache Ranger と統合された後、次のアクセス制御パターンを実現できます。

  • Apache Ranger を使用して、StarRocks の内部テーブル、外部テーブル、およびすべてのオブジェクトへのアクセスを一元管理します。
  • Apache Ranger を使用して、StarRocks の内部テーブルおよびオブジェクトへのアクセスを管理します。External Catalog については、Ranger 上の対応する外部サービスのポリシーを再利用してアクセス制御を行います。
  • Apache Ranger を使用して、外部データ ソースに対応するサービスを再利用することで External Catalog へのアクセスを管理します。StarRocks の内部テーブルおよびオブジェクトへのアクセスは、StarRocks のネイティブ RBAC 特権システムを使用して管理します。

認証プロセス

  1. ユーザー認証には LDAP を使用し、Ranger を使用して LDAP ユーザーを同期し、アクセス ルールを設定することもできます。StarRocks も LDAP を通じてユーザーのログイン認証を完了できます。
  2. ユーザーがクエリを開始すると、StarRocks はクエリ文を解析し、ユーザー情報と必要な特権を Apache Ranger に渡します。Ranger は、対応するサービスに設定されたアクセス ポリシーに基づいてユーザーが必要な特権を持っているかどうかを判断し、認証結果を StarRocks に返します。ユーザーがアクセス権を持っている場合、StarRocks はクエリ データを返し、そうでない場合はエラーを返します。

前提条件

  • Apache Ranger 2.1.0 以降がインストールされています。Apache Ranger のインストール方法については、Ranger クイック スタート を参照してください。

  • すべての StarRocks FE マシンが Apache Ranger にアクセスできること。各 FE マシンで次のコマンドを実行して確認できます。

    telnet <ranger-ip> <ranger-port>

    Connected to <ip> と表示されれば、接続は成功です。

StarRocks Service を Ranger と統合する

(オプション) ranger-starrocks-plugin をインストールする

注記

このステップの主な目的は、Ranger のリソース名自動補完機能を使用することです。Ranger Admin でポリシーを作成する際、ユーザーはアクセスを保護する必要があるリソースの名前を入力する必要があります。ユーザーがリソース名を入力しやすくするために、Ranger Admin は自動補完機能を提供しており、入力された内容に一致するサービス内の利用可能なリソースを検索し、リソース名を自動的に補完します。

Ranger クラスターを操作する権限がない場合や、この機能が必要ない場合は、このステップをスキップできます。

また、ranger-starrocks-plugin をインストールしなかった場合、StarRocks サービスを作成する際に test connection を使用できませんが、それはサービスを正常に作成できないことを意味するわけではありません。

  1. Ranger Admin ディレクトリ ews/webapp/WEB-INF/classes/ranger-pluginsstarrocks フォルダーを作成します。

    mkdir {path-to-ranger}/ews/webapp/WEB-INF/classes/ranger-plugins/starrocks
  2. plugin-starrocks/target/ranger-starrocks-plugin-3.0.0-SNAPSHOT.jarmysql-connector-j.jar をダウンロードし、starrocks フォルダーに配置します。

  3. Ranger Admin を再起動します。

    • Ranger 0.5.x:

      ranger-admin restart
    • Ranger 2.x and above:

      ./ews/ranger-admin-services.sh restart

Ranger Admin で StarRocks Service を設定する

注記

このステップでは、Ranger 上で StarRocks Service を設定し、ユーザーが Ranger を通じて StarRocks オブジェクトに対するアクセス制御を実行できるようにします。

  1. ranger-servicedef-starrocks.json を StarRocks FE マシンまたは Ranger マシンの任意のディレクトリにコピーします。

    wget https://github.com/StarRocks/starrocks/blob/main/conf/ranger/ranger-servicedef-starrocks.json
    注記

    Ranger の自動補完機能が必要ない場合 (つまり、ranger-starrocks-plugin をインストールしていない場合)、.json ファイルの implClass を空に設定する必要があります。

    "implClass": "",

    Ranger の自動補完機能が必要な場合 (つまり、ranger-starrocks-plugin をインストールしている場合)、.json ファイルの implClassorg.apache.ranger.services.starrocks.RangerServiceStarRocks に設定する必要があります。

    "implClass": "org.apache.ranger.services.starrocks.RangerServiceStarRocks",
  2. Ranger 管理者として次のコマンドを実行して StarRocks Service を追加します。

    curl -u <ranger_adminuser>:<ranger_adminpwd> \
    -X POST -H "Accept: application/json" \
    -H "Content-Type: application/json" http://<ranger-ip>:<ranger-port>/service/plugins/definitions -d@ranger-servicedef-starrocks.json
  3. http://<ranger-ip>:<ranger-host>/login.jsp にアクセスして Apache Ranger ページにログインします。ページに STARROCKS サービスが表示されます。

    home

  4. STARROCKS の後のプラス記号 (+) をクリックして StarRocks Service を設定します。

    service detail

    property

    • Service Name: サービス名を入力する必要があります。
    • Display Name: STARROCKS の下に表示するサービスの名前。指定しない場合は Service Name が表示されます。
    • UsernamePassword: ポリシー作成時にオブジェクト名を自動補完するために使用される FE ユーザー名とパスワード。この 2 つのパラメーターは StarRocks と Ranger の接続性には影響しません。自動補完を使用する場合は、db_admin ロールがアクティブなユーザーを少なくとも 1 人設定してください。
    • jdbc.url: StarRocks FE の IP アドレスとポートを入力します。

    以下の図は、設定例を示しています。

    example

    以下の図は、追加されたサービスを示しています。

    added service

  5. Test connection をクリックして接続性をテストし、接続が成功したら保存します。ranger-starrocks-plugin をインストールしていない場合は、接続テストをスキップして直接作成できます。

  6. StarRocks クラスターの各 FE マシンで、fe/conf フォルダーに ranger-starrocks-security.xml を作成し、内容をコピーします。次の 2 つのパラメーターを変更し、変更を保存する必要があります。

    • ranger.plugin.starrocks.service.name: ステップ 4 で作成した StarRocks Service の名前に変更します。
    • ranger.plugin.starrocks.policy.rest the url: Ranger Admin のアドレスに変更します。

    他の設定を変更する必要がある場合は、Apache Ranger の公式ドキュメントを参照してください。たとえば、ranger.plugin.starrocks.policy.pollIntervalMs を変更してポリシー変更の取得間隔を変更できます。

    vim ranger-starrocks-security.xml

    ...
    <property>
    <name>ranger.plugin.starrocks.service.name</name>
    <value>starrocks</value> -- StarRocks Service 名に変更します。
    <description>
    Name of the Ranger service containing policies for this StarRocks instance
    </description>
    </property>
    ...

    ...
    <property>
    <name>ranger.plugin.starrocks.policy.rest.url</name>
    <value>http://localhost:6080</value> -- Ranger Admin アドレスに変更します。
    <description>
    URL to Ranger Admin
    </description>
    </property>
    ...
  7. (オプション) Ranger の監査ログサービスを使用する場合は、各 FE マシンの fe/conf フォルダーに ranger-starrocks-audit.xml ファイルを作成します。内容をコピーし、xasecure.audit.solr.solr_urlsolr_url を自分の solr_url に置き換えて、ファイルを保存します。

  8. すべての FE 設定ファイルに access_control = ranger の設定を追加します。

    vim fe.conf
    access_control=ranger
  9. すべての FE マシンを再起動します。

    -- FE フォルダーに切り替えます。
    cd..

    bin/stop_fe.sh
    bin/start_fe.sh

他のサービスを再利用して外部テーブルへのアクセスを制御する

External Catalog については、外部サービス (Hive Service など) を再利用してアクセス制御を行うことができます。StarRocks は、異なる Catalog に対して異なる Ranger 外部サービスを一致させることをサポートしています。ユーザーが外部テーブルにアクセスする際、システムは対応する外部テーブルの Ranger サービスのアクセス ポリシーに基づいてアクセス制御を実施します。ユーザーの権限は、同じ名前の Ranger ユーザーと一致します。

  1. Hive の Ranger 設定ファイル ranger-hive-security.xmlranger-hive-audit.xml をすべての FE マシンの fe/conf ファイルにコピーします。Ranger の IP とポートが正しいことを確認してください。

  2. すべての FE マシンを再起動します。

  3. External Catalog を設定します。

    • External Catalog を作成する際に、プロパティ "ranger.plugin.hive.service.name" を追加します。

        CREATE EXTERNAL CATALOG hive_catalog_1
      PROPERTIES (
      "type" = "hive",
      "hive.metastore.type" = "hive",
      "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
      "ranger.plugin.hive.service.name" = "<ranger_hive_service_name>"
      )
    • 既存の External Catalog にもこのプロパティを追加できます。

      ALTER CATALOG hive_catalog_1
      SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");

​ この操作により、既存の Catalog の認証方法が Ranger ベースの認証に変更されます。

次のステップ

StarRocks Service を追加した後、そのサービスをクリックしてアクセス制御ポリシーを作成し、異なるユーザーまたはユーザー グループに異なる権限を割り当てることができます。ユーザーが StarRocks データにアクセスする際、これらのポリシーに基づいてアクセス制御が実施されます。

Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.