WebLogic Security サービスの開発
監査とは、リクエストの操作とそれらのリクエストの結果に関する情報を、否認防止を目的として収集、格納、および配布するプロセスのことです。WebLogic Server では、監査はコンピュータのアクティビティの電子的な記録を提供するものです。
以下の節では、監査プロバイダの概念と機能、およびカスタム監査プロバイダの開発手順について説明します。
監査プロバイダを開発する前に、以下の概念を理解しておく必要があります。
監査チャネルは監査プロバイダのコンポーネントで、セキュリティ イベントを監査すべきかどうかを決定し、サービス品質 (QoS) ポリシーに基づいて監査情報を実際に記録します。
注意 : 監査チャネルの詳細については、「AuditChannel SSPI を実装する」を参照してください。
各タイプのセキュリティ プロバイダは、セキュリティ関連イベントの実行前または実行後に、それらのイベントに関する情報を記録するようコンフィグレーション済みの監査プロバイダに要求できます。たとえば、あるユーザが預金口座アプリケーションの (アクセス権を持たない) withdraw
メソッドにアクセスしようとした場合、認可プロバイダはこの操作を記録するよう要求できます。セキュリティ関連イベントは、監査プロバイダのコンフィグレーションで指定されている重大度レベルと一致するか、それを超えた場合にのみ記録されます。
カスタム セキュリティ プロバイダから監査イベントをポストする方法については、「カスタム セキュリティ プロバイダからのイベントの監査」を参照してください。
図 9-1 に、監査プロバイダが WebLogic Security フレームワークと他のタイプのセキュリティ プロバイダ (ここでは認証プロバイダ) と対話して、選択されたイベントを監査する仕組みを示します。図の後には、詳しい説明が続きます。
図 9-1 監査プロバイダ、WebLogic Security フレームワーク、および他のセキュリティ プロバイダ
監査プロバイダは、次のように WebLogic Security フレームワークと他のタイプのセキュリティ プロバイダと対話します。
注意 : 図 9-1 と以下の説明文で、「他のタイプのセキュリティ プロバイダ」とは WebLogic 認証プロバイダとカスタム認証プロバイダです。ただし、「カスタム セキュリティ プロバイダからのイベントの監査」で説明するように、これらはどのようなタイプのセキュリティ プロバイダでも構いません。
注意 : AuditEvent
クラスを作成するには、認証プロバイダの実行時クラスに AuditEvent
SSPI または AuditEvent
コンビニエンス インタフェースを実装し、さらにカスタム認証プロバイダがすでに実装している必要がある他のセキュリティ プロバイダ インタフェース (SSPI) を実装します。監査イベントと AuditEvent
SSPI/コンビニエンス インタフェースについては、「監査イベントを作成する」を参照してください。
注意 : これが信頼性のある呼び出しである理由は、監査サービスがすでにセキュリティ プロバイダの initialize
メソッドに「Provider」SSPI 実装の一部として追加されているからです。詳細については、「「Provider」SSPI の目的を理解する」を参照してください。
注意 : 認証プロバイダの AuditEvent
コンビニエンス インタフェースの実装によっては、監査リクエストがイベントに対して 1 回だけでなく、イベントの前後にも発生する場合があります。
AuditEvent
オブジェクトから取得したイベント タイプ、監査重大度、およびその他の情報 (監査コンテキストなど) を利用して監査レコードの内容を管理します。一般に、コンフィグレーション済みの監査プロバイダの 1 つだけがすべての監査条件を満たします。注意 : 監査重大度レベルと監査コンテキストの詳細については、それぞれ「監査重大度」と「監査コンテキスト」を参照してください。
AuditEvent
オブジェクト内に認証プロバイダによって指定された監査条件が満たされると、該当する監査プロバイダの実行時クラス (AuditChannel
SSPI 実装) はそれらの実装によって指定された方法で監査レコードを書き出します。注意 : AuditChannel
SSPI 実装によっては、監査条件が満たされたときに監査記録がファイルやデータベースなどの永続ストレージ メディアに書き込まれます。
WebLogic Server のデフォルト (つまりアクティブな) セキュリティ レルムには WebLogic 監査プロバイダが含まれています。WebLogic 監査プロバイダは、WebLogic Security フレームワークで内部的に決定された、複数のセキュリティ リクエストの情報を記録します。また、WebLogic 監査プロバイダはこれらのセキュリティ リクエストに関連付けられているイベント データとリクエストの結果も記録します。
WebLogic 監査プロバイダは、その writeEvent
メソッドで、コンフィグレーション済みの監査重大度レベルとそのメソッドに渡された AuditEvent
オブジェクトに格納されている監査重大度に基づいて監査上の決定を行います (AuditEvent
オブジェクトについては「監査イベントを作成する」を参照)。
注意 : WebLogic 監査プロバイダのコンフィグレーション済み監査重大度レベルは、WebLogic Server Administration Console で変更できます。詳細については、『WebLogic Security の管理』の「WebLogic 監査プロバイダのコンフィグレーション」を参照してください。
一致が存在する場合、WebLogic 監査プロバイダは監査情報を DefaultAuditRecorder.log
ファイルに書き込みます。このファイルは、bea_home\user_projects\domains\
mydomain\
myserver ディレクトリに存在します (bea_home は 1 台のマシンにインストールされているすべての BEA Products の中央サポート ディレクトリを表し、mydomain は作成するドメインの名前を表し、myserver は作成するサーバの名前を表します)。コード リスト 9-1 DefaultAuditRecorder.log
ファイルの一部を示します。
コード リスト 9-1 DefaultAuditRecorder.log ファイル : 出力例
When Authentication suceeds. [SUCCESS]
#### Audit Record Begin <Feb 23, 2005 11:42:17 AM> <Severity=SUCCESS>
<<<Event Type = Authentication Audit Event><TestUser><AUTHENTICATE>>> Audit
Record End ####
When Authentication fails. [FAILURE]
#### Audit Record Begin <Feb 23, 2005 11:42:01 AM> <Severity=FAILURE
>
<<<Event Type = Authentication Audit Event><TestUser><AUTHENTICATE>>> Audit
Record End ####When Operations are invoked.[SUCCESS]
When a user account is unlocked. [SUCCESS]
#### Audit Record Begin <Feb 23, 2005 11:42:17 AM> <Severity=SUCCESS>
<<<Event Type = Authentication Audit Event><TestUser><USERUNLOCKED>>> Audit
Record End ####
When an Authorization request succeeds. [SUCCESS]
#### Audit Record Begin <Feb 23, 2005 11:42:17 AM> <Severity=SUCCESS>
<<<Event Type = Authorization Audit Event ><Subject: 1
Principal = class weblogic.security.principal.WLSUserImpl("TestUser")
><ONCE><<jndi>><type=<jndi>, application=, path={weblogic}, action=lookup>>>
Audit Record End ####
コード リスト 9-1 には、特にロール マネージャ (セキュリティ ロールを扱う WebLogic Security フレームワーク コンポーネント) による監査イベント記録が示されています。この記録から、権限のある管理者が証明書サーブレット内の保護されたメソッドにアクセスしたことがわかります。
WebLogic Server インスタンスが起動するたびに、新しい DefaultAuditRecorder.log
ファイルが作成されます (古い DefaultAuditRecorder.log
ファイルの名前は DefaultAuditRecorder.log.old
に変更されます)。
次の Java 起動オプションを使用すれば、コマンドラインで DefaultAuditRecorder.log
の新しいディレクトリを指定することができます。
-Dweblogic.security.audit.auditLogDir=c:\foo
新しいファイルの配置場所は、c:\foo\
yourserver
\DefaultAuditRecorder.log
になります。
詳細については、「weblogic.Server コマンドライン リファレンス」の「セキュリティ」を参照してください。
監査情報を WebLogic Security フレームワークで指定された以外のファイル、または DefaultAuditRecorder.log
以外の出力リポジトリ (異なる名前/場所のシンプル ファイルまたは既存のデータベース) に書き込む場合、カスタム監査プロバイダを開発する必要があります。
WebLogic 監査プロバイダが開発者のニーズを満たさない場合、次の手順でカスタム監査プロバイダを開発することができます。
この情報を理解し、設計に関する判断を下したら、次の手順でカスタム監査プロバイダの実行時クラスを作成します。
カスタム監査プロバイダの実行時クラスの作成例については、「例 : サンプル監査プロバイダの実行時クラスの作成」を参照してください。
AuditProvider
SSPI を実装するには、「「Provider」SSPI の目的を理解する」で説明されているメソッドと以下のメソッドの実装を提供する必要があります。
AuditProvider
SSPI と getAuditChannel
メソッドの詳細については、「WebLogic Server 8.1 API リファレンス Javadoc」を参照してください。
AuditChannel
SSPI を実装する際には、以下のメソッドの実装を提供する必要があります。
writeEvent
メソッドは、渡された AuditEvent
オブジェクト内に指定されている情報に基づいて監査記録を書き込みます。AuditEvent
オブジェクトの詳細については、「監査イベントを作成する」を参照してください。
AuditChannel
SSPI と writeEvent
メソッドの詳細については、「WebLogic Server 8.1 API リファレンス Javadoc」を参照してください。
コード リスト 9-2 は、サンプル監査プロバイダの実行時クラスである SampleAuditProviderImpl.java
クラスを示しています。実行時クラスには以下の実装が含まれています。
initialize
、getDescription
、および shutdown
という SecurityProvider
インタフェースから継承した 3 つのメソッド (「「Provider」SSPI の目的を理解する」を参照)AuditProvider
SSPI から継承した getAuditChannel
メソッド (「AuditProvider SSPI を実装する」を参照)AuditChannel
SSPI の writeEvent
メソッド (「AuditChannel SSPI を実装する」を参照)注意 : コード リスト 9-2 の太字のコードは、クラス宣言とメソッド シグネチャを示しています。
コード リスト 9-2 SampleAuditProviderImpl.java
package examples.security.providers.audit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import weblogic.management.security.ProviderMBean;
import weblogic.security.spi.AuditChannel;
import weblogic.security.spi.AuditEvent;
import weblogic.security.spi.AuditProvider;
import weblogic.security.spi.SecurityServices;
public final class SampleAuditProviderImpl implements AuditChannel, AuditProvider
{
private String description;
private PrintStream log;
public void initialize(ProviderMBean mbean, SecurityServices services)
{
System.out.println("SampleAuditProviderImpl.initialize");
description = mbean.getDescription() + "\n" + mbean.getVersion();
SampleAuditorMBean myMBean = (SampleAuditorMBean)mbean;
File file = new File(myMBean.getLogFileName());
System.out.println("\tlogging to " + file.getAbsolutePath());
try {
log = new PrintStream(new FileOutputStream(file), true);
} catch (IOException e) {
throw new RuntimeException(e.toString());
}
}
public String getDescription()
{
return description;
}
public void shutdown()
{
System.out.println("SampleAuditProviderImpl.shutdown");
log.close();
}
public AuditChannel getAuditChannel()
{
return this;
}
public void writeEvent(AuditEvent event)
{
// イベントの toString メソッドを使用して
// サンプル監査プロバイダのログ ファイルにイベントを書き込む
log.println(event);
}
}
カスタム セキュリティ プロバイダの MBean タイプを生成する前に、以下の作業が必要です。
この情報を理解し、設計に関する判断を下したら、次の手順でカスタム監査プロバイダの MBean タイプを作成します。
注意 : これらの手順の実行方法は、いくつかのサンプル セキュリティ プロバイダ (dev2dev Web サイトの「Code Samples: WebLogic Server」で入手可能) に示されています。
この節で説明する手順はすべて、Windows 環境での作業を想定しています。
MBean 定義ファイル (MDF) を作成するには、次の手順に従います。
注意 : MDF 要素の構文についての完全なリファレンスは、「MBean 定義ファイル (MDF) 要素の構文」に収められています。
MDF を作成したら、WebLogic MBeanMaker を使用してそれを実行できます。WebLogic MBeanMaker は現在のところコマンドライン ユーティリティで、入力として MDF を受け取り、MBean インタフェース、MBean 実装、関連する MBean 情報ファイルなどの中間 Java ファイルをいくつか出力します。これらの中間ファイルが合わさって、カスタム セキュリティ プロバイダの MBean タイプになります。
MBean タイプの生成手順は、カスタム監査プロバイダの設計に応じて異なります。必要な設計に合わせて適切な手順を実行してください。
カスタム監査プロバイダの MDF にカスタム操作を含めない場合、次の手順に従います。
WL_HOME\server\lib\weblogic.jar
WL_HOME\server\lib\mbeantypes\wlManagement.jar
JAVA_HOME\..\lib\tools.jar
-Dfiles
フラグで指定する filedirjava -DMDF=
xmlfile -Dfiles=
filesdir -DcreateStubs=true weblogic.management.commo.WebLogicMBeanMaker
ここで、-DMDF
フラグは WebLogic MBeanMaker が MDF をコードに変換すべきであることを示し、xmlFile は MDF (XML MBean の記述ファイル)、filesdir は WebLogic MBeanMaker で作成された MBean タイプの中間ファイルが格納される場所を示します。
-DMDF
フラグで指定された xml ファイルと同じディレクトリに WL_HOME\server\lib\commo.dtd
をコピーします。
xmlfile が入力されるたびに、新しい出力ファイル群が生成されます。
-DcreateStubs=true
フラグを使用するたびに、既存の MBean 実装ファイルがすべて上書きされます。
注意 : WebLogic MBeanMaker では MDF を一度に 1 つ処理します。したがって、MDF (つまり監査プロバイダ) が複数ある場合には、このプロセスを繰り返す必要があります。
カスタム監査プロバイダの MDF にカスタム操作を含める場合、質問に答えながら手順を進めてください。
WL_HOME\server\lib\weblogic.jar
WL_HOME\server\lib\mbeantypes\wlManagement.jar
JAVA_HOME\..\lib\tools.jar
-Dfiles
フラグで指定する filedirjava -DMDF=
xmlfile -Dfiles=
filesdir -DcreateStubs=true weblogic.management.commo.WebLogicMBeanMaker
ここで、-DMDF
フラグは WebLogic MBeanMaker が MDF をコードに変換すべきであることを示し、xmlFile は MDF (XML MBean の記述ファイル)、filesdir は WebLogic MBeanMaker で作成された MBean タイプの中間ファイルが格納される場所を示します。
-DMDF
フラグで指定された xml ファイルと同じディレクトリに WL_HOME\server\lib\commo.dtd
をコピーします。
xmlfile が入力されるたびに、新しい出力ファイル群が生成されます。
-DcreateStubs=true
フラグを使用するたびに、既存の MBean 実装ファイルがすべて上書きされます。
注意 : WebLogic MBeanMaker では MDF を一度に 1 つ処理します。したがって、MDF (つまり監査プロバイダ) が複数ある場合には、このプロセスを繰り返す必要があります。
WL_HOME\server\lib\weblogic.jar
WL_HOME\server\lib\mbeantypes\wlManagement.jar
JAVA_HOME\..\lib\tools.jar
-Dfiles
フラグで指定する filedirjava -DMDF=
xmlfile -Dfiles=
filesdir -DcreateStubs=true weblogic.management.commo.WebLogicMBeanMaker
ここで、-DMDF
フラグは WebLogic MBeanMaker が MDF をコードに変換すべきであることを示し、xmlFile は MDF (XML MBean の記述ファイル)、filesdir は WebLogic MBeanMaker で作成された MBean タイプの中間ファイルが格納される場所を示します。
-DMDF
フラグで指定された xml ファイルと同じディレクトリに WL_HOME\server\lib\commo.dtd
をコピーします。
xmlfile が入力されるたびに、新しい出力ファイル群が生成されます。
-DcreateStubs=true
フラグを使用するたびに、既存の MBean 実装ファイルがすべて上書きされます。
注意 : WebLogic MBeanMaker では MDF を一度に 1 つ処理します。したがって、MDF (つまり監査プロバイダ) が複数ある場合には、このプロセスを繰り返す必要があります。
MBean インタフェース ファイルとは、実行時クラスまたは MBean 実装がコンフィグレーション データを取得するために使用する MBean のクライアントサイド API です。「「Provider」SSPI の目的を理解する」で説明されているように、これは initialize メソッドで使用するのが一般的です。
WebLogic MBeanMaker では、作成済みの MDF から MBean タイプを生成するので、生成される MBean インタフェース ファイルの名前は、その MDF 名の後に「MBean」というテキストが付いたものになります。たとえば、WebLogic MBeanMaker で SampleAuditor
MDF を実行すると、SampleAuditorMBean.java
という MBean インタフェース ファイルが生成されます。
WebLogic MBeanMaker で MDF を実行して中間ファイルを作成し、MBean 実装ファイルを手作業で編集してその中にメソッドの内容を記述したら、カスタム監査プロバイダの MBean ファイルと実行時クラスを MBean JAR ファイル (MJF) にパッケージ化する必要があります。このプロセスも、WebLogic MBeanMaker によって自動化されます。
カスタム監査プロバイダの MJF を作成するには、次の手順に従います。
WL_HOME\server\lib\weblogic.jar
WL_HOME\server\lib\mbeantypes\wlManagement.jar
JAVA_HOME\..\lib\tools.jar
-Dfiles
フラグで指定する filedirjava -DMJF=
jarfile -Dfiles=
filesdir weblogic.management.commo.WebLogicMBeanMaker
ここで、-DMJF
フラグは WebLogic MBeanMaker が新しい MBean タイプを含む JAR ファイルを構築すべきであることを示し、jarfile は MJF の名前、<filesdir>
は WebLogic MBeanMaker で MJF に JAR 化する対象ファイルが存在する場所を示します。
この時点でコンパイルが行われるので、エラーが発生するおそれがあります。jarfile が指定されていて、エラーが発生しなかった場合には、指定された名前の MJF が作成されます。
注意 : 既存の MJF を更新する場合は、MJF をいったん削除してから再生成します。 WebLogic MBeanMaker にも -DIncludeSource
オプションがあり、それを指定すると、生成される MJF にソース ファイルを含めるかどうかを制御することができます。ソース ファイルには、生成されたソースと MDF そのものがあります。デフォルトは false
です。このオプションは、-DMJF
を使用しない場合には無視されます。
生成された MJF は、自らの WebLogic Server 環境にインストールすることも、顧客に配布してそれぞれの WebLogic Server 環境にインストールしてもらうこともできます。
MBean タイプを WebLogic Server 環境にインストールするには、MJF を WebLogic Server の WL_HOME\server\lib\mbeantypes
ディレクトリにコピーします。ここで、WL_HOME は WebLogic Server の最上位のインストール ディレクトリです。このインストール コマンドによって、カスタム監査プロバイダが「デプロイ」されます。つまり、カスタム監査プロバイダを WebLogic Server Administration Console から管理できるようになります。
注意 : MBean タイプをインストールするデフォルトのディレクトリは、WL_HOME\server\lib\mbeantypes
です。ただし、サーバを起動するときに -Dweblogic.alternateTypesDirectory=
<dir> コマンドライン フラグを使用すれば、WebLogic Server が追加ディレクトリで MBean タイプを検索します。<dir> は、ディレクトリ名のカンマ区切りのリストです。このフラグを使用する場合、WebLogic Server は常に最初に WL_HOME\server\lib\mbeantypes
から MBean タイプをロードします。たとえば、-Dweblogic.alternateTypesDirectory = dirX,dirY
の場合、WebLogic Server は最初に WL_HOME\server\lib\mbeantypes
から MBean タイプをロードしてから、dirX
および dirY
にある有効なアーカイブをロードします。WebLogic Server に追加ディレクトリで MBean タイプを検索するように指示する際に Java セキュリティ マネージャを使用している場合には、weblogic.policy
ファイルを更新して、MBean タイプ (その結果としてカスタム セキュリティ プロバイダ) に対する適切なパーミッションを付与することも必要になります。詳細については、『WebLogic Security プログラマーズ ガイド』の「Java セキュリティ マネージャを使用しての WebLogic リソースの保護」を参照してください。
カスタム監査プロバイダをコンフィグレーションすることによって (「Administration Console によるカスタム監査プロバイダのコンフィグレーション」を参照) MBean タイプのインスタンスを作成して、GUI、他の Java コード、または API からそれらの MBean インスタンスを使用することができます。たとえば、WebLogic Server Administration Console を使用して、属性を取得/設定したり操作を呼び出したりすることもできますし、他の Java オブジェクトを開発して、そのオブジェクトで MBean をインスタンス化し、それらの MBean から提供される情報に自動的に応答させることもできます。なお、これらの MBean インスタンスをバックアップしておくことをお勧めします。詳細については、『WebLogic Server のコンフィグレーションと管理』の「障害が発生したサーバの回復」の「セキュリティ データのバックアップ」を参照してください。
カスタム監査プロバイダをコンフィグレーションするということは、監査サービスを必要とするセキュリティ プロバイダがアクセス可能なセキュリティ レルムにカスタム監査プロバイダを追加するということです。
カスタム セキュリティ プロバイダのコンフィグレーションは管理タスクですが、カスタム セキュリティ プロバイダの開発者が行うこともできます。この節では、カスタム監査プロバイダのコンフィグレーション担当者向けの重要な情報を取り上げます。
注意 : WebLogic Server Administration Console を使用してカスタム監査プロバイダをコンフィグレーションする手順は、『WebLogic Security の管理』の「カスタム セキュリティ プロバイダのコンフィグレーション」で説明されています。