ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server セキュリティ プロバイダの開発
11g リリース 1 (10.3.1)
B55527-01
 

目次
目次

戻る
戻る
 
次へ
次へ

12 カスタム セキュリティ プロバイダからのイベントの監査

監査プロバイダ」で説明されているように、監査 とは、要求の操作とそれらの要求の結果に関する情報を、否認防止を目的として収集、格納、および配布するプロセスのことです。監査プロバイダは、コンピュータのアクティビティの電子的な記録を提供します。

各タイプのセキュリティ プロバイダは、セキュリティ関連イベントの実行前または実行後に、それらのイベントに関する情報を記録するようコンフィグレーション済みの監査プロバイダに要求できます。たとえば、あるユーザが (アクセス権を持たない) 預金口座アプリケーションの withdraw メソッドにアクセスしようとした場合、認可プロバイダではこの操作を記録するように要求できます。セキュリティ関連イベントは、監査プロバイダのコンフィグレーションで指定されている重大度レベルと一致するか、それを超えた場合にのみ記録されます。

以下の節では、カスタム セキュリティ プロバイダに監査機能を追加する前に理解しておく必要がある基本情報と、カスタム セキュリティ プロバイダに監査機能を追加する手順について説明します。

セキュリティ サービスと監査サービス

weblogic.security.spi パッケージの SecurityServices インタフェースは、セキュリティ サービスのリポジトリです (現在は単なる監査サービス)。SecurityServices インタフェースは、以下のメソッドを通じて呼び出し側に AuditorService の参照を提供します。

同じく weblogic.security.spi パッケージにある AuditorService インタフェースは、他のタイプのセキュリティ プロバイダ (認証プロバイダなど) に対する限定された (書き込み専用の) 監査機能を提供します。つまり、監査サービスではコンフィグレーションされている各監査プロバイダの writeEvent メソッドを呼び出します。このメソッドは渡された AuditEvent オブジェクトに指定されている情報に基づいて、単純に監査レコードを記述します。

writeEvent メソッドの詳細については、「AuditChannel SSPI の実装」を参照してください。AuditEvent オブジェクトの詳細については、「監査イベントの作成」を参照してください。AuditorService インタフェースには以下のメソッドがあります。

監査サービスを呼び出すと、監査イベントの実行前または実行後にそれらのイベントを記録できますが、操作の前と後の間のコンテキストは維持されません。監査機能を持つセキュリティ プロバイダは、「監査サービスの取得、および取得した監査サービスによる監査イベントの書き込み」の説明に従って監査サービスを取得する必要があります。


注意 :

監査プロバイダがコンフィグレーションされている場合、SecurityServices インタフェースと AuditorService インタフェースの実装は起動時に WebLogic Security フレームワークによって作成されます。(監査プロバイダのコンフィグレーションについては、「Administration Console によるカスタム監査プロバイダのコンフィグレーション」を参照してください)。このため、開発者がこれらのインタフェースの実装を提供する必要はありません。

また、SecurityServices オブジェクトは、セキュリティ プロバイダがコンフィグレーションされているセキュリティ レルムに固有のものです。カスタム セキュリティ プロバイダの実行時クラスは、その initialize メソッドの一部としてレルム固有の SecurityServices オブジェクトへの参照を自動的に取得します。(詳細については、「「Provider」SSPI の目的について」を参照してください)。


これらのインタフェースとそのメソッドの詳細については、WebLogic Server API リファレンス Javadoc の「SecurityServices インタフェース」および「AuditorService インタフェース」を参照してください。

カスタム セキュリティ プロバイダからの監査方法

カスタム セキュリティ プロバイダに監査機能を追加するには、次の手順に従います。

各手順の例については、「例 : AuditRoleEvent インタフェースの実装」と「例 : 監査サービスを取得および使用してロール監査イベントの書き込み」を参照してください。


注意 :

