Data Lake Formation (DLF) および E-MapReduce (EMR) を使用して、データレイクに対する統合アクセス制御を実装します。実際のビジネスシナリオを例として紹介します。
背景情報
DLF は、メタデータの一貫性とデータ共有の課題を解決する統一メタデータビューを提供します。DLF と統合されたコンピューティングエンジンは、エンタープライズグレードのアクセス制御機能も獲得します。
基本概念
-
EMR:E-MapReduce は、ビッグデータ処理のための Alibaba Cloud サービスです。詳細については、「E-MapReduce とは」をご参照ください。
-
DLF カタログ:DLF メタデータシステムにおける最上位のエンティティです。データベースやテーブルなどのオブジェクトのメタデータを含めることができます。詳細については、「データカタログ」をご参照ください。
-
DLF データ権限:DLF がデータレイク向けに提供するデータ権限システムです。データベース、テーブル、列、関数の 4 つのレベルで、きめ細かなアクセス制御をサポートしています。詳細については、「データ権限の概要」をご参照ください。
ビジネスシナリオ
Hive、Spark、Presto、Impala など複数のクエリエンジンを使用する EMR クラスターを運用している企業が、異なるロールごとのデータアクセスを管理する統合アクセス制御システムを導入したいと考えています。
-
スーパー管理者
-
データレイクに対するすべての権限を持ち、他のユーザーに権限を付与できます。
-
-
ビジネス A データ管理者
-
db_aデータベース内のビジネス A 関連データすべてにフルアクセスでき、このデータベースの権限を他のユーザーに付与できます。
-
-
ビジネス A データ開発者
-
db_aデータベース内のすべてのデータにフルアクセスできます。
-
-
ビジネス A データアナリスト
-
db_aデータベース内の特定のテーブル(例:table1)の特定の列(例:col1およびcol2)にアクセスできます。
-
操作手順
-
メタデータ管理に DLF を使用する EMR クラスターを作成します。
-
E-MapReduce コンソールにログインします。
-
EMR クラスターを作成し、以下のオプションを指定します。
-
Business Scenario:Data Lake を選択します。
-
Optional Services:Hive および DLF-Auth コンポーネントを少なくとも選択します。その他のコンポーネントは、ビジネス要件に応じて選択してください。
-
Metadata:DLF Unified Metadata を選択します。
-
DLF Catalog:デフォルトの DLF Catalog を選択するか、新しいものを作成します。本チュートリアルでは、
catalog_testを例として使用します。
-
-
必要に応じてその他の設定を行い、EMR クラスターを作成します。
説明-
既存の E-MapReduce クラスターに DLF-Auth コンポーネントが含まれていない場合、サービスとして追加することで DLF データ権限を利用できます。
-
Hive メタデータが DLF によって管理されていない既存の E-MapReduce クラスターがある場合は、DLF データ権限を使用する前にメタデータを移行する必要があります。DingTalk グループ 33719678 からお問い合わせいただくこともできます。
-
-
-
必要なデータベースおよびテーブルを初期化します。
-
EMR クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
-
Beeline を使用して Hive に接続します。
beeline -u jdbc:hive2://<primary_node_name>:10000 -
以下の文を実行して、テストデータを初期化および作成します。
-- データベースおよびテーブルの作成 create database db_a; create table db_a.table1( col1 string, col2 string, col3 string ); create table db_a.table2( col1 string, col2 string, col3 string ); create database db_b; create table db_b.table1( col1 string, col2 string, col3 string ); -- テストデータの初期化 -- db_a.table1 insert overwrite table db_a.table1 values('1','aliyun','emrA1'),('2','aliyun','dlfA1'); -- db_a.table2 insert overwrite table db_a.table2 values('1','aliyun','emrA2'),('2','aliyun','dlfA2'); -- db_b.table1 insert overwrite table db_b.table1 values('1','aliyun','emrB1'),('2','aliyun','dlfB1');
-
-
各ロールに必要な RAM ユーザーを作成します。
-
スーパー管理者:
dlf_data_adminという名前の RAM ユーザーを作成します。 -
ビジネス A データ管理者:
dlf_dba_adminという名前の RAM ユーザーを作成します。 -
ビジネス A データ開発者:
dlf_dba_devという名前の RAM ユーザーを作成します。 -
ビジネス A データアナリスト:
dlf_dba_analystという名前の RAM ユーザーを作成します。
-
-
アクセス制御を有効にします。
EMR クラスターのアクセス制御を有効にするには、以下の手順を完了します。
-
スーパー管理者が Data Lake Formation コンソールで権限を管理し、すべてのデータにアクセスできるように権限を設定します。
-
Data Lake Formation コンソールに移動します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
dlf_data_adminユーザーを 管理者 ロールに追加します。dlf_data_adminユーザーはこれにより、DLF 内のすべてのデータ権限を管理し、任意のユーザーに対して設定できる管理者となります。 -
dlf_data_adminユーザーが Data Lake Formation コンソールで RAM ユーザーのデータ権限を設定できるようにするには、RAM コンソールでこのユーザーに AliyunDLFFullAccess および AliyunRAMReadOnlyAccess ポリシーをアタッチする必要があります。 -
EMR クラスターにログインし、
dlf_data_adminユーザーとして Hive に接続して HiveQL 文を実行します。beeline -u jdbc:hive2://<primary_node_name>:10000 -n dlf_data_adminselect * from db_a.table1; select * from db_b.table1;クエリが成功し、
dlf_data_adminユーザーがすべてのデータベースおよびテーブルにアクセスできることを確認します。
-
-
ビジネス A データ管理者が Data Lake Formation コンソールで
db_aデータベースの権限を付与でき、そのデータベース内のすべてのデータにアクセスできるように権限を設定します。-
Alibaba Cloud コンソールで
dlf_data_adminRAM ユーザーに切り替え、このアカウントを使用して以下の権限付与手順を実行します。 -
Data Lake Formation コンソールに移動します。
-
左側のナビゲーションウィンドウで、 を選択し、Add Permission をクリックします。
-
以下のパラメーターを設定します。
-
Principal Type:RAM ユーザー/ロール。
-
Choose Principal:dlf_dba_admin。
-
Resources:Resource Authorization。
-
カタログの選択:catalog_test。
-
データベースの選択:db_a。
-
Permissions:
-
Database - Data Permission:すべて。
-
Database - Granted Permission:すべて。
-
All objects in the database - Data Permission:すべて。
-
All objects in the database - Granted Permission:すべて。
-
-
-
OK をクリックして認可情報を保存します。
-
dlf_dba_adminユーザーが Data Lake Formation コンソールで他の RAM ユーザーのデータ権限を設定できるようにするには、RAM コンソールでこのユーザーに AliyunDLFFullAccess および AliyunRAMReadOnlyAccess ポリシーをアタッチする必要があります。 -
EMR クラスターにログインし、
dlf_dba_adminユーザーとして Hive に接続して HiveQL 文を実行します。beeline -u jdbc:hive2://<primary_node_name>:10000 -n dlf_dba_adminselect * from db_a.table1; select * from db_b.table1;1 つ目のクエリは成功します。これは、ユーザーが
db_aデータベース内のすべてのリソースに対する権限を持っているためです。2 つ目のクエリは失敗します。これは、ユーザーが
db_bデータベース内のリソースに対する権限を持っていないためです。
-
-
ビジネス A データ開発者が
db_aデータベース内のデータをクエリおよび変更できるように権限を設定します。-
Alibaba Cloud コンソールで
dlf_dba_adminRAM ユーザーに切り替え、このアカウントを使用して他のユーザーにデータ権限を付与します。 -
Data Lake Formation コンソールに移動します。
-
左側のナビゲーションウィンドウで、Data Permission > Data Permissions を選択し、Add Permission をクリックします。
-
以下のパラメーターを設定します。
-
Principal Type:RAM ユーザー/ロール。
-
Choose Principal:dlf_dba_dev。
-
Resources:Resource Authorization。
-
カタログの選択:catalog_test。
-
データベースの選択:db_a。
-
Permissions:
-
Database - Data Permission:すべて。
-
Database - Granted Permission:なし。
-
All objects in the database - Data Permission:すべて。
-
All objects in the database - Granted Permission:すべて。
-
-
-
OK をクリックして認可情報を保存します。
-
EMR クラスターにログインし、
dlf_dba_devユーザーとして Hive に接続して HiveQL 文を実行します。beeline -u jdbc:hive2://<primary_node_name>:10000 -n dlf_dba_devselect * from db_a.table1; insert into table db_a.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1'); select * from db_b.table1; insert into table db_b.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1');1 つ目および 2 つ目の SQL ステートメントは成功し、
dlf_dba_devユーザーがdb_aデータベースおよびそのすべてのリソースに対してクエリおよび変更の権限を持っていることが確認されます。3 つ目および 4 つ目の SQL ステートメントは失敗します。これは、
dlf_dba_devユーザーがdb_bデータベースをクエリまたは変更する権限を持っていないためです。
-
-
ビジネス A データアナリストが
db_aデータベース内のtable1(col1, col2)にアクセスできるように権限を設定します。-
dlf_dba_adminRAM ユーザーとして Alibaba Cloud Web サイトにログインします。このアカウントを使用して他のユーザーにデータ権限を付与します。 -
Data Lake Formation コンソールにログインします。
-
左側のナビゲーションウィンドウで、Data Permission > Data Permissions を選択し、次に Add Permission をクリックします。
-
以下の情報を入力します。
-
Principal Type:RAM ユーザー/ロール。
-
Choose Principal:dlf_dba_analyst。
-
Resources:Resource Authorization。
-
Resource Type:Column。
-
データカタログの選択:catalog_test。
-
データベースの選択:db_a。
-
テーブルの選択:table1。
-
Permissions:
-
Column-Data Permission:すべて。
-
-
-
OK をクリックして認可情報を保存します。
-
EMR クラスターにログインし、
dlf_dba_analystとして Hive に接続して HiveSQL コマンドを実行します。beeline -u jdbc:hive2://<name of the primary node>:10000 -n dlf_dba_analystselect * from db_a.table1; select col1,col2 from db_a.table1; insert into table db_a.table1 values('5','aliyun','emrA1'),('6','aliyun','dlfA1'); select * from db_b.table1;2 つ目の SQL ステートメントは成功します。これは、
dlf_dba_analystユーザーがdb_a.table1テーブルのcol1およびcol2列をクエリする権限を持っているためです。1 つ目の SQL ステートメントは失敗します。これは、
dlf_dba_analystユーザーがdb_a.table1テーブルのcol3列をクエリする権限を持っていないためです。3 つ目の SQL ステートメントは失敗します。これは、
dlf_dba_analystユーザーがdb_a.table1テーブルのデータを変更する権限を持っていないためです。4 つ目の SQL ステートメントは失敗します。これは、
dlf_dba_analystユーザーがdb_bデータベースのデータをクエリする権限を持っていないためです。
-
まとめ
上記の例では、典型的なビジネスシナリオで DLF データ権限を使用する方法を示しました。必要に応じて権限を設定し、さまざまなユーザーに適切なレベルのリソースアクセスを付与できます。