LoginSignup
0
0

More than 3 years have passed since last update.

Sentryを導入する

Last updated at Posted at 2019-06-03

Apache Sentry

Data Lake の環境では、Authorisationを担当してくれている、見守り役さん。
ホートンワークスでは、Rangerという別の製品がある。
どちらも、役割としては同じで、Rangerのほうが守備範囲が広い。

Sentryを設定するというのはどういうことなのか

昔ながらのrwxでの管理をやめて、roleベースでの管理に移行をするということ。Hadoopなどでのデータ容量の大きい環境においては、数TBのデータを簡単にchown chmodできないことが多く、isilonなどの特別な環境は除くが、ロールベースで、ロールを切り替えることによって権限を整理することは、とてつもないメリットになる。

ただ、hive コマンドからの脱却をせねばならず、既存アプリケーションの回収が必要になる。様々な部署にまたがって使われる可能性が高いData Lakeのような環境では、これもなかなかの障壁になりそう。

Sentryの設定

CDH 6.2を用いて設定していきます。

image.png

こちらの設定をONにすることによって、有効になります。

CDHに従って設定を行っていきます。CDHがエラーを出してくれるので、基本的にはそれに従えばOK

ただ、キーポイントとなるのは、kerbersのimpersonation機能(doas)の無効化でしょうか。

KeberizeされたクラスタではHiveServer2が、接続元のユーザをものまね(impersonation)して実行してくれます。

今回はSentryを設定しますので、ものまねしてしまっては、ロールの意味がありません。ものまねせずロールをありのまま受け入れるためチェックを外します。

初期値では、hiveがadmin roleを持っています。

zakoユーザにてロールを作ってみる

雑魚くんに登場してもらいます。

0: jdbc:hive2://localhost.localdomain:2181/de> select current_user();
+-------+
|  _c0  |
+-------+
| zako  |
+-------+

0: jdbc:hive2://localhost.localdomain:2181/de> show roles;
INFO  : Starting task [Stage-0:DDL] in serial mode
ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Access denied to zako. Server Stacktrace: org.apache.sentry.core.common.exception.SentryAccessDeniedException: Access denied to zako
略

0: jdbc:hive2://localhost.localdomain:2181/de> create database zako;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User zako does not have privileges for CREATEDATABASE
 The required privileges: Server=server1->action=create->grantOption=false; (state=42000,code=40000)
0: jdbc:hive2://localhost.localdomain:2181/de> 


雑魚くんには、データベースをみる権限がないようです。
show roles hiveシステム全体でどんなロールがあるのかなぁと言うのを見ています。

次に、現在の雑魚氏に割り当てられている、ロールを見てみます。

0: jdbc:hive2://localhost.localdomain:2181/de> show current roles;
40dd-a3ea-a0c1c18c16bd); Time taken: 0.022 seconds
INFO  : OK
+-------+
| role  |
+-------+
+-------+

当然ながら何もありませんでした。

ロールを割り当て

雑魚では埒が明かないのでhiveユーザにて、ロールを作成割り当ててあげます。

0: jdbc:hive2://localhost.localdomain:2181/de> create role zako;

0: jdbc:hive2://localhost.localdomain:2181/de> show roles;
+-------+
| role  |
+-------+
| zako  |
+-------+

0: jdbc:hive2://localhost.localdomain:2181/de> GRANT ROLE zako TO GROUP datalaker;

雑魚にzakoロールを割り当てました。zakoはdatalakerというグループに属しています。

さいど、権限がどうなったかzakoユーザにて覗いてみます。

: jdbc:hive2://localhost.localdomain:2181/de> select current_user();
INFO  : OK
+-------+
|  _c0  |
+-------+
| zako  |
+-------+
1 row selected (0.549 seconds)
0: jdbc:hive2://localhost.localdomain:2181/de> show current roles;
INFO  : OK
+-------+
| role  |
+-------+
| zako  |
+-------+

zakoが付与されてました!
ただ、ロールをつけただけですので、相変わらず、create databaseなどはできません。

権限を付ける

今度は、このロールに権限を付けていきます。
再びhiveにて

0: jdbc:hive2://localhost.localdomain:2181/de> GRANT ALL ON DATABASE zako TO ROLE zako;
0: jdbc:hive2://localhost.localdomain:2181/de> GRANT ALL ON Server Server1 TO ROLE zako;

zakoデータベースに対して全権限を与えてしまいます!

以下が詳しいです。
https://www.cloudera.com/documentation/enterprise/latest/topics/sg_hive_sql.html

ちなみにserver1というのはhive.serntry.serverのオプション値

DB作成

zakoユーザにて作成してみます!

0: jdbc:hive2://localhost.localdomain:2181/de> create database zako;
INFO  : OK

impersonationをoffにしているので、データはhive hiveで作成されます。
[yuki@localhost ~]$ hadoop fs -ls /user/hive/warehouse/
Found 1 items
drwxrwxrwt   - hive hive          0 2019-06-02 23:27 /user/hive/warehouse/zako.db

他のユーザでの確認

0: jdbc:hive2://localhost.localdomain:2181/de> select current_user();
INFO  : OK
+-------+
|  _c0  |
+-------+
| yuki  |
+-------+

いない:v:

1 row selected (2.641 seconds)
0: jdbc:hive2://localhost.localdomain:2181/de> show databases;
+----------------+
| database_name  |
+----------------+
| default        |
+----------------+
1 row selected (0.162 seconds)

削除を試みるがだめでした。

0: jdbc:hive2://localhost.localdomain:2181/za> drop database zako;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User yuki does not have privileges for DROPDATABASE
 The required privileges: Server=server1->Db=zako->action=drop->grantOption=false; (state=42000,code=40000)
0: jdbc:hive2://localhost.localdomain:2181/za> 

あとは、どこまで粒度を細かく行うか。
がキモ。運用はきちんと考えねば。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0