12.10. 데이터 소스 보안

데이터 소스 보안은 데이터 소스 연결에 대한 암호 암호화 또는 모호성을 나타냅니다. 이러한 암호는 구성 파일의 일반 텍스트로 저장할 수 있지만 이는 보안 위험을 나타냅니다.

데이터 소스 보안에 사용할 수 있는 몇 가지 방법이 있습니다. 다음은 각 예제가 포함되어 있습니다.

참고

레거시 보안 하위 시스템을 사용하는 경우 LDAP를 사용하여 데이터 소스 연결을 인증하고 승인하도록 보안 도메인을 구성할 수 있습니다. 보안 도메인 구성에 대한 자세한 내용은 보안 도메인 구성을 참조하십시오.

보안 도메인을 사용하여 데이터 소스 보안

다음 단계를 사용하여 보안 도메인을 사용하여 데이터 소스를 보호합니다.

  1. 새 보안 도메인을 생성합니다.

    /subsystem=security/security-domain=DsRealm:add(cache-type=default)
    /subsystem=security/security-domain=DsRealm/authentication=classic:add(login-modules=[{code=ConfiguredIdentity,flag=required,module-options={userName=sa,
    principal=sa, password=sa}}])

    데이터 소스의 보안 도메인이 정의됩니다. 다음 XML 추출은 CLI 명령을 호출한 결과입니다.

     <security-domain name="DsRealm" cache-type="default">
      <authentication>
        <login-module code="ConfiguredIdentity" flag="required">
          <module-option name="userName" value="sa"/>
          <module-option name="principal" value="sa"/>
          <module-option name="password" value="sa"/>
        </login-module>
      </authentication>
    </security-domain>
  2. 새 데이터 소스를 추가합니다.

    data-source add --name=securityDs
    --jndi-name=java:jboss/datasources/securityDs
    --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --driver-name=h2
    --new-connection-sql="select current_user()"
  3. 데이터 소스에 보안 도메인을 설정합니다.

    data-source --name=securityDs --security-domain=DsRealm
  4. 변경 사항이 적용되도록 서버를 다시 로드합니다.

    reload
참고

여러 데이터 소스가 포함된 보안 도메인을 사용하는 경우 보안 도메인에서 캐싱을 비활성화합니다. 이 작업은 cache-type 속성 값을 none 으로 설정하거나 속성을 모두 제거하여 수행할 수 있지만 캐싱이 필요한 경우 각 데이터 소스에 대해 별도의 보안 도메인을 사용합니다.

다음 XML 추출에서는 DsRealm 으로 보안된 데이터 소스를 보여줍니다.

<datasources>
  <datasource jndi-name="java:jboss/datasources/securityDs"
    pool-name="securityDs">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
      <driver>h2</driver>
      <new-connection-sql>select current_user()</new-connection-sql>
      <security>
        <security-domain>DsRealm</security-domain>
      </security>
    </datasource>
</datasources>

보안 도메인 사용에 대한 자세한 내용은 ID 관리 구성 방법을 참조하십시오.

암호 Vault를 사용하여 데이터 소스 보안

암호 자격 증명 모음을 사용하여 데이터 소스를 보호하려면 다음 단계를 사용합니다.

  1. ExampleDS 데이터 소스에 대한 암호 자격 증명 모음을 설정합니다.

    data-source --name=ExampleDS
    --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}
  2. 서버를 다시 로드하여 변경 사항을 구현합니다.

    reload

다음 XML 보안 요소는 암호 자격 증명 모음으로 보안된 ExampleDS 데이터 소스에 추가됩니다.

<security>
  <user-name>admin</user-name>
  <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>

암호 자격 증명 모음 사용에 대한 자세한 내용은 JBoss EAP 구성 서버 보안 가이드의 Password Vault 섹션을 참조하십시오.

자격 증명 저장소를 사용하여 데이터 소스 보안

자격 증명 저장소를 사용하여 암호를 제공할 수도 있습니다. elytron 하위 시스템은 JBoss EAP 전체에서 암호를 안전하게 보관하고 사용할 수 있도록 자격 증명 저장소를 만들 수 있는 기능을 제공합니다. JBoss EAP의 Credential Store (자격 증명 저장소) 섹션에서 자격 증명 저장소 생성 및 사용에 대한 자세한 내용은 JBoss EAP 구성 방법 가이드에서 확인할 수 있습니다.

ExampleDS에 자격 증명 저장소 참조 추가

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=credential-reference,value={store=exampleCS, alias=example-ds-pw})

인증 컨텍스트를 사용하여 데이터 소스 보안

Elytron 인증 컨텍스트를 사용하여 사용자 이름과 암호를 제공할 수도 있습니다.

다음 단계를 사용하여 데이터 소스 보안에 대한 인증 컨텍스트를 구성하고 사용합니다.

  1. passworduser-name 을 제거합니다.

    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password)
    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)
  2. 데이터 소스에 대해 Elytron 보안을 활성화합니다.

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true)
    
    reload
  3. 자격 증명에 대한 인증 구성을 만듭니다.

    인증 구성에는 데이터 소스를 연결할 때 사용할 자격 증명이 포함되어 있습니다. 아래 예제에서는 자격 증명 저장소에 대한 참조를 사용하지만 Elytron 보안 도메인을 사용할 수도 있습니다.

    /subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})
  4. authentication-context 를 만듭니다.

    /subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])
  5. 인증 컨텍스트를 사용하도록 데이터 소스를 업데이트합니다.

    아래 예제에서는 인증 컨텍스트를 사용하도록 ExampleDS 를 업데이트합니다.

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=authentication-context,value=exampleAuthContext)
    
    reload
    참고

    authentication-context 속성이 설정되지 않고 elytron-enabled 속성이 true 로 설정된 경우 JBoss EAP는 인증에 현재 컨텍스트를 사용합니다.

