11.10. 데이터 소스 보안
데이터 소스 보안은 데이터 소스 연결에 대한 암호를 암호화하거나 모호하게 하는 것을 나타냅니다. 이러한 암호는 구성 파일의 일반 텍스트로 저장할 수 있지만 이는 보안 위험을 나타냅니다.
데이터 소스 보안에 사용할 수 있는 몇 가지 방법이 있습니다. 각각에 대한 예는 아래에 포함되어 있습니다.
- 보안 도메인을 사용하여 데이터 소스 보안
보안 도메인을 사용하여 데이터 소스를 보호하려면 다음 단계를 사용합니다.
새 보안 도메인을 생성합니다.
/subsystem=elytron/security-domain=DsRealm:add(cache-type=default) /subsystem=elytron/security-domain=DsRealm/authentication=classic:add(login-modules=[{code=ConfiguredIdentity,flag=required,module-options={userName=sa, principal=sa, password=sa}}])데이터 소스에 대한 보안 도메인이 정의됩니다. 다음 XML 추출은 CLI 명령을 호출한 결과입니다.
<datasources> <datasource jndi-name="java:jboss/datasources/ElytronDSTest" pool-name="securityDs"> <connection-url>jdbc:h2:mem:test-elytron;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <new-connection-sql>select current_user()</new-connection-sql> <security> <authentication-context>MyAuthContext</authentication-context> </security> </datasource> </datasources>새 데이터 소스를 추가합니다.
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는 인증에 현재 컨텍스트를 사용합니다.
11.10.1. 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=elytron/security-domain=KerberosDatabase:add(cache-type=infinispan) /subsystem=elytron/security-domain=KerberosDatabase/authentication=classic:add /subsystem=elytron/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
지원되는 속성 목록은 데이터 소스 특성을 참조하십시오.