この章では、アプリケーション(監査クライアントとも呼ばれます)がどのようにOracle Fusion Middleware監査フレームワークを使用して監査機能を提供するかを説明します。11gリリース1(11.1.1.6)では、監査サービスが導入されています。このサービスは、アプリケーションをプログラム的に監査フレームワークに統合することにより、Oracleコンポーネントで使用可能な機能を使用して、監査イベントをログに記録し、コンプライアンス・レポートを生成することを可能にします。
監査サービスを使用して、アプリケーションは次のことを行えます:
カスタム表を使用せずにイベント定義を作成する
アプリケーションのデプロイ時に監査サービスに登録する
アプリケーションの再デプロイ時にイベント定義を変更する
実行時に監査構成設定を変更する
この章の内容は次のとおりです。
図28-1に示すように、Oracle WebLogic Server上で動作するJava EEアプリケーションは、シームレスに監査フレームワークに統合でき、それを活用できます。
アプリケーションのデプロイメント時または監査サービスの起動時に、Java EEアプリケーションまたはOracleコンポーネントなどのクライアントが監査サービスに登録されます。登録サービスは、component_events.xmlおよび関連ファイルに含まれる最新の監査定義でメタデータ・ストアを更新します。
この章の残りの項では、メタデータ・モデルの詳細、およびアプリケーションを監査フローに統合することにより監査イベントを記録して監査レポートを作成する方法について説明します。
監査フレームワークは、アプリケーションがその監査アーティファクトを柔軟に指定することを可能にするメタデータ・モデルをサポートしています。アプリケーションは属性グループ、カテゴリおよびイベントを動的に定義できます。
属性グループは監査属性の広範な分類を提供し、次の3つのタイプから構成されます。
共通属性グループには、コンポーネント・タイプ、システムIPアドレス、ホスト名など、すべてのアプリケーションに共通のシステム属性が含まれます。
IAU_COMMONデータベース表には、このグループ内の属性が含まれます。
汎用属性グループには、認証やユーザー・プロビジョニングなどの監査アプリケーション領域に対する属性が含まれます。
カスタム属性グループには、特定のニーズに応じてアプリケーションで定義された属性が含まれます。カスタム・グループの属性は、そのコンポーネントのスコープに限定されます。
汎用属性グループは、ネームスペース、バージョン番号および1つ以上の属性で定義されます。この例は、ネームスペースauthorizationおよびバージョン1.0の属性グループを定義します。
<AuditConfig xmlns="http://xmlns.oracle.com/ias/audit/audit-2.0.xsd" >
<Attributes ns="authorization" version="1.0">
<Attribute displayName="CodeSource" maxLength="2048" name="CodeSource" type="string"/>
<Attribute displayName="Principals" maxLength="1024" name="Principals" type="string"/>
<Attribute displayName="InitiatorGUID" maxLength="1024" name="InitiatorGUID" type="string"/>
<Attribute displayName="Subject" maxLength="1024" name="Subject" type="string">
<HelpText>Used for subject in authorization</HelpText>
</Attribute>
</Attributes>
……
アプリケーションは、次のようにCodeSource属性を参照できます。
<Attribute name="CodeSource" ns="authorization" version="1.0" />
各汎用属性グループは、専用のデータベース表に格納されます。ネーミング規則は次のとおりです。
表名はIAU_GENERIC_ATTRIBUTE_GROUP_NAME
表の列はIAU_ATTRIBUTE_NAME
たとえば、属性グループauthorizationは、次の列を含むデータベース表IAU_AUTHORIZATIONに格納されています。
文字列であるIAU_CODESOURCE
文字列であるIAU_PRINCIPALS
文字列であるIAU_INITIATORGUID
カスタム属性グループは、ネームスペース、バージョン番号および1つ以上の属性で定義されます。
属性は次のものから構成されます。
属性名
データ型
属性/データベース列マッピング順序(属性が、カスタム属性表内の特定のデータ型のデータベース列にマップされる順序を指定します)
ヘルプ・テキスト(オプション)
最大長
表示名
この例は、ネームスペースaccountingおよびバージョン1.0の属性グループAccountingを定義します。
<Attributes ns="accounting" version="1.0">
<Attribute name="TransactionType" displayName="Transaction Type" type="string" order="1"/>
<Attribute name="AccountNumber" displayName="Account Number" type="int" order="2">
<HelpText>Account number.</HelpText>
</Attribute>
……
</Attributes>
カスタム属性グループおよび属性は、IAU_CUSTOM表に格納されます。
監査イベント・カテゴリには、機能領域内の関連イベントが含まれます。たとえば、セッション・カテゴリには、ユーザー・セッションのライフ・サイクルで重要なログインおよびログアウト・イベントが含まれます。
イベント・カテゴリ自体は属性を定義しません。かわりに、コンポーネント内の属性およびシステム属性グループを参照します。
イベント・カテゴリには次の2つのタイプがあります。
システム・カテゴリ
コンポーネントとアプリケーション・カテゴリ
システム・カテゴリは、共通および汎用属性グループを参照し、監査イベントを含みます。システム・カテゴリは、コンポーネント・イベント・カテゴリおよびイベントのベース・セットです。アプリケーションはそれらを直接参照し、監査イベントを記録して、フィルタ・プリセット定義を設定できます。
次の例は、メタデータ・モデルのいくつかの要素を示しています。
共通属性グループ
汎用属性グループidentityとauthorization
共通属性AuthenticationMethodを参照する属性を持つシステム・カテゴリUserSession
UserLoginおよびUserLogoutなどの監査イベント
<SystemComponent major="1" minor="0">
+<Attributes ns="common" version ="1.0"></Attributes>
+<Attributes ns="identity" version ="1.0"></Attributes>
+<Attributes ns="authorization" version ="1.0"></Attributes>
-<Events>
-<Category name="UserSession" displayName="User Sessions">
-<Attributes>
<Attribute name="AuthenticationMethod" ns="common" version ="1.0" />
</Attributes>
-<HelpText></HelpText>
-<Event name="UserLogin" displayName="User Logins" shortName="uLogin"></Event>
-<Event name="UserLogout" displayName="User Logouts" shortName="uLogout"
xdasName="terminateSession"></Event>
-<Event name="Authentication" displayName="Authentication"></Event>
-<Event name="InternalLogin" displayName="Internal Login" shortName="iLogin"
xdasName="CreateSession"></Event>
-<Event name="InternalLogout" displayName="Internal Logout" shortName="iLogout"
xdasName="terminateSession"></Event>
-<Event name="QuerySession" displayName="Query Session" shortName="qSession"></Event>
-<Event name="ModifySession" displayName="Modify Session" shortName="mSession"></Event>
</Category>
+<Category displayName="Authorization" name="Authorization"></Category>
+<Category displayName="ServiceManagement" name="ServiceManagement"></Category>
</Events>
</SystemComponent>
コンポーネントまたはアプリケーションは、システム・カテゴリを拡張するか、新しいコンポーネント・イベント・カテゴリを定義できます。この例では、トランザクション・カテゴリはaccounting属性グループの属性AccountNumber、DateおよびAmountを参照し、イベントpurchaseおよびdepositを含みます。
<Category displayName="Transaction" name="Transaction">
<Attributes>
<Attribute name="AccountNumber" ns="accounting" version="1.0"/>
<Attribute name="Date" ns="accounting" version="1.0" />
<Attribute name="Amount" ns="accounting" version="1.0" />
</Attributes>
<Event displayName="purchase" name="purchase"/>
<Event displayName="deposit" name="deposit">
<HelpText>depositing funds.</HelpText>
</Event>
……
</Category>
システム・カテゴリを拡張するには、アプリケーション監査定義内にカテゴリ参照を作成します。システム・カテゴリに含まれるシステム・イベントをリストし、そこに新しい属性参照およびイベントを追加します。
この例では、新しいカテゴリが、新しい属性参照ServiceTimeと新しいイベントrestartServiceで、システム・カテゴリServiceManagementを参照します。
<CategoryRef name="ServiceManagement" componentType="SystemComponent">
<Attributes>
<Attribute name="ServiceTime" ns="accounting" version="1.0" />
</Attributes>
<EventRef name="startService"/>
<EventRef name="stopService"/>
<Event displayName="restartService" name="restartService">
<HelpText>restart service</HelpText>
</Event>
</CategoryRef>
監査メタデータ・ストアはメタデータ・モデルに対するリポジトリを提供し、コンポーネント監査定義、NLS翻訳エントリ、実行時ポリシーおよびデータベース・マッピング表を含みます。
|
注意: メタデータ・ストアは監査データ・ストアとは別のものです。 |
監査メタデータ・ストアは、次のような重要な監査機能をサポートします。
監査登録サービスは、イベント定義エントリを作成、変更および削除します。
監査実行時サービスは、イベント定義および実行時ポリシーを取得します。
監査データ・ローダーは、監査データを格納するための属性データベース・マッピングを作成します。
監査MBeanコマンドは、コンポーネント監査定義および実行時ポリシーを検索して変更します。
監査フレームワークは、次の3つのタイプのメタデータ・ストアをサポートしています。
XMLファイルベース
データベース
LDAP
新しいアプリケーションが監査サービスに登録されると、次の監査アーティファクトが監査ストアに格納されます。
カスタム属性グループ、カテゴリ、イベントおよびフィルタ・プリセット定義を含む監査イベント定義
ローカライズされた翻訳エントリ
カスタム属性/データベース列マッピング表
実行時監査ポリシー
アプリケーションを監査フレームワークに統合するには、次の手順を実行します。
監査定義ファイルcomponent_events.xmlを作成します。
アプリケーションのEARファイルにcomponent_events.xmlファイルをパッケージ化します。
監査イベントを記録できるように、監査イベントAPIをアプリケーション・コードに追加します。
レポート用にOracle Business Intelligence Publisherを統合します。
監査イベント定義を更新し、必要に応じて再デプロイします。
次の各項では、これらのタスクについて詳しく説明します。
このタスクでは、次のファイルを作成します。
component_events.xml定義ファイル
翻訳ファイル
component_events.xmlファイル
component_events.xmlファイルには次の要素が含まれます。
基本プロパティとメジャーおよびマイナー・バージョン
コンポーネント・タイプ(アプリケーションが監査サービスに登録し、実行時監査インスタンスを取得するために使用するプロパティ)
アプリケーションのメジャーおよびマイナー・バージョン
1つのカスタム属性グループ(含まれない場合もある)
属性参照およびイベントを含むイベント・カテゴリ
コンポーネント・レベル・フィルタ定義
次を含む実行時ポリシー
filterPreset: 監査フィルタ・レベルを指定します。
Custom FilterPresetDefinition: カスタム・フィルタ・プリセット定義を指定します。
specialUsers: 常に監査するユーザーを指定します。
maxBusstopDirSize
maxBusstopFileSize
実行時ポリシーの詳細は、第13.3項を参照してください。
component_events.xmlファイルの例を示します。
<?xml version="1.0"?>
<AuditConfig xmlns="http://xmlns.oracle.com/ias/audit/audit-2.0.xsd">
<AuditComponent componentType="ApplicationAudit" major="1" minor="0">
<Attributes ns="accounting" version="1.0">
<Attribute name="TransactionType" displayName="Transaction Type" type="string" order="1">
<HelpText>Transaction type.</HelpText>
</Attribute>
<Attribute name="AccountNumber" displayName="Account Number" type="int" order="2">
<HelpText>Account number.</HelpText>
</Attribute>
<Attribute name="Date" displayName="Date" type="dateTime" order="3"/>
<Attribute name="Amount" displayName="Amount" type="float" order="4">
<HelpText>Transaction amount.</HelpText>
</Attribute>
<Attribute name="Status" displayName="Account Status" type="string" order="5">
<HelpText>Account status.</HelpText>
</Attribute>
</Attributes>
<Events>
<Category displayName="Transaction" name="Transaction">
<Attributes>
<Attribute name="AccountNumber" ns="accounting" version="1.0" />
<Attribute name="Date" ns="accounting" version="1.0" />
<Attribute name="Amount" ns="accounting" version="1.0" />
</Attributes>
<Event displayName="purchase" name="purchase">
<HelpText>direct purchase.</HelpText>
</Event>
<Event displayName="deposit" name="deposit">
<HelpText>depositing funds.</HelpText>
</Event>
<Event displayName="withdrawing" name="withdrawing">
<HelpText>withdrawing funds.</HelpText>
</Event>
<Event displayName="payment" name="payment">
<HelpText>paying bills.</HelpText>
</Event>
</Category>
<Category displayName="Account" name="Account">
<Attributes>
<Attribute name="AccountNumber" ns="accounting" version="1.0" />
<Attribute name="Status" ns="accounting" version="1.0" />
</Attributes>
<Event displayName="open" name="open">
<HelpText>Open a new account.</HelpText>
</Event>
<Event displayName="close" name="close">
<HelpText>Close an account.</HelpText>
</Event>
<Event displayName="suspend" name="suspend">
<HelpText>Suspend an account.</HelpText>
</Event>
</Category>
</Events>
<FilterPresetDefinitions>
<FilterPresetDefinition displayName="Low" helpText="" name="Low">
<FilterCategory enabled="partial" name="Transaction">deposit.SUCCESSESONLY(HostId -eq "NorthEast"),withdrawing</FilterCategory>
<FilterCategory enabled="partial" name="Account">open.SUCCESSESONLY,close.FAILURESONLY</FilterCategory>
</FilterPresetDefinition>
<FilterPresetDefinition displayName="Medium" helpText="" name="Medium">
<FilterCategory enabled="partial" name="Transaction">deposit,withdrawing</FilterCategory>
<FilterCategory enabled="partial" name="Account">open,close</FilterCategory>
</FilterPresetDefinition>
<FilterPresetDefinition displayName="High" helpText="" name="High">
<FilterCategory enabled="partial" name="Transaction">deposit,withdrawing,payment</FilterCategory>
<FilterCategory enabled="true" name="Account"/>
</FilterPresetDefinition>
</FilterPresetDefinitions>
<Policy filterPreset="Low">
<CustomFilters>
<FilterCategory enabled="partial" name="Transaction">purchase</FilterCategory>
</CustomFilters>
</Policy>
</AuditComponent>
</AuditConfig>
翻訳ファイル
アプリケーションに必要な翻訳ファイルを作成します。
翻訳ファイルは、様々な言語で監査定義を表示するために使用されます。ファイルはXLIFF形式で生成します。登録時に、この情報はコンポーネント監査イベント定義とともに監査メタデータ・ストアに格納されます。
監査定義ファイルの作成時には、アプリケーションに対する監査メタデータの作成時に登録サービスが使用する特定のルールについて理解する必要があります。このメタデータは、監査定義の様々なバージョンを管理し、監査データをロードしてレポートを生成するために使用されます。
各監査定義には、整数のメジャーおよびマイナー・バージョン番号が必要です(例: major = 1 minor=3)。監査イベント定義を変更した場合は、マイナーまたはメジャー番号あるいはその両方を変更することによりバージョンIDを変更する必要があります。
監査登録サービスは、バージョン番号を使用してイベント定義の互換性およびバージョン間の属性マッピングを決定します。
|
注意: これらのバージョン番号はOracle Fusion Middlewareのバージョン番号とは関係ありません。 |
Oracleコンポーネントのバージョニング
Oracle Virtual DirectoryなどのOracleコンポーネントの登録時、監査登録サービスは、これが初めての登録であるかアップグレードであるかを確認します。
新規登録では、サービスは次の操作を実行します。
コンポーネントの監査および翻訳情報を取得します。
定義を解析して検証し、監査メタデータ・ストアに格納します。
属性/列マッピング表を生成し、監査メタデータ・ストアに保存します。
アップグレードについては、メタデータ・ストア内のコンポーネントの現在のメジャーおよびマイナー番号が新しいメジャーおよびマイナー番号と比較され、アップグレードを続行するかどうかを決定します。
JavaEEアプリケーションのバージョニング
アプリケーションの監査定義の変更時には、メジャーおよびマイナー番号を次のように設定することをお薦めします。
マイナー・バージョン番号は、バージョン互換の変更(新しい監査定義から生成される属性データベース・マッピング表が、以前の属性データベース・マッピング表で作成された監査データでもそのまま使用できるような監査定義の変更)を加える場合にのみ増やします。
たとえば、現在の定義バージョンがmajor=2およびminor=1であるとします。属性データベース・マッピング表に影響しない新規イベントの追加時には、マイナー・バージョンを2に変更し(minor=2)、メジャー番号はそのままにします(major=2)。
新しいマッピング表が以前の表と互換性がないようなバージョン変更を加える場合には、メジャー・バージョン番号を増やします。
新しいコンポーネントまたはアプリケーションの登録時、登録サービスはコンポーネントのカスタム属性から属性/データベース列マッピング表を作成し、この表を監査メタデータ・ストアに保存します。
属性/データベース列マッピング表は、アプリケーションの属性定義とデータベース列間で一意なマッピングを行うために必要です。監査ローダーはマッピング表を使用してデータを監査ストアにロードします。表はカスタム・データベース表IAU_CUSTOMから監査レポートを生成するためにも使用されます。
カスタム属性/データベース列マッピングには、属性名、データベース列名およびデータ型のプロパティがあります。
各カスタム属性定義には、マッピング順序番号が含まれている必要があります。同じデータ型の属性は、属性マッピング順序に従ってデータベース列にマップされます。たとえば、次のような定義ファイルがあるとします。
<Attributes ns="accounting" version="1.1"> <Attribute name="TransactionType" type="string" maxLength="0" displayName="Transaction Type" order="1"/> <Attribute name="AccountNumber" type="int" displayName="Account Number" order="2"> <Attribute name="Date" type="dateTime" displayName="Date" order="3"/> <Attribute name="Amount" type="float" displayName="Amount" order="4"/> <Attribute name="Status" type="string" maxLength="0" displayName="Account Status" order="5"/> <Attribute name="Balance" type="float" displayName="Account Balance" order="6"/> </Attributes>
マッピングは次のようになります。
<AttributesMapping ns="accounting" tableName="IAU_CUSTOM" version="1.1"> <AttributeColumn attribute="TransactionType" column="IAU_STRING_001" datatype="string"/> <AttributeColumn attribute="AccountNumber" column="IAU_INT_001" datatype="int"/> <AttributeColumn attribute="Date" column="IAU_DATETIME_001" datatype="dateTime"/> <AttributeColumn attribute="Amount" column="IAU_FLOAT_001" datatype="float"/> <AttributeColumn attribute="Status" column="IAU_STRING_002" datatype="string"/> <AttributeColumn attribute="Balance" column="IAU_FLOAT_002" datatype="float"/> </AttributesMapping>
属性/データベース列マッピング表のバージョンIDは、カスタム属性グループのバージョンIDに一致します。これにより、アプリケーションは異なる監査定義バージョン間でも、属性マッピングの下位互換性を維持できます。バージョニングの詳細は、第28.5.1.1項を参照してください。
Java EEアプリケーションは、component_events.xmlとcomponent_events_xlf.jarを、アプリケーションEARファイルのMETA-INFフォルダにパッケージ化することにより登録できます。監査登録サービスはアプリケーションのデプロイ時にそれらを自動的に処理します。
次のオプションがあります。
デプロイ: アプリケーションがまだ登録されていなければ、監査イベント定義を監査メタデータ・ストアに登録します。
再デプロイ: コンポーネントがすでに登録済であれば、コンポーネントの監査イベント定義をアップグレードします。詳細は28.5.1項を参照してください。
アンデプロイ: アプリケーションの監査イベント定義を監査メタデータ・ストアから削除します。
登録パラメータはOPSSデプロイメント・ディスクリプタopss-application.xmlで設定されます。これもアプリケーションEARファイルのMETA-INFフォルダにパッケージ化されます。表28-2に、パラメータとそのオプションを示します。
表28-2 監査登録サービスのパラメータ
| パラメータ | オプション | 説明 |
|---|---|---|
|
opss.audit.registration |
OVERWRITE |
登録されているかどうかにかかわらず、コンポーネント監査定義を登録します。 |
|
UPGRADE |
バージョニングのサポートに応じてコンポーネント監査定義を登録します。 |
|
|
DISABLE |
コンポーネント監査定義を登録しません。 |
|
|
opss.audit.deregistration |
DELETE(デフォルト・オプション) |
アプリケーションのアンデプロイ時に、コンポーネント監査定義を監査ストアから削除します。 |
|
DISABLE |
アプリケーションのアンデプロイ時に、コンポーネント監査定義を監査ストアに残します。 |
アプリケーションはプログラムにより実行時監査サービスにアクセスし、クライアントAPIを使用して独自の監査イベントを生成できます。
監査クライアントAPIは次のとおりです。
Interface AuditService {
Auditor getAuditor(String componentType);
void register(AuditRegistration auditRegistration);
void unregister(AuditRegistration auditRegistration);
}
Interface Auditor {
boolean log(AuditEvent ev);
boolean isEnabled(String categoryName, String eventType, boolean eventStatus, Map<String, Object> properties);
}
public class oracle.security.jps.service.audit.AuditEvent {
public AuditEvent(AuditContext ctx, String eventType,
String eventCategory, boolean eventStatus, String messageText);
public void setInitiator(String initiator);
public void setAttributeBoolean(String attributeName, Boolean attributeValue);
public void setAttributeDouble(String attributeName, double attributeValue);
public void setAttributeDate(String attributeName, Date attributeValue);
public void setAttributeByteArray(String attributeName, byte[] attributeValue);
public void setAttributeFloat(String attributeName, float attributeValue);
public void setAttributeLong(String attributeName, long attributeValue);
public void setAttributeInt(String attributeName, int attributeValue);
public void setAttributeString(String attributeName, String attributeValue);
public void setAttribute(String attributeName, Object attributeValue)
}
次の各項では、パーミッションおよび実行時監査インスタンスの取得方法について説明します。
監査サービスから監査インスタンスを取得するには、システム権限が必要です。この例では、権限によりアプリケーションMyAppはAccessController.doPrivilegedブロック内のauditService.getAuditor("MyApp")をコールできます。
<grant>
<grantee>
<codesource>
<url>file:${oracle.deployed.app.dir}/MyApp${oracle.deployed.app.ext}</url>
</codesource>
</grantee>
<permissions>
<permission>
<class>oracle.security.jps.service.audit.AuditStoreAccessPermission</class>
<name>MyApp</name>
<actions>read</actions>
</permission>
</permissions>
</grant>
次のサンプル・コードが示すように、監査サービスへの登録後、アプリケーションはプログラムにより実行時監査インスタンスをOPSS監査サービスから取得できます。
//Gets audit service instance
final AuditService auditService = JpsServiceLocator.getServiceLocator().lookup(AuditService.class);
//Gets Auditor instance for application 'MyApp'
Auditor auditor = AccessController.doPrivileged(
new PrivilegedExceptionAction<Auditor>() {
public Auditor run() throws AuditException {
return auditService.getAuditor("MyApp");
}
});
final String category = "Transaction";
final String eventName = "deposit";
//Check if event 'deposit' is enabled in filtering.
boolean enabled = auditor.isEnabled(category, eventName, "true", null);
if (enabled) {
AuditContext ctx = new AuditContext();
String message = "deposit transaction";
//Creates an audit event
AuditEvent ev = new AuditEvent(ctx, eventName, category, "true", message);
//Sets event attributes
ev.setInitiator("johnsmith");
ev.setAttributeInt("accounting:AccountNumber", 2134567);
ev.setAttributeDate("accounting:Date", new Date());
ev.setAttributeFloat("accounting:Amount", 100.00);
//Logs audit event
boolean ret = auditor.log(event);
}
Oracle Business Intelligence Publisherを利用することにより、Oracleコンポーネントで使用可能なものと同じレポート機能を使用して、アプリケーションの監査データからレポートを生成できます。
基本手順は次のとおりです。
マッピング表を使用して、Oracle BI Publisherレポート・テンプレートを生成します。
Oracle BI Publisherレポート・サービスを設定します。
レポート・テンプレートをOracle BI Publisherにコピーして、コンポーネント監査イベントを表示します。
Oracle BI Publisherでレポートを生成します。
アプリケーションの監査要件の変化に応じて、変化を反映するように統合を更新できます。手順は、次のとおりです:
監査ファイル定義を更新します。この手順の実行時にはバージョニング・ルールに注意してください。
更新されたイベント定義ファイルとともにアプリケーションEARファイルを再デプロイします。または、監査登録サービスに新しいバージョンの存在を通知することもできます。
変更を検証します。