Kerberos를 사용하여 데이터 소스 보안

kerberos 인증을 사용하여 데이터 소스를 보호하려면 다음 설정이 필요합니다.

  • Kerberos는 데이터베이스 서버에 구성되어 있습니다.
  • JBoss EAP 호스트 서버에는 데이터베이스 서버에 대한 keytab 항목이 있습니다.

kerberos를 사용하여 데이터 소스를 보호하려면 다음을 수행합니다.

  1. kerberos를 사용하도록 JBoss EAP 구성.

    /system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf")
    /system-property=sun.security.krb5.debug:add(value="false")
    /system-property=sun.security.spnego.debug:add(value="false")

    디버깅을 위해 sun.security.krb5.debug 및 sun. security.spnego.debug 값을 true 로 변경합니다. 프로덕션 환경에서는 값을 false 로 설정하는 것이 좋습니다.

  2. 보안 구성.

    레거시 보안 또는 Elytron 보안을 사용하여 데이터 소스를 보호할 수 있습니다.

    • 기존 보안과 함께 kerberos를 사용하려면 다음을 수행합니다.

      1. 캐시에서 만료된 티켓을 정기적으로 제거하도록 infinispan 캐시를 구성합니다.

        batch
        /subsystem=infinispan/cache-container=security:add(default-cache=auth-cache)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache:add()
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/expiration=EXPIRATION:add(lifespan=3540000,max-idle=3540000)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/memory=object:add(size=1000)
        run-batch

        다음 속성은 티켓 만료를 정의합니다.

        • lifespan: KDC에서 새 인증서를 요청하는 간격(밀리초). life 속성의 값을 KDC에서 정의한 수명보다 작게 설정합니다.
        • max-idle: 사용하지 않는 경우 캐시에서 유효한 티켓을 제거해야 하는 간격(밀리초).
        • max-entries: 캐시에 보관할 kerberos 티켓의 최대 사본 수입니다. 값은 데이터 소스에서 구성된 연결 수에 해당합니다.
      2. 보안 도메인을 생성합니다.

        batch
        /subsystem=security/security-domain=KerberosDatabase:add(cache-type=infinispan)
        /subsystem=security/security-domain=KerberosDatabase/authentication=classic:add
        /subsystem=security/security-domain=KerberosDatabase/authentication=classic/login-module="KerberosDatabase-Module":add(code="org.jboss.security.negotiation.KerberosLoginModule",module="org.jboss.security.negotiation",flag=required, module-options={ "debug" => "false", "storeKey" => "false", "useKeyTab" => "true", "keyTab" => "/path/to/eap.keytab", "principal" => "PRINCIPAL@SERVER.COM", "doNotPrompt" => "true", "refreshKrb5Config" => "true", "isInitiator" => "true", "addGSSCredential" => "true", "credentialLifetime" => "-1"})
        run-batch
        • SQL 서버에 Microsoft JDBC 드라이버를 사용하는 경우 module-options 에서 특성과 값 "wrapGSSCredential"을 "true" 를 추가합니다.
        • 디버깅의 경우 module-options 에서 debug 속성 값을 true 로 변경합니다.
    • Elytron과 함께 kerberos를 사용하려면 다음을 수행합니다.

      1. Elytron에 kerberos 팩토리 설치.

        /subsystem=elytron/kerberos-security-factory=krbsf:add(debug=false, principal=PRINCIPAL@SERVER.COM, path=/path/to/keytab, request-lifetime=-1, obtain-kerberos-ticket=true, server=false)
      2. kerberos 팩토리를 사용할 인증 구성을 만듭니다.

        /subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)
      3. 인증 컨텍스트 생성.

        /subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])
  3. kerberos를 사용하여 데이터 소스를 보호합니다.

    • 레거시 보안을 사용하는 경우:

      1. 보안 도메인을 사용하도록 데이터 소스를 구성합니다.

        /subsystem=datasources/data-source=KerberosDS:add(connection-url="URL", min-pool-size=0, max-pool-size=10, jndi-name="java:jboss/datasource/KerberosDS", driver-name=<jdbc-driver>.jar, security-domain=KerberosDatabase, allow-multiple-users=false, pool-prefill=false, pool-use-strict-min=false, idle-timeout-minutes=2)
      2. 공급업체별 연결 속성 구성.

        /subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")

        예: Oracle 데이터베이스의 연결 속성.

        /subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")
    • Elytron을 사용하는 경우:

      1. 인증 컨텍스트를 사용하도록 데이터 소스를 구성합니다.

        /subsystem=datasources/data-source=KerberosDS:add(connection-url="URL", min-pool-size=0, max-pool-size=10, jndi-name="java:jboss/datasource/KerberosDS", driver-name=<jdbc-driver>.jar, elytron-enabled=true, authentication-context=ds-context, allow-multiple-users=false, pool-prefill=false, pool-use-strict-min=false, idle-timeout-minutes=2)
      2. 공급업체별 연결 속성 구성.

        /subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")

        예: Oracle 데이터베이스 연결 속성

        /subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")

      kerberos 인증을 사용하는 경우 데이터 소스에 다음 속성과 값을 사용하는 것이 좋습니다.

      • pool-prefill=false
      • pool-use-strict-min=false
      • idle-timeout-minutes

    지원되는 속성 목록은 데이터 소스 속성에서 참조하십시오.