複数の LDAP サーバー間のセキュリティー・フェイルオーバー

WebSphere® Application Server セキュリティーは、複数の Lightweight Directory Access Protocol (LDAP) ホスト間のフェイルオーバーを試行するように構成することができます。

注: このトピックでは、 1 つ以上のアプリケーション・サーバー・ログ・ファイルを参照します。推奨される代替案として、分散システムや IBM® i システムの SystemOut.logSystemErr.logtrace.logactivity.log ファイルではなく、High Performance Extensible Logging (HPEL) ログおよびトレース・インフラストラクチャーを使用するようにサーバーを構成できます。また HPEL は、ネイティブ z/OS® ロギング機能と連携させて使用することができます。HPEL を使用する場合、LogViewer コマンド・ライン・ツールを サーバー・プロファイルの bin ディレクトリーから使用して、すべてのログ・ファイルにアクセスし、 情報をトレースできます。HPEL の使用について詳しくは、HPEL を使用してのアプリケーションの トラブルシューティングに関する情報を参照してください。

カレント・アクティブ LDAP サーバーが使用不可である場合、WebSphere Application Server セキュリティーは指定されているホスト・リストの最初の使用可能な LDAP ホストに対してフェイルオーバー を試みます。 複数の LDAP サーバーは、同じマスター LDAP サーバーのレプリカであってもかまいません。または、同じ LDAP データ交換フォーマット (LDIF) ファイルからインポートしたデータを含む、同じスキーマを持つ任意の LDAP ホ ストであってもかまいません。

フェイルオーバーが起こる場合は常に、WebSphere Application Server セキュリティーは指定されているホスト ・リスト の最初の使用可能な LDAP サーバーを使用します。例えば、4 つの LDAP サーバーが、L1、L2、L3、L4 の順で構成されている場合、L1 がプ ライマリー LDAP サーバーとして処理されます。接続の優先順位は、L1 から L4 です。例えば、WebSphere Application Server セキュリティーが現在 L4 に接続されており、フェイルオーバーまたは再接続が必要な場合、WebSphere Application Server セキュリティーは まず、L1、L2、その後に L3 の順で、接続が成功するまで接続を試みます。

現行の LDAP ホスト名は WebSphere Application Server のログ・ファイル SystemOut.log のメッセージ SECJ0419I に記録されます。プライマリー LDAP ホストに再 接続したい場合は、WebSphere Application Server MBean メソッド resetLDAPBindInfo を、入力データに null,null を使用して実行します。

複数の LDAP ホスト間で LDAP のフェイルオーバーを構成するには、wsadmin または ConfigService を使用して、 バックアップ LDAP ホストを含める必要があります。含めることのできるバックアップ LDAP ホストの数には制限はありません。 管理コンソールに表示される LDAP ホストは、プライマリー LDAP ホストで、これは、security.xml の LDAP ホスト・リストの最初の項目です。

WebSphere Application Server セキュリティーのデフォルトのレルム名は、管理コンソールに表示されるプライマリー LDAP ホスト名です。このレルム名には、末尾にコロンとポート番号 (ポート番号がある場合) が付いています。ただし、カスタム・プロパティーの com.ibm.websphere.security.ldap.logicRealm を追加して、デフォルトのセキュリティー・レルム名をオーバーライドすることができます。 logicRealm 名を使用して、インターオペラビリティーと後方互換性を実現するために、セルごとに独自の LDAP ホストを構成し、LDAP ホストの動的追加や除去を柔軟に実行できるようにします。 前のインストールからのマイグレーションを行う場合、 新しい logicRealm 名は 管理セキュリティー が 再度使用可能になるまで有効になりません。 論理レルムをサポートしない前のリリースとの互換性を確保するために、 logicRealm 名は前のインストールで使用したものと同じである必要があります (末尾のコロンとポート番号を含む LDAP ホスト名)。

ロード・バランサー (WebSphere Application Server への変換を透過的に実行する) を使用して単一ホスト名を複数の IP アドレスに関連付けることにより LDAP フェイルオーバーが構成された場合、無効なパスワードを入力すると、LDAP バインドの再試行が複数回発生する場合があります。WebSphere Application Server は再試行し、ロード・バランサーは要求を複数のレプリカにルーティングします。 デフォルト設定では、LDAP バインドの再試行の回数は関連付けられる IP アドレスの数より 1 回多くなります。 これは、単一の無効なログインの試行により LDAP アカウントがロックされる場合があることを示します。com.ibm.websphere.security.registry.ldap.singleLDAP カスタム・プロパティーが false に設定されている場合には、LDAP バインド呼び出しは再試行されません。

wsadmin コマンドを使用してバックエンド LDAP サーバー・ホスト名を登録することで LDAP フェイルオーバーが構成されている場合には、 com.ibm.websphere.security.ldap.retryBind プロパティーに false を設定します。

