X

Big Data、Data Integration、Data Lakeに関するテクノロジー、製品・サービス情報、セミナー情報などをお届けします

Big Data SQL - マルチユーザー認証

Big Data SQLのメリットの1つは、セキュリティです。Oracle Databaseを利用して、HDFSやその他のソースに格納されたデータを処理します。そのため、Data RedactionVPDDatabase Vaultなどの多くのデータベース機能を適用できます。これらの機能は、データベース・スキーマと権限を組み合わせて、侵入者がデータベース側からデータにアクセスしようとする場合、データを保護します。

しかし、HDFSに格納されたデータは、他の目的(Spark、Solr、Impala…)で使用される場合もあり、他のメカニズムで保護する必要もあります。Hadoopの世界では、Kerberosがデータ保護の最も一般的な認証方法です。KerberosHDFS ACLを組み合わせて、ファイルシステムレベルでデータを保護できます。ファイルシステムとしてのHDFSは、ユーザーとグループの概念を持ち、所有者、グループ、その他のユーザーにそれぞれの権限を付与できます。


 

結論:Kerberizedクラスタを使用する場合、Big Data SQLはHDFSファイルを扱うために有効なKerberosチケットを持っている必要があります。このすべての設定は、標準のOracle Big Data SQLインストーラで自動化され、使用可能です。詳細はこちらをご確認ください。

Big Data SQLとKerberos

顧客がKerberizedクラスタを使用している場合、我々も有効なKerberosチケットが必要です。Big Data SQLはどのプリンシパルを持つ必要がありますか。
答えはoracleです。以前のBig Data SQLリリースでは、すべてのBig Data SQLが同じユーザーoracleとして実行されており、次のような状況でした。

  • クエリを実行しているユーザーに基づいて、データへのアクセスを承認することができない

  • Big Data SQLを介して問い合わせを実行するユーザーは、すべてoracleとしてHadoopクラスタ監査に記録される

他のアプリケーションでも使用され異なる権限を持つ(別のユーザーやグループに属している)データが既にある場合、どのようにすればよいでしょうか。Big Data SQL 3.2では、新しい機能としてマルチユーザー認証を導入しました。

Hadoop Impersonalization