カスタム セキュリティ プロバイダが監査イベントを記録する場合、必須のファイルに加えて、以下の手順で作成したすべてのクラスを、そのプロバイダ用の MBean JAR ファイル (MJF) に追加する必要があります。

監査イベントの作成

セキュリティ プロバイダは、イベントのタイプ (認証イベントなど) や監査重大度 (「エラー」など) といった、監査するイベントに関する情報を提供する必要があります。監査イベントには、この情報が格納されます。また、コンフィグレーション済みの監査プロバイダが理解できるコンテキスト データも格納できます。監査イベントを作成するには、以下のいずれかを行います。

AuditEvent SSPI の実装

AuditEvent SSPI を実装するには、以下のメソッドの実装を提供する必要があります。

  • getEventType

    public java.lang.String getEventType()
    

    getEventType メソッドは、監査するイベント タイプの文字列表現を返します。この文字列表現は、監査チャネル (AuditChannel SSPI を実装する実行時クラス) によって使用されます。たとえば、Oracle 提供の実装のイベント タイプは "Authentication Audit Event" です。詳細については、「監査チャネル」および「AuditChannel SSPI の実装」を参照してください。

  • getFailureException

    public java.lang.Exception getFailureException()
    

    getFailureException メソッドは、Exception オブジェクトを返します。監査チャネルは、tostring メソッドから提供される情報に加えて、このオブジェクトから監査情報を取得します。

  • getSeverity

    public AuditSeverity getSeverity()
    

    getSeverity メソッドは、監査するイベント タイプに関連付けられている重大度レベル値を返します。この値は、監査チャネルによって使用されます。監査チャネルはこの値を使用して、監査するかどうかを判定します。詳細については、「監査重大度」を参照してください。

  • toString

    public java.lang.String toString()
    

    toString メソッドは、あらかじめフォーマットされた監査情報を監査チャネルに返します。


    注意 :

    toString メソッドは、任意の文字を生成できます。その際、エスケープは使用されません。監査プロバイダが、構文に文字を使用するフォーマットに toString 値を書き込む場合は、その前に toString 値をエスケープしてください。

AuditEvent SSPI とこれらのメソッドの詳細については、WebLogic Server API リファレンス Javadoc を参照してください。

監査イベント コンビニエンス インタフェースの実装

AuditEvent SSPI には、ユーザの利便を図り、監査イベントの作成に役立つサブインタフェースがいくつか用意されています。

監査チャネル (AuditChannel SSPI を実装する実行時クラス) では、それらの各監査イベント コンビニエンス インタフェースを使用して、拡張イベント タイプ オブジェクトのインスタンス タイプをより効果的に判断し、特定のタイプのセキュリティ プロバイダを識別することができます。たとえば、AuditAtnEventV2 コンビニエンス インタフェースを監査チャネルで使用すると、拡張認証イベント タイプ オブジェクトのインスタンス タイプを判断できます。(詳細については、「監査チャネル」および「AuditChannel SSPI の実装」を参照してください)。

監査イベント コンビニエンス インタフェースは以下のとおりです。

AuditAtnEventV2 インタフェース

AuditAtnEventV2 は、監査チャネルが拡張認証イベント タイプ オブジェクトのインスタンス タイプを判断するのに役立つコンビニエンス インタフェースです。


注意 :

AuditAtnEvent インタフェースは、このリリースの WebLogic Server で非推奨になりました。

