LDAP による Introscope のセキュリティ保護

内容
apmdevops96jp
内容
LDAP はユーザ認証のみサポートします。 Introscope のセキュリティのデプロイで Enterprise Manager が認証の目的で LDAP サーバに直接接続するようにする場合、許可にはローカルによるセキュリティを使用する必要があります。 許可にローカルによるセキュリティを使用することは、以下を意味します。
  • Introscope の場合、LDAP サーバ上でユーザとグループを作成し、domains.xml ファイルで権限を割り当てる必要があります。
  • CA CEM の場合、LDAP サーバ上でユーザおよび 4 つのデフォルト セキュリティ グループすべてを作成する必要があります。 たとえば、LDAP サーバ上で、cemadmin ユーザと CEM システム管理者セキュリティ グループを作成します。 次に、CEM システム管理者セキュリティ グループのメンバとして cemadmin を割り当てます。これによって、cemadmin に CEM システム管理者セキュリティ グループの権限を付与します。 CA CEM の 4 つのデフォルト セキュリティ グループについては、「デフォルトの CA CEM のセキュリティ ユーザ グループに関連付けられるメニュー項目と権限」を参照してください。
注:
CA EEM を使用して Introscope のセキュリティをデプロイ済みで、CA EEM サーバが LDAP サーバに統合されている場合は、LDAP によって認証が行われるように CA EEM サーバを構成できます。 この場合、Enterprise Manager は、LDAP サーバに接続せず、LDAP サーバを認識しません。 詳細については、「LDAP を使用した CA EEM による認証の構成」を参照してください。 このような状況の場合、Introscope は許可に CA EEM を使用します。
重要:
ローカルによるセキュリティを許可に使用すると、アプリケーション問題切り分けマップのセキュリティを提供したり、CA CEM 内のタブとデータの表示を制御するアクセス ポリシーを設定したりすることができなくなります。 CA CEM でアプリケーション問題切り分けマップを提供し、アクセス ポリシーを使用する場合は、許可に CA EEM をデプロイする必要があります。
Introscope で、LDAP による認証とローカル許可を共に設定する場合は、このようなタイプのセキュリティおよび権限チェックについて事前に理解しておくと役に立ちます。
Introscope の LDAP による認証は、以下の v3 LDAP サーバおよびその他さまざまなサーバをサポートしています。
Introscope のセキュリティの背景知識を理解したら、今度はセキュリティ デプロイの計画に入ることができます。
これが、LDAP セキュリティの設定と維持のプロセスです。
  1. LDAP サーバで CA APM ユーザおよびグループを設定します。
  2. realms.xml
    で LDAP をセキュリティ領域として追加します。
  3. ローカル許可を設定します。
LDAP による認証について
LDAP による認証の情報は
バインド
操作で提供されます。 この場合クライアントは、認証情報を含んでいる
バインド
操作をサーバに送ることにより、LDAP サーバとの接続を開始します。
バインド
操作で提供される認証情報は、クライアントが選択する認証メカニズムによって異なります。
バインド
を実行せずに、LDAP 要求を送信するクライアントは、匿名のクライアントとして扱われます。
bindName
プロパティに値を入力しない場合は、認証メカニズムが適用されず、その他すべての認証環境プロパティが無視されることを意味します。 これを明示的に行うのは、設定されている可能性のある他の任意の認証プロパティが無視されるようにする場合だけにしてください。 いずれの場合も、クライアントは匿名のクライアントとして扱われます。 つまり、サーバはクライアントの身元がわからなくても、未認証のクライアントがアクセスできるように構成されている任意のデータにそのクライアントがアクセス(読み取りおよび更新)することを許可します。
realms.xml での LDAP による認証の構成
このトピックでは、認証方式として LDAP を構成する方法について説明します。
注:
<
EM_Home
>/examples/authentication ディレクトリにあるサンプル構成ファイル realms.ldap.xml を利用できます。
realms.xml を構成するときは、以下のルールに従います。
重要:
Enterprise Manager が起動するには、以下のルール
すべて
に従う必要があります。
  • descriptor= の値は大文字と小文字が区別されます。
    • たとえば、descriptor=LDAP Realm と descriptor
      =
      ldap realm とは異なります。
  • LDAP 領域の場合、
    descriptor=
    の値は LDAP Realm である必要があります。
  • 複数の領域がある場合、領域タグ内の id= の値は領域ごとに一意である必要があります。 たとえば、以下の通りです。
    <realm descriptor="LDAP Realm" id="LDAP" active="true">
