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 속성에는 하나 이상의 인증 구성 요소를 포함할 수 있으며, 이 요소에는 사용할 인증 정보가 포함됩니다.

authentication-context 속성이 설정되지 않은 경우 JBoss EAP는 연결을 여는 호출자 코드에서 사용하는 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 Context 를 사용하여 작업이 실행될 컨텍스트의 일부 측면을 구성할 수 있습니다. 이러한 측면 중 하나는 보안 흐름입니다. 이를 위해 List<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);
            }
        }
    }

위의 예에서 ExampleWorkWorkContextProvider 인터페이스를 구현하여 ExampleSecurityContext 를 제공합니다. 해당 컨텍스트는 작업 실행 시 Elytron에서 인증할 보안 정보를 제공하는 데 필요한 콜백을 생성합니다.

추가 리소스

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동