Kerberos 認証を使用するCData Virtuality Server の構成を開始する前に、CData Virtuality Server Kerberos 認証のpre-requisites がすべて満たされていることを確認してください。

Version 4.9 and Above

Configuration in the Main CData Virtuality Server Configuration File

CData Virtuality 4.9 以上の場合、サーバーはKerberos 用にElytron ベースの設定をサポートします。Kerberos 認証の設定は、CData Virtuality Server のメイン設定ファイルで行います:path\to\DVServer\standalone\configuration\dvserver-standalone.xml

Note: If you are upgrading from a previous version, migrate your old security logic to the new Elytron subsystem configuration.

system-properties

  1. <system-properties> 要素を探します;

  2. その要素で、以下のエントリを既存のエントリに追加します(<realm> はKerberos レルムの名前であることに注意してください):

<system-properties>
<property name="java.security.krb5.conf" value="<path to krb5.conf>"/>
<property name="javax.security.auth.useSubjectCredsOnly" value="false"/>
<property name="sun.security.jgss.native" value="false"/>
</system-properties>

以下に構成例を示します:

<system-properties>
...
<property name="java.security.krb5.conf" value="C:\datavirtuality\krb5.conf"/>
<property name="javax.security.auth.useSubjectCredsOnly" value="false"/>
<property name="sun.security.jgss.native" value="false"/>
</system-properties>

Elytron Subsystem Configuration

Kerberos Security Factory

  1. dvserver-standalone.xml<subsystem xmlns="urn:wildfly:elytron:9.0"> セクションを探します。

  2. <credential-security-factories> セクションの下に、プリンシパルとキータブを参照する<kerberos-security-factory> を追加します:

<credential-security-factories>
<kerberos-security-factory name="dv-kerberos-factory"
principal="DVServer/<principal as mapped in keyfile. machine@realm notation>"
path="<path/to/keytab>">
<option name="credsType" value="both"/>
</kerberos-security-factories>
</credential-security-factories>

以下に構成例を示します:

<credential-security-factories>
<kerberos-security-factory name="dv-kerberos-factory"
principal="DVServer/[email protected]"
path="C:\datavirtuality\dvsvc01.keytab">
<option name="credsType" value="both"/>
</kerberos-security-factories>
</credential-security-factories>

LDAP Realm (more details about LDAP configuration can be found here)

<custom-realm class-name="com.datavirtuality.dv.core.teiid.users.DVLoginModule" module="com.datavirtuality.dv" name="DataVirtualityRealm"/>

を見つけ、次のコードに置き換えてください:

<ldap-realm dir-context="ldap-connection" direct-verification="true" name="DataVirtualityRealm">
<identity-mapping rdn-identifier="cn" search-base-dn="DC=,DC=" use-recursive-search="true">
<attribute-mapping>
<attribute filter="(member={1})" filter-base-dn="OU=,DC=,DC=" from="cn" to="Roles"/>
</attribute-mapping>
</identity-mapping>
</ldap-realm>

以下に構成例を示します:

<ldap-realm dir-context="ldap-connection" direct-verification="true" name="DataVirtualityRealm">
<identity-mapping rdn-identifier="cn" search-base-dn="DC=KRBTEST,DC=DV" use-recursive-search="true">
<attribute-mapping>
<attribute filter="(member={1})" filter-base-dn="OU=dv-user-accounts,DC=KRBTEST,DC=DV" from="cn" to="Roles"/>
</attribute-mapping>
</identity-mapping>
</ldap-realm>

</expression-resolver> タグを見つけ、次のコードを貼り付けます。まず必要な部分を自分の値に置き換えてください:

<dir-contexts>
<dir-context name="ldap-connection" principal="CN=Administrator,CN=Users,DC=KRBTEST,DC=DV" url="<ldap (dc) machine name - fqdn>">
<credential-reference clear-text="<password>"/>
</dir-context>
</dir-contexts>

</policy-decider-module> タグを見つけ、次のコードを挿入してください:

<ldap>
<property name="defaultAdminGroup" value="dv-admin-role"/>
<property name="displayUserName" value="cn"/>
<property name="roleRecursion" value="5"/>
</ldap>

Transport

  1.  <subsystem xmlns="urn:jboss:domain:teiid:1.1"> 要素を探します。

  2. その要素の中で、<transport> 要素を含むセクションを見つけます。

  3. そのセクションに、JDBC とODBC のKerberos 対応トランスポート構成を追加します:

<transport name="jdbc-krb" protocol="teiid" socket-binding="dv-jdbc-krb">
<authentication
security-domain="<security domain name>"
type="GSS"
krb5-security-factory="<kerberos factory name>"/>
</transport>
<transport name="odbc-krb" socket-binding="dv-odbc-krb" protocol="pg">
<authentication
security-domain="<security domain name>"
type="GSS"
krb5-security-factory="<kerberos factory name>"/>
<ssl mode="disabled"/>
</transport>

