このトピックでは、特定のビジネスシナリオで データレイク の権限を管理するために Data Lake Formation(DLF)および E-MapReduce(EMR)製品を使用する方法について説明します。
背景情報
メタデータ管理とデータ権限制御は、データレイクを構築するために DLF 製品によって提供される基本的な機能です。 DLF によって提供されるメタデータビューを介してレイクデータにアクセスすることにより、データレイク内のメタデータの整合性に関連する問題を解決し、データ共有に関連する課題に対処できます。さまざまなエンジンは、DLF 権限と統合することで、エンタープライズレベルの権限管理機能を取得できます。
概念
EMR:Alibaba Cloud E-MapReduce 製品です。詳細については、「ECS 上の EMR とは」をご参照ください。
DLF カタログ:DLF データカタログ(DLF)は、DLF メタデータアーキテクチャの最上位エンティティであり、データベースやデータテーブルなどのメタデータ情報を含めることができます。詳細については、「データカタログ」をご参照ください。
DLFデータ権限: DLFがデータレイクに提供するデータ権限システム。データベース、データテーブル、データ列、関数の4つの次元で、きめ細かい権限制御をサポートします。詳細については、「データ権限」をご参照ください。
ビジネスシナリオ
ある企業は、Hive、Spark、Presto、Impala などの異なるエンジンを持つ EMR クラスタを持っており、実際のビジネスシナリオで異なるユーザーに対して統一されたデータ権限を使用することを期待しています。主な状況は次のとおりです。
スーパー管理者
データレイクデータに対するすべての権限と、他のユーザーに権限を割り当てる機能を備えています。
ビジネス A データ管理者
ビジネス A の db_a に関連するすべてのデータ使用権限とアクセス権限、および他のユーザーにデータベース権限を割り当てる機能を備えています。
ビジネス A データ開発者
ビジネス A の db_a に関連するすべてのデータ使用権限とアクセス権限を備えています。
ビジネス A データアナリスト
ビジネス A に関連する db_a 内のいくつかのテーブルのいくつかの列へのアクセス権限を持っています。たとえば、table1 の col1 と col2 へのアクセス権限などです。
手順
EMR クラスタを作成し、DLF をメタデータとして使用します。
E-MapReduce コンソール にログインします。
次のオプションを使用して E-MapReduce クラスタを作成します。
ビジネスシナリオ:データレイク を選択します。
オプションサービス:少なくとも Hive コンポーネントと DLF-Auth コンポーネントを選択します。その他のコンポーネントは、ビジネスニーズに基づいて選択できます。
メタデータ:DLF 統合メタデータ を選択します。
DLF カタログ: デフォルトの DLF カタログを選択するか、新しいデータカタログを作成します。この例では catalog_test を使用します。
他の構成を続行して、EMR クラスタの作成を完了します。
説明E-MapReduce クラスタが既に存在するが、DLF-Auth コンポーネントがインストールされていない場合は、EMR クラスタ内で サービスの追加 メソッドを使用して DLF-Auth コンポーネントを追加してから、DLF データ権限を使用できます。
E-MapReduce クラスタが既に存在するが、Hive メタデータが DLF を使用していない場合は、DLF データベース権限を使用する前にメタデータを移行できます。 DingTalk グループ: 33719678 でお問い合わせいただけます。
関連するデータベースとデータテーブルを初期化します。
EMR クラスタにログインします。詳細については、「クラスタにログインする」をご参照ください。
Beeline を介して Hive SQL に接続します。
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 ユーザーを初期化します。
スーパー管理者の新しい RAM ユーザー dlf_data_admin を作成します。
ビジネス A データ管理者の新しい RAM ユーザー dlf_dba_admin を作成します。
ビジネス A データ開発者の新しい RAM ユーザー dlf_dba_dev を作成します。
ビジネス A データアナリストの新しい RAM ユーザー dlf_dba_analyst を作成します。
データ権限制御を有効にします。
次の 2 つの手順を実行して、EMR クラスタのデータ権限制御を正式に有効にします。
スーパー管理者に DLF コンソールの承認権限とすべてのデータへのアクセス権限を付与します。
Data Lake Formationコンソールにログインします。 Data Lake Formationコンソール。
左側のナビゲーションペインで、 を選択します。
admin ロールで、ユーザー dlf_data_admin を追加します。その後、dlf_data_admin は DLF のすべてのデータを管理するための管理者権限を持ちます。任意のユーザーに関連するデータ権限を構成できます。
dlf_data_admin が DLF コンソールで RAM ユーザーのデータ権限を構成する必要がある場合は、RAM コンソール で dlf_data_admin に権限ポリシーを追加する必要があります: AliyunDLFFullAccess、AliyunRAMReadOnlyAccess。
EMR クラスタにログインし、dlf_data_admin を使用して Hive に接続し、HiveSQL を実行します。
beeline -u jdbc:hive2://<primary node name>:10000 -n dlf_data_adminselect * from db_a.table1; select * from db_b.table1;上記の SQL クエリが成功すると、ユーザー dlf_data_admin はすべてのデータベースとデータテーブルへのアクセス権限を持ちます。
ビジネス A データ管理者に db_a データベースの DLF コンソールの承認権限と db_a データベースデータへのアクセス権限を付与します。
Alibaba Cloud ウェブサイトのログインユーザーを dlf_data_admin ユーザーに切り替え、このアカウントを使用して他のユーザーのデータを承認します。
Data Lake Formation コンソール にログインします。
左側のナビゲーションペインで、 を選択し、権限を追加 をクリックします。
次の情報を入力します。
プリンシパルタイプ:RAM ユーザー/ロール。
プリンシパルを選択:dlf_dba_admin。
リソース:リソース承認。
Selectcatalog リスト: catalog_test。
項目を入力.データベース: db_a。
権限:
データベース-データ権限: すべて。
データベース-付与された権限: すべて。
データベース内のすべてのオブジェクト-データ権限: すべて。
データベース内のすべてのオブジェクト-付与された権限: すべて。
OK をクリックして承認情報を保存します。
dlf_dba_admin が DLF コンソールで RAM ユーザーのデータ権限を構成する必要がある場合は、RAM コンソール で dlf_dba_admin に権限ポリシーを追加する必要があります: Aliyundlffullaccess、aliyunramreadonlyaccess。
EMR クラスタにログインし、dlf_dba_admin を使用して Hive に接続し、HiveSQL を実行します。
beeline -u jdbc:hive2://<primary node name>:10000 -n dlf_dba_adminselect * from db_a.table1; select * from db_b.table1;最初の SQL クエリが成功すると、ユーザー dlf_dba_admin は db_a データベースと db_a データベース内のすべてのリソースに対するすべての権限を持ちます。
2 番目の SQL クエリが失敗すると、ユーザー dlf_dba_admin は db_a データベースと db_a データベース内のすべてのリソースに対する権限を持ちません。
ビジネス A データ開発者に db_a データベースデータのクエリ権限と変更権限を付与します。
Alibaba Cloud ウェブサイトのログインユーザーを dlf_dba_admin ユーザーに切り替え、このアカウントを使用して他のユーザーのデータを承認します。
Data Lake Formation コンソール にログインします。
左側のナビゲーションペインで、データ権限>データ権限 を選択し、権限を追加 をクリックします。
次の情報を入力します。
プリンシパルタイプ: RAM ユーザー/ロール。
プリンシパルを選択: dlf_dba_dev。
リソース: リソース承認。
Selectcatalog リスト: catalog_test。
項目を入力.データベース: db_a。
権限:
データベース - データ権限: すべて。
データベース-付与された権限: すべて。
データベース内のすべてのオブジェクト-データ権限: すべて。
データベース内のすべてのオブジェクト-付与された権限: すべて。
OK をクリックして承認情報を保存します。
EMR クラスタにログインし、dlf_dba_dev を使用して Hive に接続し、HiveSQL を実行します。
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');最初と 2 番目の SQL クエリが成功すると、ユーザー dlf_dba_dev は db_a データベースと db_a データベース内のすべてのリソースに対するクエリ権限と変更権限を持ちます。
3 番目と 4 番目の SQL クエリが失敗すると、ユーザー dlf_dba_dev は db_b データベースと db_a データベース内のすべてのリソースに対するクエリ権限と変更権限を持ちません。
ビジネス A データアナリストに db_a データベースの table1(col1, col2) へのアクセス権限を付与します。
Alibaba Cloud ウェブサイトで、dlf_dba_admin ユーザーとしてログインし、このアカウントを使用して他のユーザーのデータを承認します。
Data Lake Formation コンソール にログインします。
左側のナビゲーションペインで、データ権限>データ権限 を選択し、権限を追加 をクリックします。
次の情報を入力します。
プリンシパルタイプ: RAM ユーザー/ロール。
プリンシパルを選択: dlf_dba_analyst。
リソース: リソース承認。
リソースタイプ: 列。
Selectcatalog リスト: catalog_test。
データベースを選択: db_a。
テーブルを選択: table1。
権限:
データ列-データ権限: すべて。
OK をクリックして承認情報を保存します。
EMR クラスタにログインし、dlf_dba_analyst を使用して Hive に接続し、HiveSQL を実行します。
beeline -u jdbc:hive2://<primary node name>: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_dev は db_a.table1(col1, col2) に対するクエリ権限を持ちます。
最初の SQL クエリが失敗すると、ユーザー dlf_dba_dev は db_a.table1(col3) に対するクエリ権限を持ちません。
3 番目の SQL クエリが失敗すると、ユーザー dlf_dba_dev は db_a.table1 データに対する変更権限を持ちません。
4 番目の SQL クエリが失敗すると、ユーザー dlf_dba_dev は db_b データベースデータに対するクエリ権限を持ちません。