7 Oracle Big Data SQLの保護
この項では、Oracle Big Data SQLが備えるセキュリティ機能、Oracle Big Data SQLを保護するために講じることができる対策、および保護された環境内でOracle Big Data SQLを構成するために必要な情報へのポインタについて説明します。
7.1 セキュリティの概要
この項では、インストーラ、ネットワーク、ファイルおよびパスワードのセキュリティについて説明します。
ネットワーク・セキュリティ
Oracle Big Data SQLでは、データベースとHadoopクラスタ間のネットワーク・トラフィックは、プライベート・インフィニバンド・ネットワークを経由することが保証されなくなりましたが、クライアント・ネットワーク経由で行われることがあります。このネットワーク・トラフィックは現在保護されていません。このため、保護されているHadoopクラスタ(Kerberos対応のRPC暗号化など)を運用している場合、Oracle Big Data SQLでは次のいずれかが必要になります。
- クライアント・ネットワークのすべてのメンバーが信頼されていること
- プライベート・ネットワーク接続が、HadoopノードとOracleデータベース・インスタンスの間の通信にのみ使用されること。
このプライベート・ネットワークは、一般にBig Data SQLインターコネクト・ネットワークと呼ばれます。インターコネクト・ネットワークは、信頼できるユーザーのみのプライベート・ネットワークで、少なくとも1つのスイッチといくつかの10ギガビット・イーサネット・アダプタを使用する必要があります。HadoopクラスタおよびOracle RACクラスタのノードのみがインターコネクト・ネットワークにアクセスできるようにします。他のユーザー通信にインターコネクト・ネットワークを使用しないでください。
インストーラ・ファイルのセキュリティ
新しいJaguarインストーラは、セキュアなLinuxインストーラおよびアプリケーションを実現するために、次のベスト・プラクティスを組み込んでいます。
-
全ユーザーに書込み権限がある一時ファイルまたは永続ファイルは作成されません。
-
setuidファイルまたはsetgidファイルは使用されません。
また、インストーラは、Cloudera CDHおよびHortonworks HDPのセキュリティ・ドキュメントで説明されているように、堅牢なOracle Database環境の他、堅牢なCDHおよびHDPクラスタとも連携して機能します
パスワードの安全性
Jaguarインストーラは、次のパスワード・セキュリティ対策を備えています。
-
AmbariおよびCloudera Managerクラスタ管理サーバーのパスワードは、コマンドラインでは渡されず、インストール中またはインストールの完了後に永続ファイルに保存されることはありません。
-
パスワードは、ログ・ファイルやトレース・ファイルに記録されません。
関連するソフトウェアのセキュリティ
Oracle Big Data SQLは、サードパーティ・プロジェクトなど他のインストールされたソフトウェアに依存します。このようなソフトウェアを最新のセキュリティ・パッチで最新の状態に保つのは、顧客の責任です。このようなソフトウェアには次のものがありますが、これに限定されません。
-
Python
-
Perl
7.2 Big Data SQLの通信とセキュアなHadoopクラスタ
不正な書込み/読取りアクセスを防止するために、HDFSファイル・アクセス権限を最小限に抑えておくことは、一般的に適切なセキュリティ上の措置です。このことは、HadoopクラスタがKerberosによって保護されているかどうかに関係なく言えることです。
Oracle Big Data SQLとの使用においてHadoopクラスタを保護する詳細なガイドラインは、My Oracle SupportのMOSドキュメント2123125.1を参照してください。
7.2.1 保護されているクラスタと保護されていないクラスタの両方へのデータベースの接続
Oracle Big Data SQLは、1つのデータベースを複数のKerberosで保護されているクラスタまたは保護されていないクラスタに同時に接続できます。
データベースで、保護されているクラスタと保護されていないクラスタの両方への接続が混在する場合、Hiveメタデータ問合せの使用には制限があります。デフォルト(使用可能な最初の接続)が保護されている場合、保護されていないクラスタのHiveメタデータにはアクセスできません。逆も同様です。デフォルトのクラスタが保護されていない場合は、保護されたクラスタのHiveメタデータにはアクセスできません。これは、データベースがサポートできるHadoop認証方式は1つのみであるためです。
データベースにcluster_1 (デフォルトのクラスタ、保護されている)、cluster_2 (保護されていない)、cluster_3 (保護されている)という接続があるとします。この場合、次のような問合せは、cluster_1に対して成功します(cluster_1はデフォルトであるため)。これは、cluster_3に対しても成功します。ただし、保護されていないcluster_2に対しては失敗します。
select cluster_id, database_name, table_name from all_hive_tables;cluster_1 (デフォルト)が保護されていない場合は、かわりにこの問合せはcluster_2に対して成功し、cluster_3に対して失敗します。
メタデータ(他のツールを使用して取得できる)がすでにわかっている場合は、Hiveソースを介して外部表を正常に作成できます。たとえば、次のcreate tableコマンドは、デフォルトのクラスタのステータスに関係なく、保護されているクラスタと保護されていないクラスタの両方に対して機能します。
create table myhivetable (
id number(10),
name varchar2(4000),
type varchar2(4000))
organization external (
type ORACLE_HIVE
default directory default_dir
access parameters (
com.oracle.bigdata.cluster=<cluster name>
com.oracle.bigdata.tablename=<Hive database name>.<Hive table name>)
)
parallel 2 reject limit unlimited;
7.3 Kerberosで保護された環境でのOracle Big Data SQLの構成
HadoopシステムでKerberosが有効になっている場合、Kerberosと連携するようにデータベース・サーバーでOracle Big Data SQLを構成する必要があります。このためには、Oracle Big Data SQLがインストールされる各データベース・ノード上にKerberosクライアントが必要です。また、データベースを所有するOSアカウント(oracleまたは別のアカウント)は、ユーザー・プリンシパルとしてプロビジョニングする必要があります。
保護されたHadoopクラスタ(たとえば、Kerberos対応のRPC暗号化)を運用している場合、Oracle Big Data SQLを使用するには、クライアント・ネットワークのすべてのメンバーが信頼できるものであるか、またはプライベート・ネットワーク接続がHadoopノードとOracle Databaseインスタンス間の通信専用に使用されている必要があります。このプライベート・ネットワークは、一般にBig Data SQLインターコネクト・ネットワークと呼ばれます。インターコネクト・ネットワークは、信頼できるユーザーのみのプライベート・ネットワークで、少なくとも1つのスイッチといくつかの10ギガビット・イーサネット・アダプタを使用する必要があります。HadoopクラスタおよびOracle RACクラスタのノードのみがインターコネクト・ネットワークにアクセスできるようにします。他のユーザー通信にインターコネクト・ネットワークを使用しないでください。
7.3.1 Kerberos化されたクラスタへのOracle Big Data SQLアクセスの有効化
ユーザー・アクセスがKerberosによって管理される環境では、Kerberosを使用するようにOracle Big Data SQLを構成する必要があります。
これが必要となる状況には、次の2つがあります。
-
Kerberosが有効化されたクラスタでOracle Big Data SQLを有効化する場合。
-
Oracle Big Data SQLがすでにインストールされているクラスタでKerberosを有効化する場合。
Oracle Big Data SQLプロセスは、Hadoop クラスタのノードでoracle Linuxユーザーとして実行します。Oracle Databaseサーバーでは、Oracle Databaseプロセスの所有者も(通常)oracle Linuxユーザーです。HadoopシステムでKerberosが有効になっている場合、ユーザーがHDFSにアクセスできるようにするには、次のことが必要です。
-
oracleLinuxユーザーは、Kerberosキー配布センター(KDC)サーバーのKerberosデータベースでプリンシパルとして認証できる必要があります。Kerberosでのプリンシパル名が'oracle'である必要はありません。ただし、プリンシパルには、Oracle Big Data SQLによってリクエストされる基礎となるHadoopデータへのアクセス権が必要です。 -
Oracle Big Data SQLを実行しているすべてのOracle DatabaseノードおよびすべてのHadoopクラスタ・ノードで、次のことが必要です。
-
Kerberosクライアント・ソフトウェアがインストールされていること。
-
KDCからのKerberos構成ファイルのコピー。
-
oracleユーザー用にKDCで生成されたKerberos keytabファイルのコピー。 -
oracleLinuxユーザー用の有効なKerberosチケット。
-
Kerberosクライアントのインストール
Kerberosクライアントがインストールされていない場合、Kerberosクライアントのインストール手順については、Oracle DatabaseノードでのKerberosクライアントのインストールを参照してください。
oracleユーザー用のKerberosプリンシパルの作成
Kerberosキー配布センター(KDC)サーバーで、rootとなってkadmin.localを使用し、oracleユーザーのプリンシパルを追加します。
# kadmin.local-
kadmin.local内で、次のように入力します。
add_principal <user>@<realm> quit次のように、パスワードを入力することもできます。
add_principal <user>@<realm> -pw <password> quit
oracleユーザー用のKerberos Keytabの作成
-
KDCで、
rootとなって次を実行します。# kadmin.local -
kadmin.local内で、次のように入力します。xst –norandkey -k /home/oracle/oracle.keytab oracle quitこれにより、Kerberos
oracleユーザー用のoracle.keytabファイルが/home/oracleディレクトリに作成されます。注意:
-norandkeyオプションを指定せずにxst(ktadd)コマンドを実行すると、このユーザーに対して以前に作成された他のキータブが無効になります。 -
oracle.keytabをoracleLinuxユーザーが所有し、そのユーザーのみが読み取れるようにします。$ chown oracle oracle.keytab $ chmod 400 oracle.keytab
Oracle Big Data SQLで自動化されるKerberosタスク
次のKerberosタスクが自動化されるようになりました。
-
KeytabとKerberos構成ファイルの配布ファイルの配布。
Oracle Big Data SQLインストールは、
oracleユーザーやその他のデータベース所有者のkeytabおよびKerberos構成ファイルをHadoop DataNode (およびOracle Databaseコンピュート・ノード)に自動的に配布するように構成できるようになりました。これが実行されるのは、プリンシパル名およびkeytabファイルの場所のパラメータがJaguar構成ファイルに設定されている場合です。この自動化は、Hadoop側とOracle Database側の両方で実行されます。Oracle Big Data Applianceで、keytabファイルの配布は
oracleアカウントに対してデフォルトで実行されるため、このアカウントのプリンシパルおよびkeytabファイルのパスを構成ファイルに追加する必要はありません。 -
指定されたプリンシパルのKerberosチケットの取得。
Jaguar構成ファイルにリストされた
oracleとその他のプリンシパルの場合、インストールは各Hadoop DataNodeおよびOracle DBコンピュート・ノードでKerberosチケットを取得します -
チケット更新
インストールは、構成のプリンシパルごとにkinitで新しいチケットを毎日4回取得するように、HadoopクラスタおよびOracle Databaseでcronジョブを自動的に設定します。
チケットの有効期限後のクリーン・アップ
bd_cellプロセスが保護されたHadoopクラスタのノードで実行されているのに、Kerberosチケットが有効でない場合、セルは検疫ステータスになります。そのような検疫をすべて削除する必要があります。
-
すべてのHadoopクラスタ・ノードで、
oracleユーザーが有効なKerberosチケットを持っていることを確認します。 -
各クラスタ・ノードで、
oracleになり、次のコマンドを実行します。$ /opt/oracle/bd_cell/cellsrv/bin/bdscli -
bdscliシェルで、次のように入力します。
list quarantine -
bdscliにいる間に、リストにある各検疫を削除します。
drop quarantine <id> -
exitと入力し、bdscliを終了します。
7.3.2 Oracle DatabaseノードでのKerberosクライアントのインストール
Oracle DatabaseシステムがKerberosで保護されている場合、Oracle Big Data SQLを使用するには、Kerberosクライアントが必要です。クライアントがデータベースの各コンピュート・ノードにインストールされている必要があります。
コモディティ・サーバーの場合、選択したリポジトリからKerberosクライアント・ソフトウェアをダウンロードします。データベース・サーバーがOracle Exadata Database Machineの場合は、次に示すOracleリポジトリからソフトウェアをダウンロードしてインストールします。このプロセスは、Oracle以外のリポジトリからのダウンロードの場合と同様です。
rootとしてデータベース・サーバーにログオンし、yumを使用してkrb5-libsパッケージとkrb5-workstationパッケージをインストールします。必要に応じて、Oracle Linux 6またはOracle Linux 5リポジトリからダウンロードします。
-
OracleリポジトリID
public-yum-ol6またはpublic-yum-ol5がインストールされていることを確認します。# yum repolist -
すべてのリポジトリIDを一時的に無効にし、Oracleリポジトリ(この例ではOracle Linux 6)のみを有効にします。
# yum --disablerepo="*" --enablerepo="public-yum-ol6" list available -
Kerberosのパッケージをインストールします。
# yum install krb5-libs krb5-workstation -
/etc/krb5.confファイルをキー配布センター(KDC)からデータベース・サーバー上の同じパスにコピーします。
このステップは、各Oracle Databaseノードに対して実行する必要があります。
また、「Kerberos化されたクラスタへのOracle Big Data SQLアクセスの有効化」の説明に従って、oracle Linuxユーザー(または他のLinuxユーザー)およびパスワードをクラスタのKDCで登録する必要があります。
7.4 Oracle Secure External Password Storeを使用したOracle Big Data SQLのデータベース・アクセスの管理
Oracle Databaseサーバーで、Oracle Secure External Password Store (SEPS)を使用して、Oracle Big Data SQLのデータベース・アクセス資格証明を管理できます。
そのためには、oracle Linuxユーザー(または他のデータベース所有者)用にOracleウォレットを作成します。Oracleウォレットは、認証の格納と資格証明への署名のために使用されるパスワード保護されたコンテナで、SSLで必要とされる秘密キー、証明書および信頼できる証明書が含まれます。
SEPSをOracle Big Data SQLとともに使用する方法の詳細は、My Oracle SupportでMOSドキュメント2126903.1を参照してください。
7.5 Oracle Big Data Applianceでのデータ・セキュリティについて
HadoopシステムがOracle Big Data Applianceである場合、セキュリティを強化するために次のツールがすでに使用可能です。
-
Kerberos認証: ユーザーおよびクライアント・ソフトウェアは、クラスタにアクセスする前に資格証明を提供する必要があります。
-
Apacheセキュリティ認証: データおよびメタデータにファイングレインのロールベース認証を提供します。
-
HDFSでの透過的暗号化: ディスクにあるデータを保護します。データの暗号化と復号化は、データを使用するアプリケーションに対して透過的です。
-
HTTPS/ネットワーク暗号化: Cloudera Manager、Hue、OozieおよびHadoop Web UIにHTTPSを提供します。また、YARNシャッフルやRPCを通じて行われた転送など、他の内部Hadoopデータ転送に対してネットワーク暗号化を有効にします。
7.6 Oracle DatabaseおよびOracle Big Data SQLオフロード・セル・サーバー・プロセス間の認証
このガイドで説明するデータベース認証機能を使用すると、不正で悪意のある可能性があるプロセス(どこからでも開始できます)がHadoopクラスタのDataNodeにあるOracle Big Data SQLセル・サーバー・プロセスに接続するのを防ぐことができます。
Oracle DatabaseとOracle Big Data SQL間の接続にイーサネットが選択されている場合、デフォルトでインストール時にこの保護された認証フレームワークが自動的に設定されます。データベース認証は、インフィニバンド接続の構成オプションとしても使用できます。
7.7 マルチユーザー認可モデル
マルチユーザー認可機能により、Hadoop Secure Impersonationを使用して、oracleアカウントに対し、他の指定のユーザーのかわりにタスクを実行するように指示できます。
これにより、唯一のoracleユーザーだけでなく、問合せを現在実行しているユーザーに基づいてHDFSデータにアクセスできるようになります。
管理者は、問合せユーザー(現在接続されているユーザー)を識別し、このユーザーを偽装ユーザーにマップするためのルールを設定できます。ユーザーがOracle Databaseに接続する方法が多数あるため、データベース・ユーザー、LDAPを元にするユーザー、Kerberosを元にするユーザー、他のソースを元にするユーザーなどがこのユーザーになります。ファイルに対する認可ルールは問合せユーザーに適用され、監査により、そのユーザーが問合せユーザーであると識別されます。
関連項目:
『Oracle Big Data SQLユーザーズ・ガイド』のDBMS_BDSQL PL/SQLパッケージに関する項 では、マルチユーザー認可セキュリティ表およびその表に対してユーザー・マップを追加および削除するためのプロシージャについて説明しています。7.8 Oracle Big Data SQLでのSentry認証
Oracle Big Data SQLでは、HDFSファイル・アクセスの認可のサポートに加えて、Hiveメタデータへのアクセスを認可するSentryポリシーもサポートしています。Sentryによって、列レベルまでのユーザー・アクセスをきめ細かく制御できます。
注意:
Oracle Database 12.1システムのBig Data SQLインストールでは、Sentryはサポートされていません。7.8.1 Sentryおよびマルチユーザー認可
Oracle Big Data SQLのマルチユーザー認可システムを使用すると、Sentryのセキュリティを強化できます。
Oracle Big Data SQLは、HadoopクラスタでSentryが有効になっている場合は常に、Sentryポリシーを使用します。Oracle Big Data SQLでのSentryのサポートは、マルチユーザー認可システムと併用する場合に最も効果的です。マルチユーザー認可では、現在接続しているユーザーの実際のアイデンティティに基づいて、Sentry認証を有効にします。
マルチユーザー認可が有効になっていない場合は、すべての問合せの認可にoracleプロキシ・ユーザーが使用されます。
関連項目:
- この章の前の項のマルチユーザー認可モデル。
- Oracle Big Data SQLユーザーズ・ガイドのDBMS_BDSQL PL/SQLパッケージでは、SYS.BDSQL_USER_MAPおよび表の管理手順について説明しています。
- このガイドのJaguar構成パラメータおよびコマンド・リファレンスでは、Jaguarパラメータを使用してOracle Big Data SQLのセキュリティ機能を構成する方法について説明しています。
impersonation_enabledパラメータは、マルチユーザー認可(ApacheのHadoop Secure Impersonationに基づく)を有効または無効にします。
7.8.2 Sentryのグループ、ユーザーおよびロールベースのアクセス制御
Oracle Big Data SQLは、Hive表へのアクセスを直接制御しません。Hiveデータベース管理者によって定義されたアクセス制御が考慮されます。Sentryの場合、これらの制御はロールベースです。特定のユーザーのアクセス権は、グループ・メンバーシップおよびそのグループに割り当てられたロールによって定義されます。
管理者は、HiverServer2 Beelineユーティリティなどのツールを使用して、Hive表とその列に権限(SELECTおよびINSERTなど)を割り当てます。また、管理者は、Sentryロールの作成、別のユーザー・グループへのロールの割当ておよびそれらのロールへの権限の付与を行います。Hadoop環境で操作するHadoopユーザーは、自分のグループに割り当てられた各ロールからすべての権限を継承します。
CREATE ROLE auditfixedcosts;
GRANT SELECT ON TABLE salary TO ROLE auditfixedcosts; また、他のサーバー上または他のデータベース、表または列内のデータにアクセスするために、auditfixedcostsロールに権限を付与することもできます。 管理者は、auditfixedcostsロールをグループに割り当てます。
GRANT ROLE fixedcosts TO GROUP finance;財務グループのメンバーは、給与表のすべてのデータに対するSELECTアクセス権、auditfixedcostsロールに付与されたその他のSELECTアクセス権、および財務グループに付与されたその他のロールから継承したアクセス権を持っています。
関連項目:
- ClouderaのWebサイトのHive SQL Syntax for Use with Sentryでは、Sentryの権限を構成する方法について説明しています。
- 詳細は、https://sentry.apache.orgにあるApache Foundationのドキュメントを参照してください。
7.8.3 Oracle Big Data SQLでSentryを使用する方法
Oracle Big Data SQLでSentryを使用すると、Hive表を介してOracle外部表への問合せを試行する個々のOracle Databaseユーザーに対して、SELECT権限を付与または保留できます。
そのため、SentryポリシーをOracle外部表にレプリケートする(GRANTを使用する)必要がなくなり、管理が簡単になります。
Sentryを使用して、次のスコープ・レベルでSELECT権限を制御できます。
- サーバー(クラスタ・ノード)
- Hiveデータベース
- Hive表内の特定の列
Oracle Big Data SQLはDML操作をサポートしていません。そのため、SELECT権限のみがOracle Big Data SQL問合せに適用されます。Sentryの権限ALL、OWNER、CREATE、INSERTおよびREFRESHは、Oracle Big Data SQLアクセスには関係ありません。
問合せの実行時にOracle Big Data SQLでSentryを使用してアクセスを判断する方法
ユーザーがHive表を介してOracle外部表に対して問合せを実行すると、Oracle Big Data SQLはHadoopユーザーに付与されたロールベースのSentryの権限をチェックし、現在のHive表に対して作成されたOracle外部表にこれらを適用します。次に、これらを問合せの実行に必要な権限と比較します。ユーザーに付与された権限が問合せの要件を満たしていない場合は、例外が発生します。
7.8.4 Sentryに対するOracle Big Data SQL権限関連の例外
ユーザーのSentry権限が問合せの実行に十分でない場合、Oracle Big Data SQLは2つの例外のいずれかを発生させます。
例外およびエラーは次のように返されます。
- 表レベル権限の例外:
"User <the user> does not have SELECT privileges on oracle table <external table name> for Server=<server name>->Db=<Hive db name>->Table=<table name>” - 列レベルの権限の例外:
"User <the user> does not have SELECT privileges on oracle table <external table name> column <column name> for Server=<server name>->Db=<Hive db name>->Table=<table name>->Field=<field name>”
7.8.5 Sentryの使用例
CREATE ROLE marketing_role;
CREATE ROLE hr_role;
CREATE ROLE developer_role;
CREATE ROLE dba_role;
show roles;
# Assign roles to groups. Here, the groups come from either LDAP or Linux groups:
GRANT ROLE developer_role, hr_role, marketing_role TO GROUP developer;
GRANT ROLE hr_role TO GROUP hr;
GRANT ROLE marketing_role TO GROUP marketing;
GRANT ROLE dba_role TO GROUP dba;
# What roles does the developer have?
SHOW ROLE GRANT GROUP developer;
# Make the dba_role (user dataadmin) the "data boss":
GRANT ALL ON SERVER server1 TO ROLE dba_role;
# For the different Hive databases, assign power users and groups:
GRANT ALL ON DATABASE marketing_db TO ROLE marketing_role WITH GRANT OPTION;
GRANT ALL ON DATABASE hr_db TO ROLE hr_role WITH GRANT OPTION;
# Load data into a Hive table. First check that you have rights to access the file
GRANT ALL ON URI 'file:///tmp/salaries.txt' TO ROLE hr_role;
LOAD DATA LOCAL INPATH 'file:///tmp/salaries.txt' INTO TABLE salaries;
# Try some queries
# In Hue, as marketinguser1, try to select from salaries:
select * from hr_db.salaries … fails. No rights to the hr_db
# Allow the marketing user to select everything except salaries from the table:
GRANT SELECT(emp, mgr) ON TABLE salaries TO ROLE marketing_role;
# As marketinguser1 (This fails because salaries is not found.)
SELECT * FROM hr_db.salaries; … fails. Can’t see salaries
# As marketinguser1 (This one succeeds.)
SELECT emp, mgr FROM hr_db.salaries;
7.9 オブジェクト・ストアへのアクセスの保護
Oracle Big Data SQLを使用すると、Oracle Databaseから、およびHadoopノードで実行されるOracle Big Data SQLオフロード・サーバーからもオブジェクト・ストアにアクセスできます。
オブジェクト・ストアにアクセスするには、Oracle Big Dataオフロード・サーバーに適したプロキシ設定が必要です。これらは、Jaguar構成ファイルにcell_http_proxyパラメータまたはcell_no_proxyパラメータのいずれかを含めることによって設定されます。
注意:
Hadoopノードからオブジェクト・ストアへのアウトバウンドHTTP接続は保護する必要があります。ファイアウォールを使用して、ターゲット・オブジェクト・ストアのドメイン名をホワイトリストに登録することをお薦めします。オブジェクト・ストアへのアクセスに必要な資格証明情報は、Oracle DatabaseからOracle Big Data SQLオフロード・サーバーに送信される前に暗号化されます。
関連項目:
- Jaguar構成パラメータおよびコマンド・リファレンスでは、オブジェクト・ストアへのアクセスにプロキシ・パラメータを適用する方法について説明しています。
- ユーザーへのOracle Big Data SQLへのアクセス権の付与では、オブジェクト・ストアへのアクセスを認可する前に、Oracle Database側で付与する必要のあるいくつかの権限について説明しています。