以下はその例です:

<transport name="jdbc-krb" protocol="teiid" socket-binding="dv-jdbc-krb">
<authentication
security-domain="dv-security"
type="GSS"
krb5-security-factory="dv-kerberos-factory"/>
</transport>
<transport name="odbc-krb" socket-binding="dv-odbc-krb" protocol="pg">
<authentication
security-domain="dv-security"
type="GSS"
krb5-security-factory="dv-kerberos-factory"/>
<ssl mode="disabled"/>
</transport>

この設定により、以下のことが可能になります:

  1. AD キータブを使用して(Kerberos ファクトリー経由で)受信Kerberos チケットを検証します;

  2. AD LDAP からグループメンバーシップを取得します(dv-security セキュリティドメインで使用される<ldap-realm> 経由)。

Socket-binding/ports

  1. <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">. 要素を探します。

  2. その要素の中に、Kerberos 対応ポートの構成を追加します:

<socket-binding name="dv-jdbc-krb" port="31002"/>
<socket-binding name="dv-odbc-krb" port="35434"/>

Version 4.8 and Below

Configuration in the Main CData Virtuality Server Configuration File

Kerberos 認証の設定は、CData Virtuality Server のメイン設定ファイルで行います:path\to\DVServer\standalone\configuration\dvserver-standalone.xml

コンフィギュレーションはファイル内の4つのエリアで行われます:

  • system-properties エリアに、エントリが追加されます;

  • security-domains エリアに、既存のエントリが1つ置き換えられ、新しいエントリが2つ追加されます;

  • transport エリアに、2つのエントリが追加されます;

  • socket-binding エリアに、2つのエントリが追加されています;

system-properties

  1. <system-properties> 要素を探します。

  2. その要素に、以下のエントリを既存のエントリに追加します(<realm> はKerberos レルムの名前であることに注意してください):

<system-properties>
  <property name="java.security.krb5.realm" value="<REALM>"/>
  <property name="java.security.krb5.kdc" value="<kdc machine name - fqdn>"/>
<property name="javax.security.auth.useSubjectCredsOnly" value="false"/>
<property name="sun.security.jgss.native" value="false"/>
</system-properties>

以下に構成例を示します:

<system-properties>
...
<property name="java.security.krb5.realm" value="KRBTEST.DV"/>
<property name="java.security.krb5.kdc" value="DVDC01.KRBTEST.DV"/>
<property name="javax.security.auth.useSubjectCredsOnly" value="false"/>
<property name="sun.security.jgss.native" value="false"/>
</system-properties>

security-domains

  1. <subsystem xmlns="urn:jboss:domain:security:2.0"> 要素を探します。

  2. その要素の中で、<security-domain name="dv-security" cache-type="default"> 要素を見つけます。

  3. <security-domain name="dv-security" cache-type="default"> 要素を以下の3つの要素に置き換えてください:

    1. <security-domain name="dv-security"> 

    2. <security-domain name="<realm>"

    3. <security-domain name="dv-security-krb">

要素名dv-securitydv-security-krb は、あなたの設定に合わせることなく、ここで示された名前を持ち、要素名<realm> は、あなたの環境におけるKerberos レルムの名前であることに注意してください。

以下は、3つのセキュリティドメインの一般的な構成です:

  • dv-security 

<security-domain name="dv-security" cache-type="default">
    <authentication>
        <login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" flag="requisite" module="com.datavirtuality.dv">
            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
            <module-option name="java.naming.provider.url" value="ldap(s)://<ldap (dc) machine name - fqdn>:389|636"/>
            <module-option name="java.naming.security.authentication" value="simple"/>
            <module-option name="java.naming.security.principal" value=""/>
            <module-option name="java.naming.security.credentials" value="***"/>
            <module-option name="bindDN" value=""/>
            <module-option name="bindCredential" value="***"/>
            <module-option name="baseCtxDN" value="<...>"/>
            <module-option name="baseFilter" value="(cn={0})"/>
            <module-option name="rolesCtxDN" value="<...>"/>
            <module-option name="roleFilter" value="(member={1})"/>
            <module-option name="roleAttributeID" value="cn"/>                    
            <module-option name="allowEmptyPasswords" value="false"/>
            <module-option name="defaultAdminGroup" value="<...>"/>
        </login-module>
    </authentication>
</security-domain>
  •  <realm>

<security-domain name="<realm>">
<authentication>
<login-module code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="serverSecurityDomain" value="dv-security-krb"/>
<module-option name="removeRealmFromPrincipal" value="true"/>
</login-module>
<login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" flag="requisite" module="com.datavirtuality.dv">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
           <module-option name="java.naming.provider.url" value="ldap(s)://<ldap (dc) machine name - fqdn>:389|636"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="java.naming.security.principal" value=""/>