AuditAtnEventV2 インタフェースを実装するには、「AuditEvent SSPI の実装」で説明されているメソッドと以下のメソッドの実装を提供する必要があります。

  • getUsername

    public String getUsername()
    

    getUsername メソッドは、認証イベントに関連付けられているユーザ名を返します。

  • getAtnEventType

    public AuditAtnEventV2.AtnEventTypeV2 getAtnEventType()
    

    getAtnEventType メソッドは、認証イベントをより具体的に表すイベント タイプを返します。具体的な認証イベント タイプは以下のとおりです。

    AUTHENTICATE - ユーザ名とパスワードを使用する単純な認証が発生した。

    ASSERTIDENTITY - トークンに基づく境界認証が発生した。

    CREATEDERIVEDKEY - 派生キーの作成を表す。

    CREATEPASSWORDDIGEST - パスワード ダイジェストの作成を表す。

    IMPERSONATEIDENTITY - 指定されたクライアント ユーザ名を使用してクライアント ID が確立された (カーネル ID が必要)。

    USERLOCKED - 無効なログインの試行によってユーザ アカウントがロックされた。

    USERUNLOCKED - ユーザ アカウントのロックが解除された。

    USERLOCKOUTEXPIRED - ユーザ アカウントのロックが期限切れになった。

    VALIDATEIDENTITY - 指定されたサブジェクト内のプリンシパルの信頼性が検証された。

  • toString

    public String toString()
    

    toString メソッドは、文字列で表された特定の認証情報を監査に返します。


    注意 :

    toString メソッドは、任意の文字を生成できます。その際、エスケープは使用されません。監査プロバイダが、構文に文字を使用するフォーマットに toString 値を書き込む場合は、その前に toString 値をエスケープしてください。

    AuditAtnEventV2 というコンビニエンス インタフェースを使用すると、AuditEvent インタフェースと AuditContext インタフェースの両方を拡張できます。AuditContext インタフェースの詳細については、「監査コンテキスト」を参照してください。


AuditAtnEventV2 コンビニエンス インタフェースとこれらのメソッドの詳細については、WebLogic Server API リファレンス Javadoc を参照してください。

AuditAtzEvent および AuditPolicyEvent インタフェース

AuditAtzEvent および AuditPolicyEvent コンビニエンス インタフェースは、監査チャネルが拡張認可イベント タイプ オブジェクトのインスタンス タイプを判断するのに役立ちます。


注意 :

AuditAtzEvent コンビニエンス インタフェースと AuditPolicyEvent コンビニエンス インタフェースは、後者が AuditEvent インタフェースのみを拡張する点で異なります。(後者は AuditContext インタフェースを拡張しません。) AuditContext インタフェースの詳細については、「監査コンテキスト」を参照してください。

AuditAtzEvent インタフェースまたは AuditPolicyEvent インタフェースを実装するには、「AuditEvent SSPI の実装」で説明されているメソッドと以下のメソッドの実装を提供する必要があります。

  • getSubject

    public Subject getSubject()
    

    getSubject メソッドは、認可イベントに関連付けられているサブジェクト (WebLogic リソースにアクセスしようとしているサブジェクト) を返します。

  • getResource

    public Resource getResource()
    

    getResource メソッドは、認可イベントに関連付けられ、サブジェクトがアクセスしようとしている WebLogic リソースを返します。

これらのコンビニエンス インタフェースおよびメソッドの詳細については、WebLogic Server API リファレンス Javadoc の「AuditAtzEvent インタフェース」または「AuditPolicyEvent インタフェース」を参照してください。

AuditMgmtEvent インタフェース

AuditMgmtEvent は、監査チャネルが拡張セキュリティ管理イベント タイプ オブジェクトのインスタンス タイプ (セキュリティ プロバイダの MBean など) を判断するのに役立つコンビニエンス インタフェースです。このインタフェースには実装する必要があるメソッドは含まれていませんが、監査イベント実装のベスト プラクティス構造が保持されています。


注意 :

MBean の詳細については、「セキュリティ サービス プロバイダ インタフェース (SSPI) MBean」を参照してください。

AuditMgmtEvent コンビニエンス インタフェースの詳細については、「WebLogic Server API リファレンス Javadoc」を参照してください。

AuditRoleEvent および AuditRoleDeploymentEvent インタフェース

