- 印刷する
- PDF
Ranger を使用する
- 印刷する
- PDF
VPC環境で利用できます。
Data Forestで Apache Rangerを利用してポリシーを設定し、自分のリソースを他のユーザーと共有する方法を説明します。Ranger UIにアクセスして使用できます。
Rangerにアクセス
- Ranger UIにアクセスします。任意の Data Forestアプリのアクセス詳細情報内の Quick links部分で [アクセスの詳細情報を見る] ボタンをクリックして Ranger UIアクセスアドレスを確認できます。
- Username、Passwordに Data Forestアカウントの作成時に指定したユーザー名とパスワードを入力してログインします。
- Rangerホーム画面で権限を設定できるコンポーネントが確認できます。
- HDFS、Hiveに関する ACLを設定できます。この設定は 「Policy」という単位で構成されます。
- HDFS、Hiveに関する ACLを設定できます。この設定は 「Policy」という単位で構成されます。
YARNキューに対する権限は修正できません。YARNに対する ACLは、専用キューの機能を導入してから提供される予定です。
HDFS ACLの設定
HDFS ACLを設定する方法は、以下のとおりです。
- Apache Rangerホーム画面で HDFS > df_hadoop_koya または df_hadoop_tata をクリックします。
- Df_hadoop_koya:: koyaネームスペースの下のファイルに対する ACL管理
- Df_hadoop_tata: tataネームスペースの下のファイルに対する ACL管理
- [Add New Policy] ボタンをクリックします。
- exampleユーザーが作成したディレクトリとファイル(
/user/example/foo
、/user/example/bar
)についての権限を example2に追加します。
- exampleユーザーが作成したディレクトリとファイル(
- Policyを設定します。
- Policy Name: Policyの名前を設定(既に使用中の Policy名は使用不可)
- Resource Path: ACLを設定する HDFSパスを入力
- Data Forestユーザーは、HDFSでホームディレクトリ
hdfs:///user/$username
パスにのみアクセスでき、ホームディレクトリ下位のファイルに対してのみ ACLを管理できる。(hdfs:///tmp
と同様なパスは使用不可) - 前に
hdfs://
schemeは入力せず、/user/$username
で始まるパスを入力 - 複数個入力可能
- パスが有効かどうかを確認しないので、正確に入力
- パスが「/」で終わらないように注意(例えば、
/user/example/foo/
とパスを入力するとfoo
にはアクセスできず、その下位に存在するサブディレクトリにのみアクセス可能)
- Data Forestユーザーは、HDFSでホームディレクトリ
- Select Group: 権限を付与するグループを指定
- このグループに属するすべてのユーザーに権限を付与
- Data Forestですべてのユーザーは
users
グループに属する。アカウント作成時、別途グループは指定不可
- Select User: 権限を付与するユーザーを指定
- Permission: 付与する権限を選択。(権限: Excute、Read、Write)
- ディレクトリの場合、Execute権限がないとディレクトリ内のファイルリスト(
ls
コマンド)を取得できない
- ディレクトリの場合、Execute権限がないとディレクトリ内のファイルリスト(
- Delegate Admin
- ユーザー/グループの Delegate Adminにチェックして管理者権限を委任した場合、そのユーザー/グループは Policyを管理可能。不特定多数に管理者権限を委任しないように注意が必要
- Add Validity Period: 特定の期間中だけ Policyが適用されるように設定可能
- [Add] ボタンをクリックします。Policyの作成が完了するまで約5分かかります。
- 新しい Policyが作成されたか確認します。
/user/example
の構造は、以下のとおりです。
パーミッションは'drwx------'
です。Policyを追加してもこの権限自体は変更されません。
$ hadoop fs -ls /user/example
Found 9 items
...
drwx------ - example services 0 2021-04-14 18:01 /user/example/bar
drwx------ - example services 0 2021-04-14 18:01 /user/example/foo
drwx------ - example services 0 2021-04-14 18:07 /user/example/foobar
Policyで権限を付与したexample2
アカウントで/user/example/foobar
にアクセスしようとすると、foo
、bar
にのみ権限を与えたため、アクセスできないことが確認できます
$ hadoop fs -ls /user/example/foobar
s: Permission denied: user=example2, access=READ_EXECUTE, inode="/user/example/foobar":example:services:drwx------
Policyで権限を付与したfoo
、bar
には正常にアクセスできることが確認できます。
$ hadoop fs -ls /user/example/foo
Found 1 items
-rw------- 3 example services 0 2021-04-14 18:13 /user/example/foo/foo.txt
$ hadoop fs -ls /user/example/bar
Found 1 items
-rw------- 3 example services 0 2021-04-14 18:14 /user/example/bar/bar.txt
Read、Write、Execute権限を付与したため、以下のようにファイルをコピーできます。
$ hadoop fs -copyToLocal /user/example/foo/foo.txt
Hive ACLの設定
Hiveデータベースとテーブルを作成する場合、所有者のみアクセスできます。他のユーザーがアクセスできるようにするには、Rangerを通じて権限を付与する必要があります。
Hive ACLを設定する方法は、以下のとおりです。
- Rangerホーム画面で Hive > df_hive をクリックします。
- [Add New Policy] ボタンをクリックします。
- 情報を入力します。
- Exampleユーザーのテーブルに対する権限を
example__db_foo.bar_table
に対する権限を example2に付与する例
- Policy Name: Policyの名前を設定。既に使用中の Policy名は使用不可
- Database: ACLを設定するデータベースを入力。複数個を入力でき、当該データベースの存在有無は確認しない。
- Table: ACLを設定するテーブルを入力
- このテーブルの存在有無は確認しない
*
ですべてのテーブルを指定可能
- Hive Column: Data Forestはコラムレベルの ACLをサポートしなし。
*
を入力 - Select Group: 権限を付与するグループを指定
- このグループに属するすべてのユーザーに権限を付与
- Data Forestですべてのユーザーは
users
グループに属し、アカウントの作成時に別途グループの作成は指定不可
- Select User: 権限を付与するユーザーを指定
- Permission: 付与する権限を選択
- Delegate Admin: ユーザー/グループの Delegate Adminにチェックして管理者権限を委任すると、そのユーザー/グループは当該 Policyが管理可能。不特定多数に管理者権限を委任しないように注意が必要
- Add Validity Period: 権限の適用期間を設定可能
- Exampleユーザーのテーブルに対する権限を
- [Add] ボタンをクリックします。Policyの作成が完了するまで約5分かかります。
- 新しい Policyが作成されたか確認します。
HDFS ACLの適用
Hiveテーブルデータは HDFSに保存されているため、Hive ACL設定だけでなく HDFS ACLも提供します。HDFS ACLを設定しない場合、照会クエリが失敗します。
テーブル照会のための HDFS ACL
bar_table
にのみアクセス権限を付与します。bar_table
の下位にはすべて権限が付与されます(recursive)。
Service: df_hadoop_koya
Resource Path: /user/example/warehouse/example__db_foo.db/bar_table (recursive)
Select User: example2
Permissions: Read/Execute
データベースを使用するためのための HDFS ACL
example__db_foo
を使用するための権限です。以下のすべてのテーブルに権限を与えないため、non-recursiveに設定します。
Service: df_hadoop_koya
Resource Path: /user/example/warehouse/example__db_foo.db (non-recursive)
Select User: example2
Permissions: Read/Execute
DBまたはテーブル名にワイルドカード(*
、?
)を使用できます。example__db_*
と入力すると、exampleユーザーが作成したすべてのデータベースにアクセスできます。
「Example2」アカウントで example__db_foo.bar_tableに対してクエリを実行できます。
権限エラーが返されます。
0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from example__db_foo.bar_table;
Error: Error while compiling statement: FAILED: SemanticException Unable to fetch table bar_table. java.security.AccessControlException: Permission denied: user=example2, access=EXECUTE, inode="/user/example":example:services:drwx------
0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> use example__db_foo;
Error: Error while compiling statement: FAILED: SemanticException MetaException(message:java.security.AccessControlException: Permission denied: user=example2, access=EXECUTE, inode="/user/example":example:services:drwx------
権限の設定後に正常にアクセスすることを確認します。
0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from example__db_foo.bar_table;
INFO : Compiling command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105): select * from example__db_foo.bar_table
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:bar_table.id, type:bigint, comment:null)], properties:null)
INFO : Completed compiling command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105); Time taken: 0.096 seconds
INFO : Executing command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105): select * from example__db_foo.bar_table
INFO : Completed executing command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105); Time taken: 0.001 seconds
INFO : OK
+---------------+
| bar_table.id |
+---------------+
+---------------+
No rows selected (0.122 seconds)
0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> use example__db_foo;
INFO : Compiling command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5): use example__db_foo
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:null, properties:null)
INFO : Completed compiling command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5); Time taken: 0.02 seconds
INFO : Executing command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5): use example__db_foo
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5); Time taken: 0.01 seconds
INFO : OK
No rows affected (0.039 seconds)
0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from bar_table;
INFO : Compiling command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5): select * from bar_table
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:bar_table.id, type:bigint, comment:null)], properties:null)
INFO : Completed compiling command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5); Time taken: 0.096 seconds
INFO : Executing command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5): select * from bar_table
INFO : Completed executing command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5); Time taken: 0.001 seconds
INFO : OK
+---------------+
| bar_table.id |
+---------------+
+---------------+