<module-option name="java.naming.security.credentials" value="***"/>
<module-option name="bindDN" value=""/>
<module-option name="bindCredential" value="***"/>
<module-option name="baseCtxDN" value="<...>"/>
<module-option name="baseFilter" value="(cn={0})"/>
<module-option name="rolesCtxDN" value="<...>"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="allowEmptyPasswords" value="false"/>
<module-option name="defaultAdminGroup" value="<...>"/>
</login-module>
</authentication>
</security-domain>
  • dv-security-krb

<security-domain name="dv-security-krb">
    <authentication>
        <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="requisite" module="org.jboss.security.negotiation">
            <module-option name="storeKey" value="true"/>
            <module-option name="useKeyTab" value="true"/>
            <module-option name="principal" value="DVServer/<principal as mapped in keyfile. machine@realm notation>"/>
            <module-option name="keyTab" value="<path/to/keytab">/>
            <module-option name="doNotPrompt" value="true"/>
            <module-option name="tryFirstPass" value="true"/>        
        </login-module>
    </authentication>
</security-domain>

security-domainの3つの要素の設定例です:

<security-domain name="dv-security" cache-type="default">
<authentication>
<login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" flag="requisite" module="com.datavirtuality.dv">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://dc01.krbtest.dv:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="java.naming.security.principal" value="[email protected]"/>
<module-option name="java.naming.security.credentials" value="***"/>
<module-option name="bindDN" value="[email protected]"/>
<module-option name="bindCredential" value="***"/>
<module-option name="baseCtxDN" value="ou=dv-user-accounts,dc=KRBTEST,dc=DV"/>
<module-option name="baseFilter" value="(CN={0})"/>
<module-option name="rolesCtxDN" value="ou=dv-roles,DC=KRBTEST,DC=DV"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="allowEmptyPasswords" value="false"/>
<module-option name="defaultAdminGroup" value="dv-admin-role"/>
</login-module>
</authentication>
</security-domain>
 
<security-domain name="KRBTEST.DV">
<authentication>
<login-module code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="serverSecurityDomain" value="dv-security-krb"/>
<module-option name="removeRealmFromPrincipal" value="true"/>
</login-module>
<login-module code="com.datavirtuality.dv.core.teiid.users.ldap.ext.DVLdapExtLoginModule" flag="requisite" module="com.datavirtuality.dv">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://dc01.krbtest.dv:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="java.naming.security.principal" value="[email protected]"/>
<module-option name="java.naming.security.credentials" value="***"/>
<module-option name="bindDN" value="[email protected]"/>
<module-option name="bindCredential" value="***"/>
<module-option name="baseCtxDN" value="ou=dv-user-accounts,dc=KRBTEST,dc=DV"/>
<module-option name="baseFilter" value="(CN={0})"/>
<module-option name="rolesCtxDN" value="ou=dv-roles,DC=KRBTEST,DC=DV"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="allowEmptyPasswords" value="false"/>
<module-option name="defaultAdminGroup" value="dv-admin-role"/>
</login-module>
</authentication>
</security-domain>
 
<security-domain name="dv-security-krb">
<authentication>
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="requisite" module="org.jboss.security.negotiation">
<module-option name="storeKey" value="true"/>
<module-option name="useKeyTab" value="true"/>
<module-option name="principal" value="DVServer/[email protected]"/>
<module-option name="keyTab" value="C:\datavirtuality\dvsvc01.keytab"/>
<module-option name="doNotPrompt" value="true"/>
<module-option name="tryFirstPass" value="true"/>
</login-module>
</authentication>
</security-domain>

Transport

  1.  <subsystem xmlns="urn:jboss:domain:teiid:1.1">. 要素を探します。

  2. その要素の中で、<transport> 要素を含むセクションを見つけます。

  3. そのセクションに、JDBC とODBC のKerberos 対応トランスポート構成を追加します:

<transport name="jdbc-krb" socket-binding="dv-jdbc-krb" protocol="teiid">
<authentication security-domain="<realm>" type="GSS"/>
</transport>
<transport name="odbc-krb" socket-binding="dv-odbc-krb" protocol="pg">
<authentication security-domain="<realm>" type="GSS"/>
<ssl mode="disabled"/>
</transport>

以下はその例です:

<transport name="jdbc-krb" socket-binding="dv-jdbc-krb" protocol="teiid">
<authentication security-domain="KRBTEST.DV" type="GSS"/>
</transport>
<transport name="odbc-krb" socket-binding="dv-odbc-krb" protocol="pg">
<authentication security-domain="KRBTEST.DV" type="GSS"/>
<ssl mode="disabled"/>
</transport>

Socket-binding/ports

  1. <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">. 要素を探します。

  2. その要素の中に、Kerberos 対応ポートの構成を追加します:

<socket-binding name="dv-jdbc-krb" port="31002"/>
<socket-binding name="dv-odbc-krb" port="35434"/>