15 DbNestの使用によるリソースの保護と分離
DbNestを使用して、インスタンス・レベルおよびオペレーティング・システムのリソースを保護および分離できます。
- DbNestについて
DbNestは、CDBレベルおよびPDBレベルで階層化され分離されたランタイム環境を提供します。 - DbNestの仕組み
DbNestでは、Linuxネームスペースを使用して、分離およびファイル・システム・アクセスの制御が実現されます。 - DbNestの有効化
dbNestを有効にすると、CDBネストはリソース専用ネストとして作成され、CDBの子PDBは完全ネストとして作成されます。 - データベース・ネストのためのファイル・システムの分離の構成
ファイル・システムをネスト内にマウントまたはネストから除外するように構成できます。
親トピック: データへのアクセス制御
DbNestについて
DbNestは、CDBレベルおよびPDBレベルで階層化され分離されたランタイム環境を提供します。
これらのランタイム環境では、PDBおよびCDBに関して、ファイル・システムの分離、プロセスID番号領域の分離、およびセキュアなコンピューティングが可能です。マルチテナント環境をセキュリティ侵害から保護するために、dbNestは最新のLinuxリソース分離、ネームスペースおよびコントロール・グループ機能を使用します。
親トピック: DbNestの使用によるリソースの保護と分離
DbNestの仕組み
DbNestでは、Linuxネームスペースを使用して分離およびファイル・システム・アクセス制御が実現されます。
- DbNestの目的
DbNestにより、データベース・インスタンスを同一ホストで実行されている他のデータベースおよびアプリケーションから分離したり、PDB相互およびCDBから分離できます。 - Linuxネームスペース
Linuxネームスペースによりグローバル・システム・リソースが抽象化でラップされ、ネームスペース内のプロセスにはグローバル・リソースが独自の分離されたインスタンスを持っているように見えるようになります。 - DbNestのプロパティ
ネストは、すべてのCDB、PDBまたはアプリケーション・コンテナのためにOracle Databaseで作成されるランタイム環境です。 - DbNestのアーキテクチャ
dbNestのライブラリはOracle Databaseバイナリと統合され、単一の仮想環境が形成されます。 - DbNestのユーザー・インタフェース
デフォルトで、dbNestは無効になっています。有効化および構成するには、初期化パラメータを使用します。 - Oracle Databaseでのネストの管理
DBNEST_ENABLE
初期化パラメータがNONE
以外の値に設定されている場合、Oracle Databaseが自動的にネストを作成、管理および削除します。これらの操作は、ユーザーに対して透過的です。
親トピック: DbNestの使用によるリソースの保護と分離
DbNestの目的
DbNestにより、データベース・インスタンスを同一ホストで実行されている他のデータベースおよびアプリケーションから分離したり、PDB相互およびCDBから分離できます。
インスタンス・レベルのリソースおよびオペレーティング・システム・リソースを共有すると、特に大規模なクラウド・デプロイメントでは、セキュリティ制約および分離制約が発生する場合があります。脆弱性は、外因的である(障害が発生したアプリケーション、リソースの不正アクセス、共有リソースなど)可能性もあります。内因的な脆弱性の例として、障害が発生したOracleプロセスがあります。
データベース・インスタンスではすべてのリソースをあらゆる方法での不正アクセスから保護することが理想的です。データベース・インスタンスとPDBの保護には、次の要件があります。
-
データベース・インスタンスとそのリソースに
oracle
オペレーティング・システム・ユーザーまたは高権限のオペレーティング・システム・ユーザーがアクセスできないようにする必要があります。 -
同じOracleホーム内か別のOracleホーム内かに関係なく、別のデータベース・インスタンスまたはアプリケーションがそのデータベース・インスタンスにアクセスできないようにする必要があります。
-
あるPDBからのプロセスが、CDBまたは別のPDBに属するリソースにアクセスできないようにする必要があります。
DbNestは、データベース・インスタンスおよびPDBの保護のためのOracleソリューションです。このインフラストラクチャにより、保護され仮想化された環境でデータベース・インスタンスを実行できるようになります。
このインフラストラクチャは、ネストと呼ばれる階層コンテナを提供する、Linux固有のパッケージとして実装されます。CDBは単一の親ネスト内にあるのに対し、PDBは親の中に作成された個々の子ネスト内にあります。PDBネスト内のLinuxプロセスは独自のプロセスID (PID)番号空間を持ち、他のネスト内のPIDにアクセスできません。プロセスの分離は、悪意のあるユーザーがプロセスを危険にさらした場合のセキュリティ違反における最終レベルの防御です。
親トピック: DbNestの仕組み
Linuxネームスペース
Linuxネームスペースによりグローバル・システム・リソースが抽象化でラップされ、ネームスペース内のプロセスにはグローバル・リソースが独自の分離されたインスタンスを持っているように見えるようになります。
重要なネームスペース・タイプは次のとおりです。
-
プロセス・ネームスペース
ネームスペースに一連の独立したプロセスIDがあります。最初のプロセスでネームスペースが初期化されます。ネームスペース内のすべてのプロセスには、プロセスID (1から始まる)が与えられます。各プロセスでは、ネームスペース内のプロセスのみを参照できます。
-
ユーザーIDネームスペース
ユーザー・ネームスペースでは、ネームスペースとオペレーティング・システムとの間でユーザーIDがマップされます。
oracle
ユーザーは、システム全体のルート権限を必要とせずにネームスペースを作成できます。正しく構成されている場合、oracle
は実質的にこのネームスペース内のルート・ユーザーですが、この権限はそのネームスペースのみに限定されます。 -
マウント・ネームスペース
マウント・ネームスペースではマウント・ポイントが制御されます。子ネームスペース内のマウント・ポイントは、その親からは参照できません。ただし、親ネームスペース内のマウント操作はすべて、子から参照できます。
Linuxネームスペースでは、DbNestのためのオペレーティング・システム・インフラストラクチャが提供され、様々なネストを独立した仮想環境として機能させることができます。
親トピック: DbNestの仕組み
DbNestのプロパティ
ネストは、Oracle DatabaseですべてのCDB、PDBまたはアプリケーション・コンテナのために作成されるランタイム環境です。
各ネストは1つのコンテナのみに対応しています。ネスト階層では、コンテナ階層が正確にミラー化されます。CDBには1つ以上のPDBを含めることができるため、CDBの親ネストは1つ以上の子ネストを持つことができます。それぞれの子ネストは、そのネストに含めることができるPDBに対応しています。
データベース・ネスト・インスタンスは、CDBに関連付けられたすべてのネストとメタデータのコレクションです。たとえば、親ネストに1つのCDBが含まれており、そのPDBは、99個あり、それぞれが別々の子ネスト内にあるとします。この場合、このCDBのデータベース・ネスト・インスタンスには、100個のネストが含まれています。データベース・ネスト・インスタンスには、最大で4000個のネストを含めることができます。ホストにx個のCDBが含まれている場合、このホストでは4000x個(最大で8142個)のネストがサポートされます。
ネストには次のような特性があります。
-
オペレーティング・システム分離
ネストにより、アプリケーションを実行する仮想化環境を提供することで、プロセスID、ユーザー、マウントなどのオペレーティング・システム・リソースを分離します。その階層構造により、親ネストに、子ネストへのアクセスのための可視性がもたらされます。あるPDBに属するプロセスは、他のPDBまたはCDBルートからは参照できません。
-
ファイル・システム分離
他のネストから重要なエンティティや関連しないエンティティを参照できないようにするために、ネスト内での、ファイル・システム・エンティティの可視性を制御できます。たとえば、
hrpdb
において、ファイル・システム・エンティティである/lib
、$ORACLE_HOME/lib
、データ・ファイル・パス、トレース・ファイル・パスおよびETLステージング領域のみをそのネスト内で参照できるようにすることができます。シェル、デバイス・ファイルおよびマウント構成は、他のネスト内のPDBからはアクセスできません。Linuxネームスペースのピボット・ルートは、
chroot
と同等です。chrootは、現在実行されているプロセスが認識しているルート・ディレクトリを変更する操作です。バインド・マウントを使用すると、あるディレクトリの内容に別のディレクトリでアクセスできるようになります。これら2つのディレクトリは独立しています。バインド・マウントを使用すると、内容をコピーすることなく、複数のchroot
環境に同じファイルを配置できます。 -
リソース管理
CPUとメモリーなど、ネストのリソースを制御および監視できます。ネストに使用できるリソースは、親ネストから同じリソースを使用できるかどうかに基づいています。
-
セキュア・コンピューティング・モード(
seccomp
)DbNestでは、
seccomp
を使用して、不要または悪意のあるシステム・コールを除外します。seccomp
では、内部でBerkeley Packet Filters (BPF)が使用されます。
dbNestを有効にすると、CDBはリソース専用ネスト(または部分ネスト)として作成されます。CDB内の各PDBは、分離管理とリソース管理の両方を含む完全ネストとして作成されます。
親トピック: DbNestの仕組み
DbNestアーキテクチャ
dbNestのライブラリはOracle Databaseバイナリと統合され、単一の仮想環境が形成されます。
dbNestのインタフェース・レイヤーでは、Linuxネームスペース、リソース、ファイル・システムなどが管理されます。このインタフェース・レイヤーでは、PDBをネストにマップする表を保持するCDBとの相互作用が行われます。
次の図では、2つのPDBを含む1つのCDBについて、dbNestの基本アーキテクチャを示します。
この図は、1つのネスト階層を示しています。親ネストには、データベースのバックグラウンド・プロセスを含む、CDBルートが含まれています。記憶域にOracle Automatic Storage Management (Oracle ASM)が使用されている場合、記憶域セキュリティ・モデルはOracle ASMによって提供されます。
この親ネストには2つの子ネストがあり、一方にはPDB1とそのフォアグラウンド・プロセスが含まれ、もう一方にはPDB2とそのフォアグラウンド・プロセスが含まれています。各PDBでは、それ固有のネスト内にある関連するファイル・システム、トレース・ファイルおよびOracleホーム・ファイルにのみアクセスできます。各ネストでは、それ固有のCPU、メモリーおよびネットワーク・リソースが管理されます。
上の図では、CDBのネスト階層からは、オペレーティング・システムのプロセスとファイルにアクセスできません。たとえば、PDB1からは、Linuxシェル、システム・ファイルまたはアプリケーション・プロセスにアクセスできません。
親トピック: DbNestの仕組み
DbNestのユーザー・インタフェース
デフォルトでは、dbNestは無効になっています。有効化および構成するには、初期化パラメータを使用します。
- DbNest初期化パラメータ
初期化パラメータを使用することで、DbNestを手動で有効化および構成できます。 - DbNest構成ファイル
構成ファイルはCDB全体に適用され、CDB内にマウントされるパスがリストされます。これらのパスはデフォルト・パスの他に用意されます。
親トピック: DbNestの仕組み
DbNest初期化パラメータ
初期化パラメータを使用することで、DbNestを手動で有効化および構成できます。
ALTER SYSTEM
文を使用して次の初期化パラメータを設定するには、インスタンスがサーバー・パラメータ・ファイルで起動されている必要があり、ALTER SYSTEM
でSCOPE=SPFILE
を設定する必要があります。
表15-1 DbNest用の初期化パラメータ
パラメータ | 説明 |
---|---|
|
dbNestを有効または無効にします。CDBルートでこのパラメータを設定します。
このパラメータを設定するには、専用ブローカが構成されている必要があります。 |
|
オプションのファイル・システム構成ファイルの場所を指定します。CDBルートでこのパラメータを設定します。 |
親トピック: DbNestのユーザー・インタフェース
DbNest構成ファイル
この構成ファイルはCDB全体に適用され、CDB内にマウントされるパスをリストします。これらのパスはデフォルト・パスの他に用意されます。
構成ファイルの構文
ホワイトリスト登録は、ファイル・システム構成のデフォルトのオプションです。構成ファイルが指定されると、ディレクトリ・パスのリストがデフォルト・パスとともにネスト内にマウントされます。パスを指定する構文は、次のとおりです。
source [destination [options]]
最初の2つのプレースホルダは次のように定義されています。
-
source
マウントするソース・ディレクトリを指定します。ソースを
dev
として指定した場合、ファイル・システムでは、zero
、random
、urandom
、shm
というファイルのみを含む特別なディレクトリがマウントされます。ファイルshm
は、必要に応じてマウントできます。 -
destination
オプションの宛先ディレクトリを指定します。ディレクトリを指定しない場合は、データベースで、宛先としてsourceが使用されます。
ノート:
source
とdestination
の両方を環境変数にできます。 -
options
optionsには
destination
を設定する必要があります。オプションとしては次のいずれかを指定できます。-
ro
は、読取り専用マウントを指定します。 -
nosetuid
は、このディレクトリ内のファイルを介してsetuid
を実行しないということを指定します。 -
noexec
は、このディレクトリ内のバイナリを実行しないということを指定します。 -
optional
は、ソースを使用可能な場合にのみこのディレクトリをマウントするということを指定します。
-
ソースおよび宛先ディレクトリのトークン
ソースおよび宛先は、$TOKEN
または${TOKEN}
という形式のトークンを持つことができます。トークンは、環境変数として指定するか、dbNestライブラリ・コールのオプションを使用して指定できます。このライブラリ・コールでは、name[array], value[array]
という書式を使用します。ユーザー指定の名前/値のペアが優先されます。
DbNestでは、次のトークンがサポートされます。
-
$PDB
-
$PDBID
(V$PDBS.CON_ID
に表示されるコンテナID) -
$ORACLE_HOME
-
$ORACLE_BASE
-
$ORACLE_BASE_HOME
-
$ORACLE_BASE_CONFIG
構成ファイル内のディレクティブ
デフォルトでは、構成ファイルはホワイトリストです。DBNEST_NO_DEFAULT
が構成ファイルの最初の行である場合、データベースでは内部のデフォルト・パスが無視されます。次の構成ファイルは/home/oracle/MYCDB/$PDB
をホワイトリストに登録し、内部デフォルト・パスを無視します。
DBNEST_NO_DEFAULT
/home/oracle/MYCDB/$PDB
DBNEST_NO_FS_ROOT_MODE
が指定されている場合、この行の後のディレクトリがブロックされ、ブラックリストが作成されます。DbNestは、指定されたディレクトリが存在することを前提としています。ディレクトリ/usr/local/bin
および/bin/usr/bin
が存在するとします。次の構成ファイルは、これらのディレクトリをブラックリストに登録します。
DBNEST_NO_FS_ROOT_MODE
/usr/local/bin
/bin/usr/bin
ノート:
$ORACLE_HOME/bin
をブラックリストに配置しないでください。このディレクトリはoracle
バイナリの生成に必要なためです。
親トピック: DbNestのユーザー・インタフェース
Oracle Databaseでどのようにネストが管理されるか
DBNEST_ENABLE
初期化パラメータにNONE
以外の値が設定されている場合、Oracle Databaseはネストを自動的に作成、管理および削除します。これらの操作は、ユーザーに対して透過的です。
具体的には、Oracle Databaseでは次の操作が実行されます。
-
ネストの作成
インスタンス起動時に、Oracle DatabaseでCDBルートの親ネストが作成され、マウントされたPDBごとに1つの子ネストが作成されます。また、
CREATE PLUGGABLE DATABASE
コマンドを実行すると、作成されたPDBの子ネストの作成が自動的にトリガーされます。 -
ネストのオープン
PDBに初めてログインすると、CDBによってそのPDBの子ネストがオープンされます。CDBルートにログインしてPDBをオープンすると、このPDBの子ネストもオープンされます。
-
ネストの更新
CPU数などのリソースは、CDBの実行中に変化する可能性があります。そのような場合は、リソース・マネージャによって、ネスト構成が自動的に更新されます。
-
ネストのクローズ
PDB内またはCDBルートからの接続を使用することでPDBをクローズすると、CDBによってPDBの子ネストがクローズされます。バックグラウンド・プロセスによってネストがクローズされます。
-
ネストの削除
PDBが削除または切断されると、CDBによってPDBの子ネストが削除されます。データベース・インスタンスを停止すると、CDBの親ネストが削除されます。
親トピック: DbNestの仕組み
DbNestの有効化
dbNestを有効にすると、CDBネストはリソース専用ネストとして作成され、CDBの子PDBは完全ネストとして作成されます。
親トピック: DbNestの使用によるリソースの保護と分離
データベース・ネストのためのファイル・システムの分離の構成
ネスト内でマウントするかネストから除外するように、ファイル・システムを構成できます。
デフォルトでは、dbNestは必要なファイル・システムをマウントします。セキュリティ上の理由から、選択した一連のディレクトリまたはマウント・ポイントを他のネストから参照不可にすることや参照可能にすることができます。次の手順では、CDBとそのPDBが単一のネスト内にあることを前提としています。この手順を実行する前に、ネストがCDBまたはPDBに対して現在有効である必要があります。
親トピック: DbNestの使用によるリソースの保護と分離