Apache Ranger で権限を管理する
Apache Ranger は、ユーザーが視覚的なウェブページを通じてアクセス ポリシーをカスタマイズできる集中型セキュリティ管理フレームワークを提供します。これにより、どの役割がどのデータにアクセスできるかを決定し、Hadoop エコシステム内のさまざまなコンポーネントとサービスに対して詳細なデータ アクセス制御を実行できます。
Apache Ranger は次のコア モジュールを提供します。
- Ranger Admin: Ranger のコア モジュールで、組み込みのウェブページを備えています。ユーザーはこのページまたは REST インターフェースを通じてセキュリティ ポリシーを作成および更新できます。Hadoop エコシステムのさまざまなコンポーネントのプラグインは、定期的にこれらのポリシーをポーリングして取得します。
- Agent Plugin: Hadoop エコシステムに組み込まれたコンポーネントのプラグイン。これらのプラグインは、Ranger Admin から定期的にセキュリティ ポリシーを取得し、ローカル ファイルにポリシーを保存します。ユーザーがコンポーネントにアクセスすると、対応するプラグインが設定されたセキュリティ ポリシーに基づいてリクエストを評価し、認証結果を対応するコンポーネントに送信します。
- User Sync: ユーザーおよびユーザー グループ情報を取得し、ユーザーおよびユーザー グループの権限データを Ranger のデータベースに同期するために使用されます。
ネイティブの RBAC 特権システムに加えて、StarRocks v3.1.9 は Apache Ranger を通じたアクセス制御もサポートしています。現在、StarRocks は以下をサポートしています:
- Apache Ranger を通じてアクセス ポリシー、マスキング ポリシー、および行レベル フィルタ ポリシーを作成します。
- Ranger の監査ログ。
- Kerberos を使用して認証する Ranger サーバーはサポートされていません。
このトピックでは、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 のネイティブ RBAC 特権システムを使用して、StarRocks 内部テーブルおよびオブジェクトへのアクセスを管理します。
認証プロセス
- ユーザー認証には LDAP を使用し、Ranger を使用して LDAP ユーザーを同期し、アクセス ルールを設定することもできます。StarRocks も LDAP を通じてユーザーのログイン認証を完了できます。
- ユーザーがクエリを開始すると、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
を使用できませんが、それでもサービスを正常に作成できることを意味します。
-
Ranger Admin ディレクトリ
ews/webapp/WEB-INF/classes/ranger-plugins
にstarrocks
フォルダを作成します。mkdir {path-to-ranger}/ews/webapp/WEB-INF/classes/ranger-plugins/starrocks
-
plugin-starrocks/target/ranger-starrocks-plugin-3.0.0-SNAPSHOT.jar と mysql-connector-j.jar をダウンロードし、
starrocks
フォルダに配置します。 -
Ranger Admin を再起動します。
ranger-admin restart
Ranger Admin で StarRocks Service を構成する
このステップでは、Ranger 上で StarRocks Service を構成し、ユーザーが Ranger を通じて StarRocks オブジェクトに対するアクセス制御を実行できるようにします。
-
ranger-servicedef-starrocks.json を StarRocks FE マシンまたは Ranger マシンの任意のディレクトリにコピーします。
wget https://raw.githubusercontent.com/StarRocks/ranger/master/agents-common/src/main/resources/service-defs/ranger-servicedef-starrocks.json
注記Ranger の自動補完機能が不要な場合(つまり、ranger-starrocks-plugin をインストールしていない場合)、.json ファイルの
implClass
を空に設定する必要があります:"implClass": "",
Ranger の自動補完機能が必要な場合(つまり、ranger-starrocks-plugin をインストールした場合)、.json ファイルの
implClass
をorg.apache.ranger.services.starrocks.RangerServiceStarRocks
に設定する必要があります:"implClass": "org.apache.ranger.services.starrocks.RangerServiceStarRocks",
-
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 -
http://<ranger-ip>:<ranger-host>/login.jsp
にアクセスして Apache Ranger ページにログインします。ページに STARROCKS サービスが表示されます。 -
STARROCKS の後のプラス記号 (
+
) をクリックして StarRocks Service を構成します。Service Name
: サービス名を入力する必要があります。Display Name
: STARROCKS の下に表示するサービスの名前。指定しない場合は、Service Name
が表示されます。Username
とPassword
: ポリシー作成時にオブジェクト名を自動補完するために使用される FE ユーザー名とパスワード。この 2 つのパラメータは、StarRocks と Ranger の接続性には影響しません。自動補完を使用する場合は、db_admin
ロールがアクティブなユーザーを少なくとも 1 人設定してください。jdbc.url
: StarRocks FE の IP アドレスとポートを入力します。
次の図は、構成例を示しています。
次の図は、追加されたサービスを示しています。
-
Test connection をクリックして接続性をテストし、接続が成功したら保存します。ranger-starrocks-plugin をインストールしていない場合は、テスト接続をスキップして直接作成できます。
-
StarRocks クラスターの各 FE マシンで、
fe/conf
フォルダに ranger-starrocks-security.xml を作成し、内容をコピーします。次の 2 つのパラメータを変更し、変更を保存する必要があります:ranger.plugin.starrocks.service.name
: 作成した 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>
... -
(オプション) Ranger の Audit Log サービスを使用したい場合は、各 FE マシンの
fe/conf
フォルダに ranger-starrocks-audit.xml ファイルを作成し、内容をコピーして、xasecure.audit.solr.solr_url
のsolr_url
を自分のsolr_url
に置き換えてファイルを保存します。 -
すべての FE 設定ファイルに
access_control = ranger
の設定を追加します。vim fe.conf
access_control=ranger -
すべての FE マシンを再起動します。
-- FE フォルダに切り替えます。
cd..
bin/stop_fe.sh
bin/start_fe.sh
他のサービスを再利用して外部テーブルへのアクセスを制御する
External Catalog に対して、外部サービス(例えば Hive Service)を再利用してアクセス制御を行うことができます。StarRocks は異なる Catalog に対して異なる Ranger 外部サービスをマッチングすることをサポートしています。ユーザーが外部テーブルにアクセスする際、システムは対応する外部テーブルの Ranger Service のアクセス ポリシーに基づいてアクセス制御を実装します。ユーザーの権限は同名の Ranger ユーザーと一致します。
-
Hive の Ranger 設定ファイル ranger-hive-security.xml と ranger-hive-audit.xml をすべての FE マシンの
fe/conf
ファイルにコピーします。Ranger の IP とポートが正しいことを確認してください。 -
すべての FE マシンを再起動します。
-
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 データにアクセスする際、これらのポリシーに基づいてアクセス制御が実施されます。