AuditRoleDeploymentEvent および AuditRoleEvent コンビニエンス インタフェースは、監査チャネルが拡張ロール マッピング イベント タイプ オブジェクトのインスタンス タイプを判断するのに役立ちます。このインタフェースには実装する必要があるメソッドは含まれていませんが、監査イベント実装のベスト プラクティス構造が保持されています。


注意 :

AuditRoleEvent コンビニエンス インタフェースと AuditRoleDeploymentEvent コンビニエンス インタフェースは、後者が AuditEvent インタフェースのみを拡張する点で異なります。(後者は AuditContext インタフェースを拡張しません。) AuditContext インタフェースの詳細については、「監査コンテキスト」を参照してください。

これらのコンビニエンス インタフェースの詳細については、WebLogic Server API リファレンス Javadoc の「AuditRoleEvent インタフェース」または「AuditRoleDeploymentEvent インタフェース」を参照してください。

監査重大度

監査重大度とは、セキュリティ プロバイダが監査イベントを記録するレベルのことです。コンフィグレーション済みの監査プロバイダが監査要求を受け取ると、各監査プロバイダは実行されるイベントの重大度を調べます。イベントの重大度が監査プロバイダのコンフィグレーションに使用されたレベル以上であれば、監査プロバイダはその監査データを記録します。


注意 :

監査プロバイダのコンフィグレーションは、WebLogic Server Administration Console で行います。詳細については、「Administration Console によるカスタム監査プロバイダのコンフィグレーション」を参照してください。

weblogic.security.spi パッケージに含まれる AuditSeverity クラスは、監査重大度レベルを数値およびテキスト値として、AuditEvent オブジェクトを介して監査チャネル (AuditChannel SSPI の実装) に、提供します。重大度の数値はロジックで用いるためのもので、テキスト値は出力用監査記録の作成で用いるためのものです。AuditChannel SSPI と AuditEvent オブジェクトの詳細については、「AuditChannel SSPI の実装」および「監査イベントの作成」を参照してください。

監査コンテキスト

一部の監査イベント コンビニエンス インタフェースは、実装にコンテキスト情報も含まれていることを示すために、AuditContext インタフェースを拡張します。コンテキスト情報は、監査チャネルによって使用されます。詳細については、「監査チャネル」および「AuditChannel SSPI の実装」を参照してください。

AuditContext インタフェースには以下のメソッドがあります。

  • getContext

    public ContextHandler getContext()
    

    getContext メソッドは、ContextHandler オブジェクトを返します。実行時クラス (AuditChannel SSPI の実装) は、このオブジェクトから追加の監査情報を取得します。ContextHandler の詳細については、「ContextHandler と WebLogic リソース」を参照してください。

例 : AuditRoleEvent インタフェースの実装

コード リスト 12-1 に、MyAuditRoleEventImpl.java クラスを示します。これは、監査イベント コンビニエンス インタフェース (ここでは AuditRoleEvent コンビニエンス インタフェース) の実装例です。このクラスには以下の実装が含まれています。

  • getEventTypegetFailureExceptiongetSeverity、および toString という AuditEvent SSPI から継承された 4 つのメソッド (「AuditEvent SSPI の実装」を参照)

  • ContextHandler を介してコンテキストについての補足情報を返す getContext という 1 つの追加メソッド(ContextHandler の詳細については、「ContextHandler と WebLogic リソース」を参照してください)。


    注意 :

    コード リスト 12-1 の太字のコードは、クラス宣言とメソッド シグネチャを示しています。

コード リスト 12-1 MyAuditRoleEventImpl.java