マルチユーザー認証の基礎は、ImpersonalizationというHadoopの機能です。Impersonalizationの説明は以下になります。(出典はこちら
"A superuser with username ‘super’ wants to submit job and access hdfs on behalf of a user joe. The superuser has Kerberos credentials but user joe doesn’t have any. The tasks are required to run as user joe and any file accesses on namenode are required to be done as user joe. It is required that user joe can connect to the namenode or job tracker on a connection authenticated with super’s Kerberos credentials. In other words super is impersonating the user joe."

スーパーユーザーsuperは、ユーザーjoeに代わってジョブを送信し、HDFSにアクセスします。SuperにはKerberos認証情報がありますが、joeにはKerberos認証情報がありません。タスクやname node上のファイルへのアクセスはjoeとして実行する必要があります。Joeは、superのKerberos認証情報で認証された接続上でname nodeまたはjob trackerに接続する必要があります。言い換えれば、superはjoeをImpersonalizationしています。


同じように、oracleはスーパーユーザーであり、他のユーザーがImpersonalizationされています。

マルチユーザー認証の主な概念

  1. Big Data SQLは、クラスタ上のデータにアクセスしている信頼できるユーザーを識別します。信頼できるユーザーがクエリを実行する時
    • Hadoopで指定された承認ルールは遵守される
    • Hadoopで指定された承認ルールをデータベースに複製する必要はない
    • Hadoopクラスタ監査は、Big Data SQLクエリを実行する実際のユーザーを識別する
  2. Oracle Databaseは、Hadoopに信頼できるユーザーを提供するエンティティとして考えられる
  3. Oracle Databaseの問い合わせを実行しているデータベース・ユーザーをHadoopユーザーにマッピングする必要がある
  4. Oracle表を問い合わせている実際のユーザーを識別し、ユーザーIDをHadoopに渡す必要がある
    • これはOracle Databaseのユーザー(スキーマ)である可能性がある
    • セッション・ベースのコンテキストから発生された軽量ユーザーである場合もある(SYS_CONTEXT参照)
    • ユーザー/グループのマッピングは、HadoopのOSルックアップで確認できる必要がある

 

デモンストレーション

シナリオ1

このシナリオではシンクライアントまたはCLIENT_IDENTIFIERによって認証を行います。多層アーキテクチャの場合(アプリケーション層とデータベース層がある場合)、同一のスキーマを使用する複数のユーザーを同じアプリケーション内で区別することは難しいです。

この機能に関するドキュメントはこちらで確認できます。ここでは、よくあるケースをサンプル・コードで紹介します。
オブジェクトを操作するには、マッピングテーブルを管理する権限をユーザーに与える必要があります。
ここでは、ユーザーbikesを使います。

SQL> grant select on BDSQL_USER_MAP to bikes;
SQL> grant execute on DBMS_BDSQL to bikes;
SQL> grant BDSQL_ADMIN to bikes;

念のためユーザーbikesのパーミッションを削除します。

SQL> begin
DBMS_BDSQL.REMOVE_USER_MAP
(current_database_user =>'BIKES');
end;
/ 

マッピングテーブルが空であることを確認します。

SQL> select * from SYS.BDSQL_USER_MAP;

そして以下のクエリを実行します。これはマッピングなしのデフォルト・モードなので、ユーザーoracleとしてHDFSに接続するでしょう。

SQL> select /*+ MONITOR */ * from bikes.weather_ext;

監査ファイルを確認します。ユーザーoracleがファイルを読み取ったことを確認できます(ugi = oracle)。

$ cd /var/log/hadoop-hdfs
$ tail -f hdfs-audit.log |grep central_park
2018-03-01 17:42:10,938 INFO ... ugi=oracle ... ip=/10.0.0.10 cmd=open ... src=/data/weather/central_park_weather.csv..

ファイルの権限を確認します。このファイルはデータベースの外部表として表します。誰でもこのファイルをREAD可能です。

$ hadoop fs -ls /data/weather/central_park_weather.csv
-rw-r--r--   3 oracle oinstall      26103 2017-10-24 13:03 /data/weather/central_park_weather.csv

では、最初のマッピングを作成します。ユーザーbikesをOSのユーザーuser1にマッピングします。

SQL> begin
DBMS_BDSQL.ADD_USER_MAP(
    current_database_user =>'BIKES',
    syscontext_namespace  => null,
    syscontext_parm_hadoop_user => 'user1'
);
end;
/ 

パーミッションテーブルを確認します。

 

クエリを実行します。

SQL> select /*+ MONITOR */ * from bikes.weather_ext;

監査ファイルではユーザーuser1がファイルを読んだことを確認できます。(ugi=user1)
$ cd /var/log/hadoop-hdfs
$ tail -f hdfs-audit.log |grep central_park
2018-03-01 17:42:10,938 INFO ... ugi=user1... ip=/10.0.0.10 cmd=open ... src=/data/weather/central_park_weather.csv..

監査ファイルではユーザーuser1がファイルを読んだことを確認できます。(ugi=user1)
(user1はHadoop OS上には存在しませんが、このように監査されます。)

# id user1
id: user1: No such user

ユーザーが存在しない場合(user1の場合)、777権限を持つファイルしか読み取れません。全員の読み取り許可を取り消して、もう一度問い合わせを実行してみます。

$ sudo -u hdfs hadoop fs -chmod 640 /data/weather/central_park_weather.csv
$ hadoop fs -ls /data/weather/central_park_weather.csv
-rw-r-----   3 oracle oinstall      26103 2017-10-24 13:03 /data/weather/central_park_weather.csv

 

クエリは失敗しました。これを動作させるために、各Hadoopノードにuser1アカウントを作成し、oinstallグループに追加します。

$ useradd user1
$ usermod -a -G oinstall user1

クエリを再度実行し(成功します)、ファイルを読み取ったユーザーを確認します。

SQL> select /*+ MONITOR */ * from bikes.weather_ext;

$ cd /var/log/hadoop-hdfs
$ tail -f hdfs-audit.log |grep central_park
2018-03-01 17:42:10,938 INFO ... ugi=user1... ip=/10.0.0.10 cmd=open ... src=/data/weather/central_park_weather.csv..

user1でファイルを成功に読み取りました。user1がグループoinstallに所属するため、読み取ることができます。

このスキーマをhdfsや他のユーザーにマッピングしたい場合、以下を実施します。

SQL> begin
DBMS_BDSQL.REMOVE_USER_MAP
(current_database_user =>'BIKES');
DBMS_BDSQL.ADD_USER_MAP(
    current_database_user =>'BIKES',
    syscontext_namespace  => null,
    syscontext_parm_hadoop_user => 'hdfs'
);
end;
/ 

 

例外が発生した原因は、ユーザーhdfsがimpersonationのブラックリストに載っていることです。

$ cat $ORACLE_HOME/bigdatasql/databases/orcl/bigdata_config/bigdata.properties| grep impersonation
....
# Impersonation properties
impersonation.enabled=true
impersonation.blacklist='hue','yarn','oozie','smon','mapred','hdfs','hive','httpfs','flume','HTTP','bigdatamgr','oracle'
...

 

シナリオ2

次のシナリオはシンクライアントまたはCLIENT_IDENTIFIERによって認証を行います。多層アーキテクチャの場合(アプリケーション層とデータベース層がある場合)、同一のスキーマを使用する複数のユーザーを、同じアプリケーション内で区別することは難しいです。

ユーザーHR_APPとして、データベースに接続するアプリケーションがあります。多くのユーザがこのアプリケーションを使用して、データベースにログインします。これらのユーザを区別するために、dbms_session.set_IDENTIFIERプロシージャを使います。(詳細はこちらで確認できます)

従って、Big Data SQLのマルチユーザー認証機能は、ユーザーSYS_CONTEXTを使用して、Hadoopで認証できます。以下にテストケースを示します。

-- Remove previous rule, related with BIKES user --
SQL> begin
DBMS_BDSQL.REMOVE_USER_MAP
(current_database_user =>'BIKES');
end;
/ 

-- Add a new rule, which tells that if database user is BIKES, Hadoop user have to be taken from USERENV as CLIENT_IDENTIFIER --
SQL> begin
DBMS_BDSQL.ADD_USER_MAP(
    current_database_user =>'BIKES',
    syscontext_namespace  => 'USERENV',
    syscontext_parm_hadoop_user => 'CLIENT_IDENTIFIER'
);
end;

--Check current database user (schema) --
SQL> select user from dual;

BIKES

-- Check CLIENT_IDENTIFIER from USERENV --
SQL> select SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') from dual;

NULL

-- Run any query aginst Hadoop --
SQL> select /*+ MONITOR */ * from bikes.weather_ext;

-- check in the Hadoop audit logs --
-bash-4.1$ tail -f hdfs-audit.log |grep central_park
2018-03-01 18:14:40 ... ugi=oracle ... src=/data/weather/central_park_weather.csv

-- Set CLIENT_IDENTIFIER --
SQL> begin
dbms_session.set_IDENTIFIER('Alexey');
end;
/

-- Check CLIENT_IDENTIFIER for current session --
SQL> select SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') from dual;
Alexey

-- Run query agin over HDFS data --
SQL> select /*+ MONITOR */ * from bikes.weather_ext;

-- check in the Hadoop audit logs: --
-bash-4.1$  tail -f hdfs-audit.log |grep central_park
2018-03-01 18:17:43 ... ugi=Alexey ... src=/data/weather/central_park_weather.csv

 

シナリオ3

このシナリオは、ユーザー認証IDを使います。データベースに接続するユーザーは、認証されたIDをHadoopに渡します。
これを動作するために、以下のコマンドを実行します。

 

SQL> begin
DBMS_BDSQL.ADD_USER_MAP(
    current_database_user => '*' ,
    syscontext_namespace  => 'USERENV',
    syscontext_parm_hadoop_user => 'AUTHENTICATED_IDENTITY');
end;
/ 

その後、HDFS上のユーザーは以下のように返されます。

SQL> select SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY') from dual;

BIKES

例えば、bikes(データベースユーザー)としてデータベースにログオンした場合、HDFS上ではbikesユーザーとして認証されます。

$  tail -f hdfs-audit.log |grep central_park
2018-03-01 18:23:23 ... ugi=bikes... src=/data/weather/central_park_weather.csv

以下のクエリを実行して、マルチユーザー認証に使用するルールを確認できます。

SQL> select * from SYS.BDSQL_USER_MAP;

このマルチユーザー認証の機能により、HDFS上のデータに強固なセキュリティを構成できるようになります。

本投稿は Big Data SQL Quick Start. Multi-user Authorization - Part 25. を元に投稿しています。

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.