次の Jacl の例は、wsadmin を使用してフェイルオーバー用にバックアップ LDAP ホストを追加する方法を示しています。
#---------------------------------------------------------------
# Main
#  This is a bi-modal script: it can be included in the wsadmin
#  command invocation like this:
#     wsadmin -f LDAPAdd.jacl ldaphost 800
#
#  or the script can be sourced from the wsadmin command line:
#     wsadmin> source LDAPAdd.jacl
#     wsadmin> LDAPAdd ldaphost 800
#
#  The script expects some parameters:
#      arg1 - LDAP Server host name
#      arg2 - LDAP Server port number
#---------------------------------------------------------------
if { !($argc == 2)} {
   puts ""
   puts "LDAPAdd: This script requires 2 parameters: LDAP server host name and LDAP server port number"
   puts "For example: LDAPAdd ldaphost 389"
   puts ""
   return;
}
else {
   set ldapServer        [lindex $argv 0]
   set ldapPort          [lindex $argv 1]
   LDAPAdd $ldapServer $ldapPort
   return;
}
proc LDAPAdd {ldapServer ldapPort args} {
   	global AdminConfig AdminControl ldapServer ldapPort
   set ldapServer  lindex $args 0
   set ldapPort  lindex $args 1
   global ldapUserRegistryId
   # Get the LDAP user registry object from the security configuration
   if { catch {$AdminConfig list LDAPUserRegistry} result } {
      		puts stdout "¥$AdminConfig list LDAPUserRegistry caught an exception $result¥n"
      return
   } 
   else {
      if {$result != {}} {
         set ldapUserRegistryId  lindex $result 0
      } 
      else {
         		puts stdout "¥$AdminConfig list LDAPUserRegistry caught an exception $result¥n"
         return;
      }
   }
   # Set the host and port values in Attrs2
   set Attrs2  list  list hosts  list  list  list host
   $ldapServer
   list port $ldapPort
   
   # Modify the LDAP configuration host object
   $AdminConfig modify $ldapUserRegistryId $Attrs2
   $AdminConfig save
}
次の Jython の例は、wsadmin を使用してフェイルオーバー用にバックアップ LDAP ホストを追加する方法を示しています。
#---------------------------------------------------------------
# Add ldap hostname and port
#     wsadmin -f LDAPAdd.py arg1 arg2
#
#  The script expects some parameters:
#      arg1 - LDAP Server hostname
#      arg2 - LDAP Server portnumber
#---------------------------------------------------------------
import  java

#-------------------------------------------------------
# get the line separator and use to do the parsing 
# since the line separator on different platform are different
lineSeparator = java.lang.System.getProperty('line.separator')

#-------------------------------------------------------------------------------
# add LDAP host
#-------------------------------------------------------------------------------
def LDAPAdd (ldapServer, ldapPort):
    global AdminConfig, lineSeparator, ldapUserRegistryId
    try:
        ldapObject = AdminConfig.list("LDAPUserRegistry")
        if len(ldapObject) == 0:
            print "LDAPUserRegistry ConfigId was not found¥n"
            return

        ldapUserRegistryId = ldapObject.split(lineSeparator)[0]
        print "Got LDAPUserRegistry ConfigId is " + ldapUserRegistryId + "¥n"
    except:
        print "AdminConfig.list('LDAPUserRegistry') caught an exception¥n"

    try:
        secMbeans = AdminControl.queryNames('WebSphere:type=SecurityAdmin,*') 
        if len(secMbeans) == 0:
            print "Security Mbean was not found¥n"
            return

        secMbean = secMbeans.split(lineSeparator)[0]
        print "Got Security Mbean is " + secMbean + "¥n"
    except:
        print "AdminControl.queryNames('WebSphere:type=SecurityAdmin,*') caught an exception¥n"


    attrs2 = [["hosts", [[["host", ldapServer], ["port", ldapPort]]]]]
    try:
        AdminConfig.modify(ldapUserRegistryId, attrs2)
        try:
            AdminConfig.save()            print "Done setting up attributes values for LDAP User Registry"
            print "Updated was saved successfully¥n"
        except:
            print "AdminConfig.save() caught an exception¥n"
    except:
        print "AdminConfig.modify(" + ldapUserRegistryId + ", " + attrs2 + ") caught an exception¥n"
    return

#-------------------------------------------------------------------------------
# Main entry point
#-------------------------------------------------------------------------------
if len(sys.argv) < 2 or len(sys.argv) > 3:
        print("LDAPAdd: this script requires 2 parameters: LDAP server hostname and LDAP server port number¥n")
        print("e.g.: LDAPAdd ldaphost 389¥n")
        sys.exit(1)
else:
        ldapServer = sys.argv[0]
        ldapPort = sys.argv[1]
        LDAPAdd(ldapServer, ldapPort)
        sys.exit(0)

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csec_secfailover_ldap
ファイル名:csec_secfailover_ldap.html