package mypackage;
import javax.security.auth.Subject;
import weblogic.security.SubjectUtils;
import weblogic.security.service.ContextHandler;
import weblogic.security.spi.AuditRoleEvent;
import weblogic.security.spi.AuditSeverity;
import weblogic.security.spi.Resource;
/*package*/ class MyAuditRoleEventImpl implements AuditRoleEvent
{
   private Subject subject;
   private Resource resource;
   private ContextHandler context;
   private String details;
   private Exception failureException;
   /*package*/ MyAuditRoleEventImpl(Subject subject, Resource resource, 
      ContextHandler context, String details, Exception
      failureException) {
         this.subject = subject;
         this.resource = resource;
         this.context = context;
         this.details = details;
         this.failureException = failureException;
   }
   public Exception getFailureException()
   {
      return failureException;
   }
   public AuditSeverity getSeverity()
   {
      return (failureException == null) ? AuditSeverity.SUCCESS :
         AuditSeverity.FAILURE;
   }
   public String getEventType()
   {
      return "MyAuditRoleEventType";
   }
   public ContextHandler getContext()
   {
      return context;
   }
   public String toString()
   {
      StringBuffer buf = new StringBuffer();
      buf.append("EventType:" + getEventType() + "\n");
      buf.append("\tSeverity: " +
         getSeverity().getSeverityString());
      buf.append("\tSubject: " +
         SubjectUtils.displaySubject(getSubject());
      buf.append("\tResource: " + resource.toString());
      buf.append("\tDetails: " + details);
      if (getFailureException() != null) {
         buf.append("\n\tFailureException:" +
            getFailureException());
      }
      return buf.toString();
   }
}

監査サービスの取得、および取得した監査サービスによる監査イベントの書き込み

カスタム セキュリティ プロバイダから監査サービスを取得および使用して監査イベントを書き込むには、次の手順に従います。

  1. getAuditorService メソッドを使用して監査サービスを返します。


    注意 :

    SecurityServices オブジェクトは initialize メソッドの一部としてセキュリティ プロバイダの「Provider」SSPI の実装に渡されることに注意します。(詳細については、「「Provider」SSPI の目的について」を参照してください) AuditorService オブジェクトは、監査プロバイダがコンフィグレーションされている場合にのみ返されます。

  2. AuditEvent SSPI の実装」で作成した監査イベントをインスタンス化し、AuditService.providerAuditWriteEvent メソッドを介して監査サービスに送ります。

例 : 監査サービスを取得および使用してロール監査イベントの書き込み

コード リスト 12-2 に、カスタム ロール マッピング プロバイダの実行時クラス (MyRoleMapperProviderImpl.java) が監査サービスを取得し、そのサービスを使用して監査イベントを書き込む例を示します。


注意 :

MyRoleMapperProviderImpl.java クラスは、コード リスト 12-1 の MyAuditRoleEventImpl.java クラスに依存します。

コード リスト 12-2 MyRoleMapperProviderImpl.java

package mypackage;
import javax.security.auth.Subject;
import weblogic.management.security.ProviderMBean;
import weblogic.security.SubjectUtils;
import weblogic.security.service.ContextHandler;
import weblogic.security.spi.AuditorService;
import weblogic.security.spi.RoleMapper;
import weblogic.security.spi.RoleProvider;
import weblogic.security.spi.Resource;
import weblogic.security.spi.SecurityServices;
public final class MyRoleMapperProviderImpl implements RoleProvider, RoleMapper 
{
   private AuditorService auditor;
   public void initialize(ProviderMBean mbean, SecurityServices 
      services) 
   {
      auditor = services.getAuditorService();
      ...
   }
   public Map getRoles(Subject subject, Resource resource,
      ContextHandler handler)
   {
      ...
      if (auditor != null) 
      {
         auditor.providerAuditWriteEvent(
            new MyRoleEventImpl(subject, resource, context, 
            "why logging this event", 
            null);                // no exception occurred
      }
      ...
   }
}

プロバイダの MBean から管理オペレーションの監査

SecurityServices オブジェクトは initialize メソッドの一部としてセキュリティ プロバイダの「Provider」SSPI の実装に渡されます。(詳細については、「Provider」SSPI の目的について」を参照してください) プロバイダは、このオブジェクトの監査プロバイダを使用して、ユーザが正常にログインした場合などにプロバイダ固有のセキュリティ イベントを監査できます。

セキュリティ プロバイダの MBean 実装には、SecurityServices オブジェクトは渡されません。ただし、プロバイダは、作成中のユーザなど、その MBean オペレーションを監査しなければならない場合があります。

これに対処するために、プロバイダの実行時実装で SecurityServices オブジェクトをキャッシュし、プロバイダ固有のメカニズムを使用してそのキャッシュをプロバイダの MBean 実装に渡すことができます。これにより、プロバイダでその MBean オペレーションを監査できます。

このタスクの実行方法の例が、Manageable Sample Authentication Provider に示されています。サンプル プロバイダには、主に以下の 3 つの実装クラスが含まれています。

  • ManageableSampleAuthenticationProviderImpl には、セキュリティ実行時実装が含まれる。

  • ManageableSampleAuthenticatorImpl には、MBean 実装が含まれる。

  • UserGroupDatabase は、ManageableSampleAuthenticationProviderImpl および ManageableSampleAuthenticatorImpl で使用するヘルパー クラス。

次に、SecurityServices オブジェクトをキャッシュおよび取得するコード フローを示します。

  1. ManageableSampleAuthenticationProviderImpl の initialize メソッドには、SecurityServices オブジェクトが渡されます。

  2. initialize メソッドは、UserGroupDataBase オブジェクトを作成し、その UserGroupDataBase オブジェクトに SecurityServices オブジェクトを渡します。

  3. UserGroupDataBaseObject は、SecurityServices オブジェクトをキャッシュします。また、initialize メソッドは、レルムの名前をルックアップ キーとして使用し、UserGroupDatabase オブジェクトをハッシュ テーブルに挿入します。

  4. ManageableSampleAuhenticatorImpl の init メソッドは、その MBean からレルム名を検索します。

  5. init メソッドは、レルム名を使用して、対応する UserGroupDataBase オブジェクトをハッシュ テーブルから検索します。

  6. init メソッドは、UserGroupDatabase オブジェクトから SecurityServices オブジェクトを取得し、その監査プロバイダを使用して「createUser」などの管理オペレーションを監査します。


    注意 :

    プロバイダの実行時実装は、サーバの起動時に、プロバイダがデフォルト レルムの一部である場合にのみ初期化されます。したがって、サーバの起動時にプロバイダがデフォルト レルム内にない場合、その実行時実装は初期化されず、プロバイダの MBean 実装は、SecurityServices オブジェクトへのアクセスを取得できません。つまり、サーバの起動時にプロバイダがデフォルト レルム内にない場合、プロバイダは、その MBean オペレーションを監査できません。

例 : プロバイダの MBean から管理オペレーションの監査

コード リスト 12-3 では、ManageableSampleAuhenticatorImpl の init メソッドが、MBean からレルム名を検索する方法、レルム名を使用して対応する UserGroupDataBase オブジェクトを (UserGroupDatabase ヘルパー クラスを介して) ハッシュ テーブルから検索する方法、および UserGroupDatabase オブジェクトから SecurityServices オブジェクトを取得する方法を示します。

また、コード リスト 12-3 では、ManageableSampleAuhenticatorImpl がその監査プロバイダを使用して「createUser」などの管理オペレーションを監査する方法も示します。

コード リスト 12-3 ManageableSampleAuthenticatorImpl.java

package examples.security.providers.authentication.manageable;
import java.util.Enumeration;
import javax.management.MBeanException;
import javax.management.modelmbean.ModelMBean;
import weblogic.management.security.authentication.AuthenticatorImpl;
import weblogic.management.utils.AlreadyExistsException;
import weblogic.management.utils.InvalidCursorException;
import weblogic.management.utils.NotFoundException;
import weblogic.security.spi.AuditorService;
import weblogic.security.spi.SecurityServices;

public class ManageableSampleAuthenticatorImpl extends AuthenticatorImpl
{
// このプロバイダのユーザおよびグループ定義を管理する
private UserGroupDatabase database;

// アクティブ クエリ (listUsers, listGroups, listMemberGroups を参照) を管理する
private ListManager listManager = new ListManager();

// このプロバイダを格納するレルムの名前
private String realm;

// このプロバイダの名前
private String provider;

// ユーザ/グループ管理オペレーションを監査するための監査プロバイダ。
// これは、サーバ起動時に、このプロバイダがデフォルト レルムで
// コンフィグレーションされている場合にのみ使用可能。
private AuditorService auditor;

public ManageableSampleAuthenticatorImpl(ModelMBean base) throws MBeanException
{
super(base);
}

private synchronized void init() throws MBeanException
{
if (database == null) {
try {
ManageableSampleAuthenticatorMBean myMBean = (ManageableSampleAuthenticatorMBean)getProxy();
database = UserGroupDatabase.getDatabase(myMBean);
realm    = myMBean.getRealm().getName();
provider = myMBean.getName();
SecurityServices services = database.getSecurityServices();
auditor = (services != null) ? services.getAuditorService() : null;
}
catch(Exception e) {
throw new MBeanException(e, "SampleAuthenticatorImpl.init failed");
}
}
}
...
public void createUser(String user, String password, String description)
throws MBeanException, AlreadyExistsException
{
init();
String details = (auditor != null) ?
"createUser(user = " + user + ", password = " + password + ", 
description = " + description + ")" : null;
try {
// 説明はサポートされていないので、これを無視する
database.checkDoesntExist(user);
database.getUser(user).create(password);
database.updatePersistentState();
auditOperationSucceeded(details);
}
catch (AlreadyExistsException   e) { auditOperationFailed(details, e); throw e; }
catch (IllegalArgumentException e) { auditOperationFailed(details, e); throw e; }
}
...
private void auditOperationSucceeded(String details)
{
if (auditor != null) {
auditor.providerAuditWriteEvent(
new ManageableSampleAuthenticatorManagementEvent(realm, provider, details, null)
);
}
}
...
private void auditOperationFailed(String details, Exception failureException)
{
if (auditor != null) {

auditor.providerAuditWriteEvent(
new ManageableSampleAuthenticatorManagementEvent(realm, provider, details, failureException)
);
}
}
}

ベスト プラクティス : プロバイダの MBean からの監査イベントのポスト

プロバイダの管理オペレーションで書き込み (ユーザの作成、ユーザの削除、データの削除など) を行うものは、オペレーションが成功するかどうかに関係なく、監査イベントをポストする必要があります。

プロバイダが MBean オペレーションを監査する場合は、常に以下のベスト プラクティス ガイドラインに留意してください。

  • 書き込みオペレーションが成功した場合は、INFORMATION 監査イベントをポストする。

  • パラメータが不正 (ユーザがすでに存在する、インポート フォーマット名が不正、ファイル名が存在しない、ファイル フォーマットが不正など) という理由で書き込みオペレーションが失敗した場合は、監査イベントをポストしないようにする。

  • エラー (LDAPException、RuntimeException など) のために書き込みオペレーションが失敗した場合は、FAILURE 監査イベントをポストする。

  • インポート オペレーションは部分的に成功できる。たとえば、一部のユーザがインポートされたものの、プロバイダ内にすでに名前を持つその他のユーザがスキップされる場合などです。

  • スキップしたデータがプロバイダ内のデータと同じであることが簡単に検出できる場合 (たとえば、ユーザ名、説明、パスワードなどが同じ場合など)、WARNING イベントをポストすることを考慮する。

  • 一部に衝突があったためにデータをスキップする場合 (たとえば、ユーザ名は同じだが、パスワードが異なっている場合など)、FAILURE イベントをポストする必要がある。

  • プロバイダに格納されているデータとインポート データを区別できない場合は、FAILURE イベントをポストする。