14.5. Elytron 하위 시스템을 사용하도록 리소스 어댑터 구성
CryostatJacamar의 리소스 어댑터에는 서버와 리소스 어댑터 간의 두 가지 유형의 통신이 포함됩니다.
- 유형 중 하나는 서버가 리소스 어댑터 연결을 여는 경우입니다. 이 기능은 연결을 열 때 리소스 어댑터에 대한 주체 및 자격 증명이 포함된 JAAS 제목을 전파해야 하는 컨테이너 관리 사인온으로 보호할 수 있습니다. 이 서명은 Elytron에 위임할 수 있습니다.
- 리소스 어댑터가 작업 관리자에게 작업을 제출하거나 동일한 JBoss EAP 인스턴스 내의 엔드포인트에 메시지를 전달할 때 보안 정보를 설정합니다. 이 메커니즘을 보안 흐름이라고 합니다.
14.5.1. Elytron을 사용하여 컨테이너 관리 사인온 링크 복사링크가 클립보드에 복사되었습니다!
Elytron을 사용하여 컨테이너 관리 인증을 얻으려면 elytron-enabled 속성을 true 로 설정해야 합니다. 이렇게 하면 리소스 어댑터에 대한 모든 연결이 Elytron에 의해 보호됩니다.
/subsystem=resource-adapters/resource-adapter=<RAR_NAME>/connection-definitions=<FACTORY_NAME>:write-attribute(name=elytron-enabled,value=true)
특성은 elytron-enabled resource-adapters 하위 시스템에서 true 로 설정하여 관리 CLI를 사용하여 구성할 수 있습니다. 기본적으로 이 속성은 false 로 설정됩니다.
authentication-context 속성은 사인온을 수행하는 데 사용할 Elytron 인증 컨텍스트의 이름을 정의합니다.
Elytron authentication-context 속성에는 하나 이상의 인증 구성 요소를 포함할 수 있으며, 이 요소에는 사용할 인증 정보가 포함됩니다.
속성이 설정되지 않은 경우 JBoss EAP는 연결을 여는 호출자 코드에서 사용하는 authentication-context authentication-context 인 현재 authentication-context를 사용합니다.
- 예:
인증 구성생성
/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})
- 예: 위의 구성을 사용하여
인증 컨텍스트생성
/subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])
14.5.2. Security Inflow with Elytron 링크 복사링크가 클립보드에 복사되었습니다!
Security inflow를 사용하면 리소스 어댑터가 작업 관리자에게 작업을 제출하거나 동일한 JBoss EAP 인스턴스 내의 엔드포인트에 메시지를 전달할 때 보안 정보를 설정할 수 있습니다. 이렇게 하면 Elytron을 사용하여 실행하기 전에 작업이 자체적으로 인증할 수 있습니다. 인증이 성공하면 생성된 인증 컨텍스트에서 제출된 작업이 실행됩니다. 실패하면 작업 실행이 거부됩니다.
Elytron Security inflow를 활성화하려면 리소스 어댑터의 작업 관리자를 구성할 때 wm-elytron-security-domain 속성을 설정합니다.
-
리소스 어댑터 작업 관리자가 Elytron 보안 도메인인
wm-elytron-security-domain을 사용하도록 구성된 경우 참조된 작업 관리자에게elytron-enabled특성이true로 설정되어야 합니다.
/subsystem=jca/workmanager=customWM:add(name=customWM, elytron-enabled=true)
-
wm-elytron-security-domain대신wm-security-domain이 사용되는 경우 기존 보안 하위 시스템에서보안침입을 수행합니다.
아래 jca 하위 시스템의 구성 예제에서는 ra-with-elytron-security-domain 이라는 리소스 어댑터의 구성을 확인할 수 있습니다. 이 리소스 어댑터는 Elytron 보안 도메인의 wm-realm 을 사용하도록 작업 관리자 보안을 구성합니다.
<subsystem xmlns="urn:jboss:domain:jca:5.0">
<archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
<bean-validation enabled="true"/>
<default-workmanager>
<short-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</short-running-threads>
<long-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</long-running-threads>
</default-workmanager>
<workmanager name="customWM">
<elytron-enabled>true</elytron-enabled>
<short-running-threads>
<core-threads count="20"/>
<queue-length count="20"/>
<max-threads count="20"/>
</short-running-threads>
</workmanager>
<bootstrap-contexts>
<bootstrap-context name="customContext" workmanager="customWM"/>
</bootstrap-contexts>
<cached-connection-manager/>
</subsystem>
그러면 resource-adapter 하위 시스템의 boostrap 컨텍스트를 사용하여 작업 관리자를 참조합니다.
<subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
<resource-adapters>
<resource-adapter id="ra-with-elytron-security-domain">
<archive>
ra-with-elytron-security-domain.rar
</archive>
<bootstrap-context>customContext</bootstrap-context>
<transaction-support>NoTransaction</transaction-support>
<workmanager>
<security>
<elytron-security-domain>wm-realm</elytron-security-domain>
<default-principal>wm-default-principal</default-principal>
<default-groups>
<group>
wm-default-group
</group>
</default-groups>
</security>
</workmanager>
</resource-adapter>
</resource-adapters>
</subsystem>
예: 보안 도메인 구성
/subsystem=elytron/properties-realm=wm-properties-realm:add(users-properties={path=/security-dir/users.properties, plain-text=true}, groups-properties={path=/security-dir/groups.properties})
/subsystem=elytron/simple-role-decoder=wm-role-decoder:add(attribute=groups)
/subsystem=elytron/constant-permission-mapper=wm-permission-mapper:add(permissions=[{class-name="org.wildfly.security.auth.permission.LoginPermission"}])
/subsystem=elytron/security-domain=wm-realm:add(default-realm=wm-properties-realm, permission-mapper=wm-permission-mapper, realms=[{role-decoder=wm-role-decoder, realm=wm-properties-realm}])
Work 클래스는 지정된 도메인에 Elytron의 인증에 대한 자격 증명을 제공합니다. 이를 위해 jakarta.resource.spi.work.WorkContextProvider 를 구현해야 합니다.
public interface WorkContextProvider {
/**
* Gets an instance of <code>WorkContexts</code> that needs to be used
* by the <code>WorkManager</code> to set up the execution context while
* executing a <code>Work</code> instance.
*
* @return an <code>List</code> of <code>WorkContext</code> instances.
*/
List<WorkContext> getWorkContexts();
}
이 인터페이스를 사용하면 를 사용하여 작업이 실행될 컨텍스트의 일부 측면을 구성할 수 있습니다. 이러한 측면 중 하나는 보안 흐름입니다. 이를 위해 Work ContextList<WorkContext> getWorkContexts 메서드는 jakarta.resource.spi.work.SecurityContext 를 제공해야 합니다. 이 컨텍스트는 자카르타 인증에서 정의한 jakarta.security.auth.callback.Callback 오브젝트를 사용합니다.
예: 컨텍스트를 사용하여 콜백 생성
public class ExampleWork implements Work, WorkContextProvider {
private final String username;
private final String role;
public MyWork(TestBean bean, String username, String role) {
this.principals = null;
this.roles = null;
this.bean = bean;
this.username = username;
this.role = role;
}
public List<WorkContext> getWorkContexts() {
List<WorkContext> l = new ArrayList<>(1);
l.add(new MySecurityContext(username, role));
return l;
}
public void run() {
...
}
public void release() {
...
}
public class ExampleSecurityContext extends SecurityContext {
public void setupSecurityContext(CallbackHandler handler, Subject executionSubject, Subject serviceSubject) {
try {
List<jakarta.security.auth.callback.Callback> cbs = new ArrayList<>();
cbs.add(new CallerPrincipalCallback(executionSubject, new SimplePrincipal(username)));
cbs.add(new GroupPrincipalCallback(executionSubject, new String[]{role}));
handler.handle(cbs.toArray(new jakarta.security.auth.callback.Callback[cbs.size()]));
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
}
위의 예에서 ExampleWork 는 WorkContextProvider 인터페이스를 구현하여 ExampleSecurityContext 를 제공합니다. 해당 컨텍스트는 작업 실행 시 Elytron에서 인증할 보안 정보를 제공하는 데 필요한 콜백을 생성합니다.
추가 리소스