ナビゲーションをスキップ

WebLogic Security サービスの開発

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

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

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

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

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

 


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

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

getAuditorService

public AuditorService getAuditorService

getAuditorService メソッドは、監査プロバイダがコンフィグレーションされている場合に AuditService を返します。

同じく weblogic.security.spi パッケージにある AuditorService インタフェースは、制限された (書き込み専用の) 監査機能を持つ他のタイプのセキュリティ プロバイダ (認証プロバイダなど) を提供します。つまり、監査サービスはコンフィグレーション済みの各監査プロバイダの writeEvent メソッドの呼び出しを展開します。writeEvent メソッドは、渡された AuditEvent オブジェクト内に指定されている情報に基づいて監査記録を書き込みます。writeEvent メソッドの詳細については、「AuditChannel SSPI を実装する」を参照してください。AuditEvent オブジェクトの詳細については、「監査イベントを作成する」を参照してください。AuditorService インタフェースには以下のメソッドが定義されています。

providerAuditWriteEvent

public void providerAuditWriteEvent (AuditEvent event)

providerAuditWriteEvent メソッドは、セキュリティ プロバイダに対して、コンフィグレーション済みの監査プロバイダを呼び出す WebLogic Security フレームワーク内のオブジェクトへの書き込みアクセスを提供します。event パラメータは、監査するイベントのタイプや監査重大度レベルなどの監査条件を含む AuditEvent オブジェクトです。監査イベントと監査重大度レベルの詳細については、それぞれ「監査イベントを作成する」と「監査重大度」を参照してください。

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

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

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

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

 


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

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

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

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

監査イベントを作成する

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

AuditEvent SSPI を実装する

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

getEventType

public java.lang.String getEventType()

getEventType メソッドは、監査するイベント タイプの文字列表現を返します。この文字列表現は、監査チャネル (AuditChannel SSPI を実装する実行時クラス) によって使用されます。たとえば、BEA 提供の実装のイベント タイプは "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 メソッドは、あらかじめフォーマットされた監査情報を監査チャネルに返します。

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

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

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

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

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

注意 : 上記の監査イベント コンビニエンス インタフェースの 1 つを実装することをお勧めしますが、これは必須ではありません。

AuditAtnEvent インタフェース

AuditAtnEvent は、監査チャネルが拡張認証イベント タイプ オブジェクトのインスタンス タイプを決定するためのコンビニエンス インタフェースです。

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

getUsername

public String getUsername()

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

AtnEventType

public AtnEventType getAtnEventType()

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

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

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

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

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

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

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

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

toString

public String toString()

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

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

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

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

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

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

getSubject

public Subject getSubject()

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

getResource

public Resource getResource()

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

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

AuditMgmtEvent インタフェース

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

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

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

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

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

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

これらのコンビニエンス インタフェースの詳細については、『WebLogic Server 8.1 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 インタフェースの実装

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

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

コード リスト 11-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 メソッドを使用して監査サービスを返します。
  2. 注意 : SecurityServices オブジェクトは initialize メソッドの一部としてセキュリティ プロバイダの「Provider」SSPI の実装に渡されることに注意してください。詳細については、「「Provider」SSPI の目的を理解する」を参照してください。AuditorService オブジェクトは、監査プロバイダがコンフィグレーションされている場合にのみ返されます。

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

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

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

注意 : MyRoleMapperProviderImpl.java クラスは、コード リスト 11-1MyAuditRoleEventImpl.java クラスに依存します。

コード リスト 11-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);                
// 例外が発生しなかった
      }
      ...
   }
}

注意 : コード リスト 11-2 のコードは、セキュリティ プロバイダの実行時クラスから監査イベントをポストする方法の例です。管理メソッドから監査イベントをポストすることもできます。管理メソッドから監査イベントをポストする例については、dev2dev Web サイトの「Code Samples: WebLogic Server」から入手できるサンプル セキュリティ プロバイダの 1 つである「Manageable Sample Authentication Provider」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次