このトピックでは、Hive の Ranger アクセス制御を有効にする方法について説明し、Ranger Hive 権限の設定例を示します。
前提条件
DataLake クラスターを作成し、Ranger サービスを選択済みである必要があります。詳細については、「クラスターの作成」をご参照ください。
注意事項
Hive の Ranger アクセス制御を有効にすると、HiveServer2 サービスは Ranger Hive プラグインを読み込みます。Ranger は、HiveServer2 を介して SQL ジョブを送信した場合にのみ権限検証を実行します。他の方法で Hive にアクセスしても、この検証はトリガーされません。
-
権限検証がサポートされるアクセス方法
-
Beeline クライアントを使用した HiveServer2 へのアクセス。
-
JDBC URL を使用した HiveServer2 への接続。
-
-
権限検証がサポートされないアクセス方法
-
Hive クライアントを使用したメタストアへの直接接続。
-
Hive-Client API を使用したメタストアへの直接接続。
-
Ranger のアクセス制御は、Hive メタデータおよび SQL 操作レイヤーにのみ適用されます。Ranger は OSS または OSS-HDFS ストレージレイヤーのアクセス制御をサポートしていません。ストレージレイヤーの権限ポリシーを Ranger で設定しないでください。設定しても有効になりません。
手順
-
クラスターサービスページに移動します。
-
EMR on ECS コンソールにログインします。
-
トップナビゲーションバーで、必要に応じてリージョンとリソースグループを選択します。
-
対象のクラスターの「操作」列で、Services をクリックします。
-
-
Ranger で Hive を有効にする。
-
Services ページで、Ranger-plugin サービスを探し、その Status をクリックします。
-
サービスの概要 セクションで、enableHive ranger スイッチをオンにします。
-
表示されるダイアログボックスで、OK をクリックします。
-
-
HiveServer を再起動します。
-
Services ページで、 を選択します。
-
Componentsセクションで、[HiveServer] のアクション列にある再起動をクリックします。
-
表示されるダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
Confirm ダイアログボックスで、OK をクリックします。
-
権限設定
概要
Ranger の権限は Ranger UI で設定します。Ranger UI へのアクセス方法については、「Rangerの概要」をご参照ください。
Ranger で Hive の権限を設定するには、HADOOP SQL の下にある [emr-hive] をクリックします。Ranger の [サービスマネージャー] ページを開くと、[HADOOP SQL] カテゴリに、作成済みの [emr-hive] サービスインスタンスが表示されます。このサービスインスタンスを表示、編集、または削除できます。
Ranger UI に [emr-hive] サービスが表示されない場合は、次の手順を実行します。
-
EMR on ECS コンソールにログインします。
-
クラスターサービスページで、[Ranger-plugin] サービスを探し、Status をクリックして設定ページを開きます。
-
[enableImpala] パラメーターを検索し、その値を [true] に設定します。
-
設定を保存します。
-
Ranger UI ページを更新します。 HADOOP SQL の下に [emr-hive] サービスが表示されます。
[emr-hive] サービスを開くと、設定済みのすべての権限ポリシーのリストが表示されます。デフォルトでは、Ranger にはいくつかのポリシーが含まれています。たとえば、あるデフォルトポリシーは、hive ユーザー (HiveServer サービスの起動ユーザー) に、すべてのデータベース、テーブル、列、UDF、および URL リソースへのフルアクセスを付与します。もう 1 つのデフォルトポリシーは、すべてのユーザーに、データベース、および default データベース内のリソースに対する作成権限を付与します。
権限ポリシーの追加
右上隅にある[新しいポリシーの追加]をクリックして、権限ポリシーを追加します。ポリシーには一意のポリシー名が必要です。基本的なポリシーは、リソース、ユーザー、権限という 3 つの主要なコンポーネントで構成されます。リソースはポリシーが管理するアセット (データベース、テーブル、列、URL など) で、ユーザーはポリシーが適用されるアカウント、権限は付与されるアクセスの種類です。
-
ポリシーリソース
Ranger for Hive では、ポリシーリソースには [データベース]、[テーブル]、[カラム]、[URL]、および [UDF] が含まれます。リソースタイプを選択して、その権限を設定できます。デフォルトでは、ポリシーフォームには [データベース]、[テーブル]、および [カラム] のフィールドが表示されます。リソースの名前をクリックして、別のタイプに切り替えることができます。
ポリシーを設定する際には、リソース名を入力する必要があります。たとえば、[データベース] には testdb、[テーブル] には test、[カラム] には id、[URL] には oss://test-bucket/test/tmp のように入力できます。また、アスタリスク (*) を入力すると、そのタイプのすべてのリソースに一致させることができます。各リソース設定行には、リソースタイプのドロップダウン ([カラム] など)、値入力フィールド (必須)、およびリソースの包含/除外を指定する [Include] トグルが含まれています。
-
ポリシーユーザー
ポリシーは特定のユーザーに適用する必要があります。[ユーザーの選択] リストからユーザーを選択できます。[ユーザーの選択] ダイアログボックスで、権限を付与するユーザー (例:
test) を選択します。 -
ポリシー権限
[権限の追加] をクリックすると、[権限の追加/編集] セクションが表示されます。[権限の追加/編集] パネルで、必要な権限 (たとえば、[選択] や [作成]) を選択し、[追加] をクリックして確定します。
例1:カラムレベルの権限
Ranger アクセス制御の一般的なユースケースは、特定のユーザーにテーブルに対する select 権限を付与することです。これにより、ユーザーは select columns from table クエリを実行できるようになります。以下のフィールド値を使用して、Ranger ポリシーを設定します。
-
[ポリシー名]:
select-permission-example -
[データベース]:
testdb(含む) -
[テーブル]:
test(含む) -
[カラム]:
id(含める) -
[監査ログ]: はい
-
[許可条件]: ユーザー選択が
test、権限が[選択]
このポリシーは、[test] ユーザーに、[データベース]=testdb 内の [テーブル]=test の [列]=id に対する [select] 権限を付与します。 これにより、ユーザーは select id from testdb.test クエリを実行できます。 ユーザーが testdb.test からすべての列を選択できるようにするには、[列] フィールドを * に設定します。
例2:テーブルレベルの権限
Ranger for Hive では、テーブルの作成権限をテーブルレベルで設定できます。たとえば、[create] 権限を [database]=testdb、[table]=test、および [column]=* に付与した場合、ユーザーは test という名前のテーブルのみを作成できます。他のテーブルは作成できません。ユーザーがデータベース内の任意のテーブルを作成できるようにするには、[database]=testdb、[table]=*、および [column]=* に [create] 権限を付与します。
Apache Ranger で、次の主要な設定でアクセスポリシーを作成します。
-
[ポリシー名]:
create-permission-example -
[ポリシータイプ]: [アクセス]
-
[データベース]:
testdb(インクルード有効) -
[テーブル]:
*(インクルードが有効) -
[カラム]:
*(包含が有効) -
[監査ログ]:[はい]
[許可条件]セクションで、[ユーザーの選択]を test に、[権限]を[作成]に設定します。
例3:URL権限
LOCATION 句で oss スキームを使用する Hive SQL ステートメントを実行すると、Ranger はその URL に対するユーザーの読み取りおよび書き込み権限を検証します。 たとえば、create external table test(id int, name string) location 'oss://test-bucket/test' を実行すると、oss://test-bucket/test に対する読み取りアクセス権がチェックされます。
この場合、URL 権限のポリシーを設定する必要があります。リソースタイプを [url] に切り替えるには、「権限ポリシーの追加」セクションの手順をご参照ください。Ranger で emr-hive サービスのポリシーを次の主要な設定で編集します。
-
[ポリシー名]:
url-permission-example -
リソースタイプ: [URL]、値:
oss://test-bucket/test、[再帰的] が有効 -
[許可条件]: ユーザーが
test、権限が [読み取り]
URL 権限を制御する必要がない場合は、デフォルト権限の [ポリシー名] で [all - url] のポリシーを変更し、[グループの選択] に public を追加することもできます。これにより、すべてのユーザーにすべての URL に対する読み取りおよび書き込み権限が付与されます。
Ranger では、public はすべてのユーザーを表す特別なグループです。ポリシーの [グループの選択] が public に設定されている場合、そのポリシーの権限はすべてのユーザーに適用されます。
よくある質問
読み取り専用アカウントに対する Ranger Hive 権限の設定方法
読み取り専用アカウントに特定の Hive リソースに対する select 権限のみを付与するには、次の手順で Ranger ポリシーを作成します。
-
Ranger UI で、HADOOP SQL 配下の [emr-hive] をクリックして Hive ポリシーリストを開きます。
-
右上隅の[新規ポリシーの追加]をクリックします。
-
ポリシーリソースを設定します。
-
[データベース]: 対象のデータベースの名前を入力するか、すべてのデータベースに一致させる場合は * を入力します。
-
[テーブル]:対象のテーブル名を入力するか、すべてのテーブルに一致させるには * を入力します。
-
[カラム]: すべてのカラムに一致させるには * を入力するか、個別のカラム名を指定します。
-
-
[ユーザーの選択] フィールドで、読み取り専用アカウントを選択します。
-
[権限の追加] をクリックし、[select] 権限のみを選択します。
-
[追加] をクリックしてポリシーを保存します。
どのアカウントを指定すればよいか不明な場合は、[ユーザーの選択] ドロップダウンリストからすべてのユーザーを選択するか、Ranger 監査ログを確認して、以前に Hive に接続したアカウントを特定できます。
EMR 4.9.0 は、Ranger を使用した Impala 権限の制御をサポートしていますか?
いいえ。EMR 4.9.0 は Ranger を使用した Impala 権限の制御をサポートしていません。Impala のアクセス制御に Ranger を使用するには、この機能をサポートするより新しい EMR バージョンにクラスターをアップグレードするか、別の権限管理ソリューションを使用する必要があります。
> [Hive]