以下の手順に従います。
  1. <
    EM_Home
    >/config ディレクトリの realms.xml ファイルを開きます。
  2. 認証方式として LDAP が構成されるように、以下のプロパティを設定します。
    LDAP による認証の場合、Introscope ユーザは、正しいユーザ ID を入力すれば、空のパスワードを使用しても Workstation にログインできます。 LDAP による認証では、パスワードが入力されていないことや、パスワード フィールドが無効であることがチェックされないので、ユーザは正常にログインできてしまいます。 この LDAP の認証動作は、Workstation クライアントまたは WebView にログインする場合も同様です。 セキュリティを確実に適用するために、disallowEmptyPassword プロパティを設定します。
    注:
    LDAP サーバは、各サイトで構成が異なります。 LDAP プロパティを構成するには、LDAP 管理者から LDAP 構成情報をあらかじめ入手しておきます。
    url
    リモート LDAP サーバの URL。
    非 SSL 接続のデフォルト ポートは 389 です。SSL 接続のデフォルト ポートは 636 です。
    SSL を使用する場合は、SSL 用 LDAP ポートをサーバ URL に含める必要があります。
    たとえば、ldap://host:port となります。
    useSSL
    リモート LDAP サーバに接続するために SSL を使用するかどうか。
    オプション: true、false
    bindName
    LDAP コンピュータにバインドするために使用する名前。 未指定の場合、匿名バインドが使用されます。
    たとえば、IntroscopeLDAPUser となります。
    bindPassword
    LDAP コンピュータにバインドするために使用するパスワード。
    このプロパティはオプションです。
    bindName フィールドが空白の場合(匿名バインドを使用)、bindPassword プロパティは無視されます。
    plainTextPasswords
    重要:
    Enterprise Manager が起動するには、realms.xml ファイルにこのプロパティが含まれている必要があります。
    bindPassword がプレーン テキストであるか、暗号化されているかを示します。 このプロパティはオプションです。
    このプロパティがない場合または True に設定されている場合、Enterprise Manager は bindPassword プロパティがプレーン テキストであると見なします。
    デフォルトでは、この値は True に設定されます。つまり、パスワードはプレーン テキストであると見なされます。
    Enterprise Manager は、realms.xml ファイルを読み取り、この値が True に設定されていることを認識すると、以下のアクションを実行します。
      • bindPassword プロパティのプレーン テキスト パスワードを暗号化します。
      • 暗号化したパスワードを使用して realms.xml を書き直します。
      • realms.xml の plainTextPasswords プロパティを False に設定します。
    値が False に設定されている場合、パスワードは暗号化されています。
    bindAuthentication 
    バインド時に使用する認証の種類。
    オプション: none、simple、DIGEST-MD5
    baseDN
    すべてのユーザ オブジェクト クエリのベース識別名(DN)
    オプション: cn=Users、dc=dev、dc=com
    scopeDepth
    ユーザ オブジェクトのクエリを実行するときの検索の深さ。
    usernameAttribute
    Introscope ユーザ名に一致する LDAP 属性の名前。
    たとえば、userPrincipalName となります。
    userObjectQuery
    ユーザ オブジェクトのクエリに使用する LDAP 検索フィルタ。 トークン「%u」は、クエリが実行される前に Introscope ユーザ名で置き換えられます。
    たとえば、(&(userPrincipalName=%u)(objectclass=user)) となります。
    serverCertificate
    証明書ファイルの名前。 サポートされる証明書は、仕様が X.509 でエンコード方式が BASE64 の証明書です。
    指定しない場合、JVM のデフォルト認証局の証明書が使用されます(http://java.sun.com/j2se/1.5/docs/index.html を参照)。
    groupNameAttribute
    Introscope ユーザ名と一致するグループ属性の名前。
    たとえば、cn となります。
    groupObjectQuery
    グループ オブジェクトのクエリに使用する LDAP 検索フィルタ。 トークン「%u」は、クエリが実行される前に Introscope グループ名で置き換えられます。
    たとえば、(&(objectClass=group)(cn={0})) となります。
    groupMemberQuery
    グループ メンバのクエリに使用する LDAP 検索フィルタ。 トークン「%u」は、クエリが実行される前に Introscope グループ メンバで置き換えられます。
    たとえば、(&(objectClass=group)(member={0})) となります。
    disallowEmptyPassword
    ユーザが空のパスワードでログインできないことを要求します。
    disableNestedGroupSearch
    LDAP 認証中に、ユーザが属するグループ内のネストしたグループに対して、LDAP 再帰検索を無効にします。 true に設定すると、LDAP 認証のパフォーマンスを向上させることができます。
    このプロパティはオプションです。
    オプション: true、false デフォルトは false です。
     
  3. 変更を適用するために、realms.xml ファイルへの変更内容を保存し、Enterprise Manager を再起動します。
注:
以下の条件に該当する場合、アップグレード後の手動タスクとして絶対パスを更新します。
  • アップグレード時に Introscope ディレクトリの名前を変更した場合。
  • プロパティ ファイルで Introscope のディレクトリ内のファイルの参照に絶対パスを使用している場合。
この状況を避けるには、Introscope ルート ディレクトリ内部のファイルの参照に相対パスを使用します。
LDAP による認証が有効になった realms.xml 構文
以下は、LDAP が有効になったセキュリティ領域を構成するための
realms.xml
構文の例です。
<?xml version="1.0" encoding="UTF-8"?>
<realms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.1" xsi:noNamespaceSchemaLocation="realms0.1.xsd">
 
    <realm active="true" descriptor="LDAP Realm" id="LDAP">    
        <!-- Set the URL for the remote LDAP server.    -->
        <!-- The url has the format: ldap://server:port -->
        <property name="url">
            <value>ldap://myActiveDirectoryServer.mydomain.com:389</value>
        </property> 
        <!-- Indicate whether SSL is used to connect to the remote LDAP server. -->
        <property name="useSSL">
            <value>false</value>
        </property>
        <!-- The bindName can be set to a name or an empty string;    -->
        <!-- or it can be commented out. If a name is specified,      -->
        <!-- it will be used to bind to the LDAP server. If the name  -->
        <!-- is unspecified (empty string) or the property itself     -->
        <!-- commented out, then an anonymous bind will occur.        -->
        <property name="bindName">
            <value>CN=Automatic Binding User,OU=Groups,DC=myDomain,DC=com</value>
        </property>
        <!-- If we are doing an anonymous bind, then the bindPassword -->
        <!-- property is ignored. Otherwise, this property sets       -->
        <!-- the password to use when binding to the LDAP server.     -->
        <property name="bindPassword">
            <value>secretPassword</value>
        </property>
        <!-- Set to true if the bindPassword is plain text -->
        <!-- If plainTextPasswords is set to true, the Enterprise Manager overwrites this file, -->
        <!-- encrypting the password and setting plainTextPasswords to false -->
        <!-- This property is optional -->
        <!-- Default is true -->
        <property name="plainTextPasswords">
            <value>true</value>
        </property>
        <!-- Set the type of authentication to use when binding.   -->
        <!-- Valid values: none|simple|Digest-MD5                  -->
        <!-- Note than in Introscope 8.0 DIGEST-MD5 support has been -->
        <!-- replaced with Digest-MD5 support.                     -->
        <property name="bindAuthentication">
            <value>simple</value>
        </property>
        <!-- The nameSuffix can be set to a suffix or empty string;   -->
        <!-- or it can be commented out. If a suffix is defined,      -->
        <!-- then the value will be appended to the Introscope user   -->
        <!-- name when dealing with LDAP queries. If the suffix is    -->
        <!-- unspecified (empty string) or the property itself is     -->
        <!-- commented out, then the name suffix will not be appended -->
        <!-- to the user name.                                        -->        
     <!--
        <property name="nameSuffix">
            <value>@dev.com</value>
        </property>
     -->
        <!-- Set the base DN for all user object queries. -->
        <property name="baseDN">
            <value>DC=myDomain,DC=com</value>
        </property>
        <!-- Set the search depth when querying for a user object. -->        
        <!-- Valid values: onelevel|subtree                        -->
        <property name="scopeDepth">
            <value>subtree</value>
        </property>
        <!-- Set the name of the LDAP attribute      -->
        <!-- that will match an Introscope username. -->        
        <property name="usernameAttribute">
            <value>cn</value>
        </property>
        <!-- Set the "LDAP search filter" that is used to query a user object.  -->
        <!-- The tokens "%u" and "{0}" (no quotes) will be filled in with the   -->
        <!-- Introscope username before the query executes.                     -->
        <!-- All XML special characters in the query must be escaped:           -->
        <!--   Use &amp; to indicate an ampersand, &                            -->
        <!--   Use &lt; to indicate a left angle ("less than") character        -->
        <!--   Use &gt; to indicate a right angle ("greater than") character    -->
        <!--   Use &quot; to indicate a quotation mark, "                       -->
        <!--   Use &apos; to indicate an apostrophe, '                          -->
        <property name="userObjectQuery">
            <value>(&amp;(objectClass=organizationalPerson)(cn={0}))</value>
        </property>
        <!-- Optionally set the name of the LDAP attribute  -->
        <!-- to use as the group name.                      -->  
    <!--  
        <property name="groupNameAttribute">
           <value>cn</value>
        </property>
    -->
        <!-- Optionally set a search filter to match LDAP groups for a member.  -->
        <!-- The tokens "%u" and "{0}" (no quotes) will be replaced by the      -->
        <!-- member's distinguished name.                                       -->
        <!-- All XML special characters in the query must be escaped. See       -->
        <!-- comments for userObjectQuery property above.                       -->
     <!--
        <property name="groupMemberQuery">
            <value>(&amp;(objectClass=groupOfUniqueNames)(uniquemember=%u))</value>
        </property>
     -->
        <!-- Set the search filter used to match an LDAP group name.            -->
        <!-- The tokens "%g" and "{0}" (no quotes) will be replaced by the      -->
        <!-- group name before the query executes.                              -->
        <!-- All XML special characters in the query must be escaped. See       -->
        <!-- comments for userObjectQuery property above.                       -->
     <!--
        <property name="groupObjectQuery">
            <value>(&amp;(objectClass=groupOfUniqueNames)(cn=%g))</value>
        </property>
     -->
        <!-- When using SSL, specify the full path name of -->
        <!-- the LDAP Server Certificate (if available).   -->
     <!-- It is not necessary to escape backslashes.    -->
     <!--
        <property name="serverCertificate">
            <value>C:\path\to\my\cert\cert.cer</value>
        </property>       
     -->
        property name="disallowEmptyPassword">
            <value>true</value>
        </property>
    </realm>
</realms>
異なる証明書を使用する複数の LDAP サーバ用の realms.xml 構文
複数の LDAP サーバに互換性のない異なる証明書がある場合、realms.xml を設定して適切にバインドできます。
この例では、host1 という名前の単一の LDAP ホスト(SSL 用にポート 636 を使用)が LDAP 認証を実行します。 host1 には、host1.pem という証明書が realms.xml にあります。 同じポート 636 を使用する host2 という別のホストを追加します。 realms.xml 内の host2 の証明書は host2.pem で、host1.pem 証明書と互換性がありません。
serverCertificate 値を host1.pem として設定すると、バインド操作が host2 ではなく host1 で行われます。 serverCertificate の値を host2.pem に設定すると、バインド操作が host1 ではなく host2 に対して行われます。
この問題を回避するには、以下の例のように realms.xml を設定します。
<property name="url">
<value>ldap://host1.net:636 ldap://host2.net:636</value>
</property>
 
<property name="serverCertificate">
   <VALUE>CONFIG/host1.PEM</VALUE>
   <VALUE>CONFIG/host2.PEM</VALUE>
</property>
この設定では、バインド操作が host1 および host2 の両方に対して行われます。
 
IBM Directory Server 用の realms.xml 構文
以下に示す
realms.xml
は、SSL を有効にして IBM Directory Server を使用する場合の LDAP プロパティの構成例です。
注:
以下のコード サンプルは例にすぎないことに注意してください。各サイトの LDAP サーバは、それぞれ構成が異なります。
<?xml version="1.0" encoding="UTF-8"?>
<realms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.1" xsi:noNamespaceSchemaLocation="realms0.1.xsd">
<realm active="true" descriptor="LDAP Realm" id="LDAP">
<property name="url">
<value>ldap://machine01.co.com:123</value>
</property>
<property name="serverCertificate">
<value/>
</property>
<property name="bindPassword">
<value>jon</value>
</property>
<property name="useSSL">
<value>false</value>
</property>
<property name="userObjectQuery">
<value>(&amp;(objectClass=organizationalPerson)(cn={0})) </value>
</property>
<property name="groupNameAttribute">
           <value>cn</value>
        </property>
        <property name="groupObjectQuery">
           <value>(&amp;(objectClass=organizationalUnit)(cn={0}))</value>
        </property>
        <property name="groupMemberQuery">
           <value>(&amp;(objectClass=groupofNames)(member={0}))</value>
        </property>
<property name="bindAuthentication">
<value>simple</value>
</property>
<property name="bindName">
<value>cn=Jon Doe,ou=Groups,o=unitTest</value>
</property>
<property name="usernameAttribute">
<value>cn</value>
</property>
<property name="scopeDepth">
<value>subtree</value>
</property>
</realm>
</realms>
Sun ONE Directory Server 用の realms.xml 構文
以下に示す
realms.xml
は、SSL を有効にして Sun ONE Directory Server を使用する場合の LDAP プロパティの構成例です。
注:
以下のコード サンプルは例にすぎないことに注意してください。各サイトの LDAP サーバは、それぞれ構成が異なります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<realms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.1" xsi:noNamespaceSchemaLocation="realms0.1.xsd">
    <realm active="true" id="Introscope LDAP Realm" descriptor="LDAP Realm">
        <property name="bindName">
           <value>uid=User01,ou=Users,dc=co,dc=com</value>
        </property>
        <property name="scopeDepth">
           <value>subtree</value>
        </property>
        <property name="baseDN">
           <value>DC=co,DC=com</value>
        </property>
        <property name="bindPassword">
           <value>jim</value>
        </property>
        <property name="url">
           <value>ldap://123serv01.company.com:389</value>
        </property>
        <property name="usernameAttribute">
           <value>cn</value>
        </property>
        <property name="userObjectQuery">
           <value>(&amp;(objectClass=organizationalPerson)(cn={0}))</value>
        </property>
        <property name="groupNameAttribute">
           <value>cn</value>
        </property>
        <property name="groupObjectQuery">
           <value>(&amp;(objectClass=group)(cn={0}))</value>
        </property>
        <property name="groupMemberQuery">
           <value>(&amp;(objectClass=group)(member={0}))</value>
        </property>
        <property name="useSSL">
           <value>false</value>
        </property>
        <property name="bindAuthentication">
           <value>simple</value>
        </property>
        <property name="serverCertificate">
           <value/>
        </property>
    </realm>
</realms>
Microsoft Active Directory 用の realms.xml 構文
以下に示す
realms.xml
は、SSL を有効にして Microsoft Active Directory を使用する場合の LDAP プロパティの構成例です。
注:
以下のコード サンプルは例にすぎないことに注意してください。各サイトの LDAP サーバは、それぞれ構成が異なります。
<?xml version="1.0" encoding="UTF-8"?>
<realms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.1" xsi:noNamespaceSchemaLocation="realms0.1.xsd">
   
<realm active="true" descriptor="LDAP Realm" id="LDAP">
<property name="url">
<value>ldap://123serv01.company.com:389:389</value>
</property>
<property name="serverCertificate">
<value/>
</property>
<property name="bindPassword">
<value>Password4bindPassword</value>
</property>
<property name="useSSL">
<value>false</value>
</property>
<property name="userObjectQuery">
<value>(&amp;(objectClass=organizationalPerson)(cn={0})) </value>
</property>
<property name="baseDN">
<value>DC=ad-dev-02,DC=com</value>
</property>
<property name="bindAuthentication">
<value>simple</value>
</property>
<property name="bindName">
<value>CN=Jon Doe,cn=Users,DC=ad-dev-02,DC=com</value>
</property>
<property name="usernameAttribute">
<value>cn</value>
</property>
<property name="scopeDepth">
<value>subtree</value>
</property>
</realm>
</realms>