Apache Ranger で権限を管理する
Apache Ranger は、ユーザーが視覚的なウェブページを通じてアクセス ポリシーをカスタマイズできる集中型セキュリティ管理フレームワークを提供します。これにより、どの役割がどのデータにアクセスできるかを決定し、Hadoop エコシステム内のさまざまなコンポーネントやサービスに対して詳細なデータ アクセス制御を実行できます。
Apache Ranger は次のコア モジュールを提供します。
- Ranger Admin: Ranger のコア モジュールで、組み込みのウェブページを備えています。ユーザーはこのページまたは REST インターフェースを通じてセキュリティ ポリシーを作成および更新できます。Hadoop エコシステムのさまざまなコンポーネントのプラグインは、これらのポリシーを定期的にポーリングして取得します。
- Agent Plugin: Hadoop エコシステムに組み込まれたコンポーネントのプラグイン。 これらのプラグインは、Ranger Admin からセキュリティ ポリシーを定期的に取得し、ポリシーをローカル ファイルに保存します。ユーザーがコンポーネントにアクセスすると、対応するプラグインが設定されたセキュリティ ポリシーに基づいてリクエストを評価し、認証結果を対応するコンポーネントに送信します。
- User Sync: ユーザーおよびユーザー グループ情報を取得し、ユーザーおよびユーザー グループの権限データを Ranger のデータベースに同期するために使用されます。
StarRocks (CelerData を支えるデータベース エンジン) は、組み込みの RBAC 特権システムに加えて、アクセス制御のために Apache Ranger と統合することもできます。現在、次のことが可能です。
- Apache Ranger を通じてアクセス ポリシー、マスキング ポリシー、および行レベル フィルター ポリシーを作成します。
- Ranger の監査ログを使用します。
Kerberos を使用して認証する Ranger サーバーはサポートされていないことに注意してください。
このトピックでは、Ranger 統合による権限制御方法と統合プロセスについて説明します。データ セキュリティを管理するための Ranger でのセキュリティ ポリシーの作成方法については、Apache Ranger 公式ウェブサイト を参照してください。
設定可能なリソース オブジェクトと特権については、privilege items を参照してください。
権限制御 方法
StarRocks は Apache Ranger と統合され、次の権限制御方法を提供します。
- グローバル アクセス制御: Ranger を使用して、StarRocks 内部テーブル、外部テーブル、およびその他のオブジェクトへのアクセスを一元的に管理します。アクセス制御は、StarRocks Service に設定されたアクセス ポリシーに従って実行されます。
- Ranger を使用して、StarRocks 内部テーブルおよびオブジェクトへのアクセスを管理します。外部カタログについては、Ranger 上の対応する外部サービス (たとえば、Hive Service) のポリシーを再利用してアクセス制御を行います。StarRocks は、Ranger サービスを外部カタログと一致させることができます。
- StarRocks 組み込みの RBAC システムを使用して、StarRocks 内部テーブルおよびオブジェクトへのアクセスを管理します。Ranger 上の外部サービスのポリシーを再利用して、外部データ ソースへのアクセスを管理します。
認証プロセス
- ユーザーがクエリを開始すると、StarRocks はクエリを解析して必要な特権を理解し、ユーザー情報と必要な特権を Apache Ranger に渡します。Ranger は、対応するサービスに設定されたアクセス ポリシーに基づいて特権が有効かどうかを判断します。ユーザーがアクセス特権を持っている場合、StarRocks はクエリ データを返します。そうでない場合、StarRocks はエラーを返します。
- ユーザー認証には LDAP を使用し、Ranger を使用して LDAP ユーザーを同期し、アクセス ルールを設定することもできます。StarRocks は LDAP を通じてユーザーのログイン認証を完了することもできます。
前提条件
-
Apache Ranger 2.1.0 以降がインストールされています。Apache Ranger のインストール手順については、Ranger quick start を参照してください。
-
すべての FE ノード (または弾性クラスターのコーディネーター ノード) が Apache Ranger にネットワーク アクセスできる必要があります。各ノードで次のコマンドを実行して確認できます。
telnet <ranger-ip> <ranger-port>
Connected to <ip>
が表示された場合、接続は成功しています。
StarRocks を Ranger と統合する
(オプション) ranger-starrocks-plugin をインストールする
このステップの主な目的は、Ranger のリソース名自動補完機能を使用することです。Ranger Admin でポリシーを作成する際、ユーザーはアクセスを保護する必要があるリソースの名前を入力する必要があります。ユーザーがリソース名を簡単に入力できるように、Ranger Admin は自動補完機能を提供しており、これまでに入力された内容に一致するサービス内の利用可能なリソースを検索し、リソース名を自動的に補完します。この機能が必要ない場合や、Ranger クラスターを操作する権限がない場合は、このステップをスキップできます。
-
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 をダウンロードし、
starrocks
フォルダーに配置します。 -
Ranger Admin を再起動します。
ranger-admin restart
Ranger Admin で StarRocks Service を設定する
このステップでは、Ranger 上で StarRocks Service を設定し、ユーザーが Ranger を通じて StarRocks オブジェクトに対するアクセス制御を実行できるようにします。
-
ranger-servicedef-starrocks.json を 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 の接続性には影響しません。自動補完を使用する場合は、少なくとも 1 人のユーザーにdb_admin
ロールをアクティブにして設定してください。jdbc.url
: StarRocks FE の IP アドレスとポートを入力します。
次の図は、設定例を示しています。
次の図は、追加されたサービスを示しています。
-
Test connection をクリックして接続性をテストし、接続が成功したら保存します。
-
各 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.pollIntervalM
を変更して、ポリシー変更を取得する間隔を変更できます。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 の監査ログ サービスを使用する場合は、各 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
Ranger 上のサービスを再利用して外部データ ソースへのアクセスを制御する
外部カタログについては、Ranger 上の外部サービス (たとえば、Hive Service) のアクセス ポリシーを再利用してアクセス制御を行うことができます。StarRocks は、外部カタログを Ranger の外部サービスと一致させることをサポートしています。ユーザーが外部テーブルにアクセスすると、システムはその外部テーブルに対応する Ranger Service のアクセス ポリシーを再利用してアクセス制御を実行します。
Ranger を使用して外部データ ソースへのアクセスを制御するには、Ranger 関連の設定ファイル ranger-hive-security.xml
と ranger-hive-audit.xml
をクラスターのデータ資格情報に関連付けられたクラウド ストレージに配置する必要があります。FE ノード (または弾性クラスターのコーディネーター ノード) は、クラスターが再開されるたびにファイルから設定を自動的に取得して適用します。
-
Ranger 関連の設定ファイル ranger-hive-security.xml と ranger-hive-audit.xml をクラスターのデータ資格情報に関連付けられた同じ S3 バケットに配置します。
-
CelerData Cloud BYOC コンソールで、左側のナビゲーション バーから Clusters を選択し、クラスター リストでクラスターをクリックします。
設定を適用するクラスターは、Running 状態である必要があります。
-
クラスターの詳細ページで、Cluster parameters タブをクリックします。
-
Apache Ranger integration in external catalog セクションで、Apply configuration をクリックします。
クラスターが実行中でない場合、Apply configuration および Clean configuration ボタンはグレー表示されます。 Last updated および Configuration file location フィールドは、以前に設定ファイルを更新した時間とファイルの場所を示します。各成功した適用操作は、これらの 2 つのフィールドを更新します。初めて設定を適用する場合、2 つのフィールドは空です。
-
表示された Configure your source file location ダイアログ ボックスで、設定ファイルが保存されている S3 バケットとファイル プレフィックスを入力し、Test をクリックします。テストが成功した場合は、Apply をクリックして設定を適用します。テストが失敗した場合は、ファイル パスが正しいかどうか、およびクラスターがバケットにアクセスするための必要な権限を持っているかどうかを確認してください。
その後、FE ノード (またはコーディネーター ノード) は設定を取得して再起動します。
-
外部カタログを設定します。
-
外部カタログを作成する際に、プロパティ
"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>"
) -
既存の外部カタログにもこのプロパティを追加できます。
ALTER CATALOG hive_catalog_1
SET ("ranger.plugin.hive.service.name" = "<ranger_hive_service_name>");
この操作により、既存のカタログの認証方法が Ranger ベースの認証に変更されます。
-
設定をクリーンにしたい場合は、Apache Ranger integration in external catalog セクションで Clean configuration をクリックします。この操作は、実行中のクラスターでのみ実行できます。Confirm to clean the Ranger Configuration ダイアログ ボックスで Confirm をクリックします。この操作により、クラスターの Ranger 関連の設定ファイルが削除され、FE ノード (またはコーディネーター ノード) が順番に再起動されます。ファイルがクリーンアップされた後、Configuration file location フィールドは空になり、Last updated フィールドはクリーン操作の時間を表示します。
次に行うこと
StarRocks Service を追加した後、サービスをクリックしてアクセス制御ポリシーを作成し、異なるユーザーまたはユーザー グループに異なる権限を割り当てることができます。ユーザーが StarRocks データにアクセスすると、これらのポリシーに基づいてアクセス制御が実施されます。