11.10. 데이터 소스 보안
데이터 소스 보안은 데이터 소스 연결에 대한 암호를 암호화하거나 모호하게 하는 것을 나타냅니다. 이러한 암호는 구성 파일의 일반 텍스트로 저장할 수 있지만 이는 보안 위험을 나타냅니다.
데이터 소스 보안에 사용할 수 있는 몇 가지 방법이 있습니다. 각각에 대한 예는 아래에 포함되어 있습니다.
보안 도메인을 사용하여 데이터 소스 보안
보안 도메인을 사용하여 데이터 소스를 보호하려면 다음 단계를 사용합니다.
새 보안 도메인을 생성합니다.
/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>새 데이터 소스를 추가합니다.
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()"데이터 소스에 보안 도메인을 설정합니다.
data-source --name=securityDs --security-domain=DsRealm변경 사항을 적용하려면 서버를 다시 로드합니다.
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>
보안 도메인 사용에 대한 자세한 내용은 Identity Management 구성 방법을 참조하십시오.
암호 자격 증명 모음을 사용하여 데이터 소스 보안
다음 단계를 사용하여 암호 자격 증명 모음을 사용하여 데이터 소스를 보호합니다.
ExampleDS 데이터 소스에 대한 암호 자격 증명 모음을 설정합니다.
data-source --name=ExampleDS --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}서버를 다시 로드하여 변경 사항을 구현합니다.
reload
다음 XML 보안 요소가 암호 자격 증명 모음으로 보안된 ExampleDS 데이터 소스에 추가됩니다.
<security>
<user-name>admin</user-name>
<password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>
Password Vault 사용에 대한 자세한 내용은 JBoss EAP 서버 보안 구성 가이드의 Password Vault 섹션을 참조하십시오.
인증 정보 저장소를 사용하여 데이터 소스 보안
인증 정보 저장소를 사용하여 암호를 제공할 수도 있습니다. elytron 하위 시스템은 JBoss EAP 전체에서 암호를 안전하게 저장하고 사용할 수 있도록 자격 증명 저장소를 생성하는 기능을 제공합니다. 자격 증명 저장소 생성 및 사용에 대한 자세한 내용은 JBoss EAP 서버 보안 구성 가이드의 자격 증명 저장소 섹션에서 확인할 수 있습니다.
ExampleDS에 인증 정보 저장소 참조 추가
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=credential-reference,value={store=exampleCS, alias=example-ds-pw})
인증 컨텍스트를 사용하여 데이터 소스 보안
Elytron 인증 컨텍스트를 사용하여 사용자 이름과 암호를 제공할 수도 있습니다.
다음 단계를 사용하여 데이터 소스 보안에 대한 인증 컨텍스트를 구성하고 사용합니다.
암호및사용자 이름제거/subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password) /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)데이터 소스에 대해 Elytron 보안을 활성화합니다.
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true) reload인증 정보에 대한 인증 구성을 생성합니다.인증 구성에는 데이터 소스가 연결할 때 사용할 자격 증명이 포함되어 있습니다. 다음 예제에서는 인증 정보 저장소에 대한 참조를 사용하지만 Elytron 보안 도메인을 사용할 수도 있습니다.
/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})authentication-context를 생성합니다./subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])인증 컨텍스트를 사용하도록 데이터 소스를 업데이트합니다.
다음 예제에서는 인증 컨텍스트를 사용하도록
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 호스트 서버에는 데이터베이스 서버의 키탭 항목이 있습니다.
kerberos를 사용하여 데이터 소스를 보호하려면 다음을 수행합니다.
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로 설정하는 것이 좋습니다.보안을 구성합니다.
레거시 보안 또는 Elytron 보안을 사용하여 데이터 소스를 보호할 수 있습니다.
레거시 보안과 함께 kerberos를 사용하려면 다음을 수행합니다.
캐시에서 만료된 티켓을 정기적으로 제거하도록 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에서 새 인증서를 요청하는 간격(밀리초)입니다.lifespan속성의 값을 KDC에서 정의한 라이프사이클보다 작아야 합니다. -
max-idle: 사용되지 않는 경우 유효한 티켓을 캐시에서 제거해야 하는 간격(밀리초)입니다. -
Max-entries: 캐시에 보관해야 할 kerberos 티켓의 최대 수입니다. 값은 데이터 소스에서 구성된 연결 수에 해당합니다.
-
보안 도메인을 생성합니다.
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" Cryostat "true"로 추가합니다. -
디버깅의 경우
module-options의debug속성 값을true로 변경합니다.
-
SQL 서버에 Microsoft JDBC 드라이버를 사용하는 경우
Elytron과 함께 kerberos를 사용하려면 다음을 수행합니다.
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)디버깅의 경우 속성 및 값
debug = true를 추가합니다.지원되는 속성 목록은 서버 보안 구성 가이드의 Kerberos Security Cryostat 특성 섹션을 참조하십시오.
kerberos 팩토리를 사용하도록 인증 구성을 생성합니다.
/subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)인증 컨텍스트를 생성합니다.
/subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])
kerberos를 사용하여 데이터 소스를 보호합니다.
Elytron을 사용하는 경우:
인증 컨텍스트를 사용하도록 데이터 소스를 구성합니다.
/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)벤더별 연결 속성을 구성합니다.
/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
지원되는 속성 목록은 데이터 소스 특성을 참조하십시오.