Identity Management 구성 방법

Red Hat JBoss Enterprise Application Platform 7.4

LDAP 디렉토리 및 기타 ID 저장소를 사용하여 Red Hat JBoss Enterprise Application Platform에 대한 사용자 액세스를 관리하는 지침.

Red Hat Customer Content Services

초록

이 가이드에서는 JBoss EAP 관리 인터페이스 및 보안 도메인과 함께 사용하기 위해 LDAP 디렉터리 및 기타 ID 저장소를 사용하는 방법을 살펴봅니다. 이 안내서는 JBoss EAP 보안 아키텍처 가이드에 제공된 개념을 확장하며 관리자가 LDAP에 대한 기본 지식을 갖추고 JBoss EAP 내에서 보안 개념을 잘 이해한 후 검토해야 합니다.

JBoss EAP 문서에 대한 피드백 제공

오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.

절차

  1. 티켓을 생성하려면 다음 링크를 클릭하십시오.
  2. 문서 URL, 섹션 번호 를 포함하고 문제를 설명하십시오.
  3. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  4. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  5. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. ID 관리 개요

다양한 ID 저장소로 애플리케이션을 보호하기 위한 기본 ID 관리 개념은 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 보안 아키텍처 가이드에서 다룹니다. 이 가이드에서는 애플리케이션을 보호하기 위해 파일 시스템 또는 LDAP와 같은 다양한 ID 저장소를 구성하는 방법을 보여줍니다. 경우에 따라 LDAP와 같은 특정 ID 저장소를 권한 부여 기관으로 사용할 수도 있습니다. 주체에 대한 다양한 역할 및 액세스 정보는 JBoss EAP에서 직접 사용하거나 기존 JBoss EAP 역할에 매핑할 수 있는 LDAP 디렉터리에 저장할 수 있습니다.

참고

데이터베이스 또는 LDAP 디렉터리와 같은 외부 데이터 저장소에서 지원하는 ID 저장소를 사용하면 외부 데이터 저장소와 JBoss EAP 인스턴스 간의 데이터 액세스 및 전송으로 인해 인증 및 권한 부여에 대한 성능에 영향을 미칠 수 있습니다.

2장. Elytron 하위 시스템

2.1. 파일 시스템 기반 ID 저장소로 인증 구성

  1. JBoss EAP에서 filesystem-realm 을 구성합니다.

    /subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users,relative-to=jboss.server.config.dir)

    디렉터리가 jboss.server.config.dir 외부에 있는 경우 경로상대 값을 적절하게 변경해야 합니다.

  2. 사용자 추가:

    filesystem-realm 을 사용하는 경우 관리 CLI를 사용하여 사용자를 추가할 수 있습니다.

    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1)
    /subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=user1, clear={password="password123"})
    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1, name=Roles, value=["Admin","Guest"])
  3. simple-role-decoder 추가 :

    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)

    simple-role-decoderRoles 특성에서 주체 역할을 디코딩합니다. 역할이 다른 특성에 있는 경우 이 값을 변경할 수 있습니다.

  4. security-domain 구성 :

    /subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm,role-decoder=from-roles-attribute}],default-realm=exampleFsRealm,permission-mapper=default-permission-mapper)
  5. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleFsSD)
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

  6. 애플리케이션의 web.xmljboss-web.xml 구성 :

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

이제 애플리케이션에서 인증에 파일 시스템 기반 ID 저장소를 사용하고 있습니다.

2.2. 속성 파일 기반 ID 저장소로 인증 구성

  1. 속성 파일을 생성합니다.

    사용자를 암호에 매핑하는 속성 파일과 사용자를 역할에 매핑하는 두 개의 속성 파일을 생성해야 합니다. 일반적으로 이러한 파일은 jboss.server.config.dir 디렉터리에 있으며 명명 규칙 *-users.properties*-roles.properties 를 따르지만 다른 위치와 이름을 사용할 수 있습니다. *-users.properties 파일에는 다음 단계에서 생성할 properties-realm 에 대한 참조도 포함되어야 합니다. #$REALM_NAME=YOUR_PROPERTIES_REALM_NAME$

    암호 파일 예제: example-users.properties

    #$REALM_NAME=examplePropRealm$
    user1=password123
    user2=password123

    역할 간 사용자 파일 예: example-roles.properties

    user1=Admin
    user2=Guest

  2. JBoss EAP에서 properties-realm 을 구성합니다.

    /subsystem=elytron/properties-realm=examplePropRealm:add(groups-attribute=groups,groups-properties={path=example-roles.properties,relative-to=jboss.server.config.dir},users-properties={path=example-users.properties,relative-to=jboss.server.config.dir,plain-text=true})

    properties-realm 의 이름은 example -users.properties 파일의 이전 단계에서 사용되는 example PropRealm 입니다. 또한 속성 파일이 jboss.server.config.dir 외부에 있는 경우 경로상대 값을 적절하게 변경해야 합니다.

  3. security-domain 구성 :

    /subsystem=elytron/security-domain=exampleSD:add(realms=[{realm=examplePropRealm,role-decoder=groups-to-roles}],default-realm=examplePropRealm,permission-mapper=default-permission-mapper)
  4. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleSD)
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

  5. 애플리케이션의 web.xmljboss-web.xml 구성 :

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

이제 애플리케이션에서 인증에 속성 파일 기반 ID 저장소를 사용하고 있습니다.

중요

속성 파일은 서버가 시작될 때만 읽습니다. 수동으로 또는 add-user 스크립트를 사용하여 서버를 시작한 후에 추가된 사용자는 서버를 다시 로드해야 합니다. 이 다시 로드는 관리 CLI에서 reload 명령을 실행하여 수행합니다.

reload

2.3. 데이터베이스 기반 ID 저장소로 인증 구성

  1. 사용자 이름, 암호 및 역할에 대한 데이터베이스 형식을 결정합니다.

    ID 저장소에 데이터베이스를 사용하여 인증을 설정하려면 사용자 이름, 암호 및 역할이 해당 데이터베이스에 저장하는 방법을 결정해야 합니다. 이 예제에서는 다음 샘플 데이터가 있는 단일 테이블을 사용합니다.

    사용자 이름암호역할

    user1

    password123

    admin

    user2

    password123

    게스트

  2. 데이터 소스를 구성합니다.

    JBoss EAP에서 데이터베이스에 연결하려면 적절한 데이터베이스 드라이버와 데이터 소스가 구성되어 있어야 합니다. 이 예에서는 PostgreSQL 및 JBoss EAP에서 데이터 소스를 구성하는 드라이버를 배포하는 방법을 보여줍니다.

    deploy /path/to/postgresql-9.4.1210.jar
    
    data-source add --name=examplePostgresDS --jndi-name=java:jboss/examplePostgresDS --driver-name=postgresql-9.4.1210.jar  --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=postgresAdmin --password=mysecretpassword
  3. JBoss EAP에서 a jdbc-realm 을 구성합니다.

    /subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password,roles FROM eap_users WHERE username=?",data-source=examplePostgresDS,clear-password-mapper={password-index=1},attribute-mapping=[{index=2,to=groups}]}])
    참고

    위 예제는 단일 주체 쿼리에서 암호 및 역할을 얻는 방법을 보여줍니다. 역할 또는 추가 인증 또는 권한 부여 정보를 얻기 위해 여러 쿼리가 필요한 경우 attribute-mapping 특성을 사용하여 추가 principal-query 를 생성할 수도 있습니다.

    지원되는 암호 매퍼 목록은 Password Mappers 를 참조하십시오.

  4. security-domain 구성 :

    /subsystem=elytron/security-domain=exampleDbSD:add(realms=[{realm=exampleDbRealm,role-decoder=groups-to-roles}],default-realm=exampleDbRealm,permission-mapper=default-permission-mapper)
  5. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleDbSD)
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

  6. 애플리케이션의 web.xmljboss-web.xml 구성 :

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

2.4. LDAP 기반 ID 저장소로 인증 구성

  1. 사용자 이름, 암호 및 역할에 대한 LDAP 형식을 결정합니다.

    ID 저장소에 LDAP 서버를 사용하여 인증을 설정하려면 사용자 이름, 암호 및 역할을 저장하는 방법을 결정해야 합니다. 이 예제에서는 다음 구조를 사용합니다.

    dn: dc=wildfly,dc=org
    dc: wildfly
    objectClass: top
    objectClass: domain
    
    dn: ou=Users,dc=wildfly,dc=org
    objectClass: organizationalUnit
    objectClass: top
    ou: Users
    
    dn: uid=jsmith,ou=Users,dc=wildfly,dc=org
    objectClass: top
    objectClass: person
    objectClass: inetOrgPerson
    cn: John Smith
    sn: smith
    uid: jsmith
    userPassword: password123
    
    dn: ou=Roles,dc=wildfly,dc=org
    objectclass: top
    objectclass: organizationalUnit
    ou: Roles
    
    dn: cn=Admin,ou=Roles,dc=wildfly,dc=org
    objectClass: top
    objectClass: groupOfNames
    cn: Admin
    member: uid=jsmith,ou=Users,dc=wildfly,dc=org
  2. dir-context 구성 :

    JBoss EAP에서 LDAP 서버에 연결하려면 URL과 서버 연결에 사용되는 주체를 제공하는 dir-context 를 구성해야 합니다.

    /subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389",principal="uid=admin,ou=system",credential-reference={clear-text="secret"})
    참고

    Jakarta Management ObjectName 을 사용하여 LDAP 자격 증명을 해독할 수 없습니다. 대신 JBoss EAP용 서버 보안 구성 방법에서 설명한 대로 자격 증명 저장소 사용하여 자격 증명을 보호할 수 있습니다.

  3. JBoss EAP에서 ldap-realm 을 구성합니다.

    /subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={search-base-dn="ou=Users,dc=wildfly,dc=org",rdn-identifier="uid",user-password-mapper={from="userPassword"},attribute-mapping=[{filter-base-dn="ou=Roles,dc=wildfly,dc=org",filter="(&(objectClass=groupOfNames)(member={0}))",from="cn",to="Roles"}]})
    주의

    참조된 LDAP 서버에 참조에 반복문이 포함된 경우 JBoss EAP 서버에서 java.lang.OutOfMemoryError 오류가 발생할 수 있습니다.

  4. simple-role-decoder 추가 :

    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
  5. security-domain 구성 :

    /subsystem=elytron/security-domain=exampleLdapSD:add(realms=[{realm=exampleLR,role-decoder=from-roles-attribute}],default-realm=exampleLR,permission-mapper=default-permission-mapper)
  6. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleLdapSD)
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

  7. 애플리케이션의 web.xmljboss-web.xml 구성 :

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

중요

elytron 하위 시스템에서 LDAP 서버를 사용하여 인증을 수행하는 경우, LDAP 서버에 연결할 수 없는 경우 JBoss EAP에서 500 또는 내부 서버 오류 코드를 반환합니다. 이 동작은 동일한 조건에서 401 또는 권한 없는 오류 코드를 반환한 레거시 보안 하위 시스템을 사용하는 이전 버전의 JBoss EAP와 다릅니다.

2.5. 인증서를 사용하여 인증 구성

중요

인증서 기반 인증을 설정하려면 양방향 SSL이 구성되어 있어야 합니다. 양방향 SSL 구성에 대한 자세한 내용은 서버 보안 구성 가이드의 Elytron 하위 시스템(Elytron Subsystem) 섹션을 사용하여 애플리케이션의 양방향 SSL/TLS 활성화 섹션을 참조하십시오.

  1. 키 저장소-realm 을 구성합니다.

    /subsystem=elytron/key-store-realm=ksRealm:add(key-store=twoWayTS)

    클라이언트의 인증서가 포함된 truststore를 사용하여 이 영역을 구성해야 합니다. 인증 프로세스는 양방향 SSL 핸드셰이크 중에 클라이언트가 제공하는 것과 동일한 인증서를 사용합니다.

  2. 디코더 만들기.

    인증서에서 얻은 주체를 디코딩하려면 x500-attribute-principal-decoder 를 만들어야 합니다. 아래 예제에서는 첫 번째 CN 값을 기반으로 주체를 디코딩합니다.

    /subsystem=elytron/x500-attribute-principal-decoder=CNDecoder:add(oid="2.5.4.3",maximum-segments=1)

    예를 들어 전체 DNCN=client,CN=client-certificate,DC=example,DC=jboss,DC=org 인 경우CNDecoder 는 주체를 client 로 디코딩합니다. 이 디코딩된 주체는 ksRealm 에 구성된 트러스트 저장소에서 인증서를 조회하는 별칭 값으로 사용됩니다.

    중요

    디코딩된 주체 는 클라이언트 인증서에 대한 서버의 신뢰 저장소에 설정한 별칭 값입니다.

  3. 역할을 할당하기 위해 constant-role-mapper 를 추가합니다.

    이 예제는 constant-role-mapper 를 사용하여 ksRealm 의 주체에 역할을 할당하지만 다른 접근 방식을 사용할 수도 있습니다.

    /subsystem=elytron/constant-role-mapper=constantClientCertRole:add(roles=[Admin,Guest])
  4. security-domain 구성.

    /subsystem=elytron/security-domain=exampleCertSD:add(realms=[{realm=ksRealm}],default-realm=ksRealm,permission-mapper=default-permission-mapper,principal-decoder=CNDecoder,role-mapper=constantClientCertRole)
  5. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleCertSD)
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

  6. server-ssl-context 를 업데이트합니다.

    /subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=security-domain,value=exampleCertSD)
    /subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=authentication-optional, value=true)
    reload
  7. 애플리케이션의 web.xmljboss-web.xml 을 구성합니다.

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

    또한 CLIENT-CERT 를 인증 방법으로 사용하도록 web.xml 을 업데이트해야 합니다.

    <login-config>
      <auth-method>CLIENT-CERT</auth-method>
      <realm-name>exampleApplicationDomain</realm-name>
    </login-config>

2.6. 여러 ID 저장소를 사용하여 인증 및 권한 부여 구성

다양한 ID 저장소에 ID의 특성을 저장하는 경우 집계 영역으로 ID 속성을 인증 및 권한 부여를 위해 단일 보안 영역으로 로드합니다.

2.6.1. Elytron의 Realm 집계

집계 영역으로 하나의 보안 영역과 다른 보안 영역 또는 여러 보안 영역을 사용하여 Elytron에서 권한을 부여할 수 있습니다. 예를 들어 인증에 properties 영역을 사용하고 권한 부여에 JDBC 영역을 사용하도록 집계 영역을 구성할 수 있습니다.

여러 권한 영역을 집계하도록 구성된 집계 영역에서 다음과 같이 ID가 생성됩니다.

  • 권한 부여에 대해 구성된 각 보안 영역의 특성 값이 로드됩니다.
  • 속성이 둘 이상의 권한 영역에 정의된 경우 속성의 첫 번째 발생 값이 사용됩니다.

다음 예제에서는 여러 권한 부여 영역에 동일한 ID 속성에 대한 정의가 포함된 경우 ID를 생성하는 방법을 보여줍니다.

예제

집계 영역 구성:

authentication-realm=properties-realm,
authorization-realms=[jdbc-realm,ldap-realm]
  • JDBC 영역에서 얻은 특성 값:

    e-mail: user@example.com
    groups: Supervisor, User
  • ldap 영역에서 가져온 속성 값:

    e-mail: administrator@example.com
    phone: 0000 0000 0000

집계 영역에서 얻은 ID 결과:

e-mail: user@example.com
groups: Supervisor, User
phone: 0000 0000 0000

이 예제에서는 전자 메일 속성이 권한 부여 영역 모두에서 정의됩니다. 집계 영역이 권한 부여 영역을 authorization- realms=[jdbc -realm,ldap-realm] 로 집계하도록 구성되었으므로 JDBC 영역에 정의된 값은 결과 집계 영역에서 특성 전자 메일에 사용됩니다.

2.6.2. 집계 영역을 사용하여 인증 및 권한 부여 구성

집계 영역을 사용하여 인증 및 권한 부여를 구성하려면 집계 영역을 생성하고 집계 영역을 사용하도록 보안 도메인과 애플리케이션 보안 도메인을 구성합니다.

사전 요구 사항

  • 집계할 보안 영역이 구성됩니다.

    보안 영역 구성에 대한 자세한 내용은 ID 관리 구성 방법의 Elytron subsystem 을 참조하십시오.

  • 보안 도메인에서 사용할 역할 디코더가 구성됩니다.

    역할 디코더에 대한 자세한 내용은 How to Configure Server Security 가이드에서 Create an Elytron Rolecompreviewder를 참조하십시오.

절차

  1. 집계 영역을 생성합니다.

    • 하나의 권한 부여 영역을 사용하여 집계 영역을 생성하려면 다음을 수행합니다.

      /subsystem=elytron/aggregate-realm=exampleAggregateRealm:add(authentication-realm=__SECURITY_REALM_FOR_AUTHENTICATION__, authorization-realm=__SECURITY_REALM_FOR_AUTHORIZATION__)
    • 여러 권한 부여 영역을 사용하여 집계 영역을 생성하려면 다음을 수행합니다.

      /subsystem=elytron/aggregate-realm=exampleAggregateRealm:add(authentication-realm=__SECURITY_REALM_FOR_AUTHENTICATION__, authorization-realms=[__SECURITY_REALM_FOR_AUTHORIZATION_1__,__SECURITY_REALM_FOR_AUTHORIZATION_2__,...,__SECURITY_REALM_FOR_AUTHORIZATION_N__])
  2. security-domain 구성 :

    /subsystem=elytron/security-domain=exampleAggregateRealmSD:add(realms=[{realm=exampleAggregateRealm,role-decoder=__ROLE-DECODER__}],default-realm=exampleAggregateRealm,permission-mapper=default-permission-mapper)
  3. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=exampleAggregareRealmApplicationDomain:add(security-domain=exampleAggregateRealmSD)
  4. 애플리케이션의 web.xmljboss-web.xml 구성 :

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

2.6.3. 집계 영역의 예

단일 권한 영역이 있는 집계 영역의 예

이 예에서 properties-realm 은 인증에 사용되며 a jdbc-realm 은 권한 부여에 사용됩니다.

다음 영역을 사전 구성해야 합니다.

  • properties-realm named examplPropertiesRealm
  • 이름이 exampleJdbcRealm인 JDBC -realm

다음 명령을 실행하면 집계 영역을 생성합니다.

/subsystem=elytron/aggregate-realm:exampleSimpleAggregateRealm:add(authentication-realm=examplPropertiesRealm,authorization-realm=exampleJdbcRealm)

두 개의 권한 부여 영역이 있는 집계 영역의 예

이 예에서 properties-realm 은 인증에 사용되며 ldap-realm and jdbc-realm 의 집계는 권한 부여에 사용됩니다.

다음 영역을 사전 구성해야 합니다.

  • properties-realm named examplPropertiesRealm
  • 이름이 exampleJdbcRealm인 JDBC -realm
  • ldap-realm named exampleLdapRealm

다음 명령을 실행하면 집계 영역을 생성합니다.

/subsystem=elytron/aggregate-realm:exampleSimpleAggregateRealm:add(authentication-realm=examplPropertiesRealm,authorization-realms=[exampleJdbcRealm,exampleLdapRealm])

2.7. 애플리케이션의 인증 구성 덮어쓰기

JBoss EAP에 구성된 항목으로 애플리케이션의 인증 구성을 재정의할 수 있습니다. 이렇게 하려면 undertow 하위 시스템의 application -security-domain 섹션에서 override- deployment-configuration 속성을 사용합니다.

/subsystem=undertow/application-security-domain=exampleApplicationDomain:write-attribute(name=override-deployment-config,value=true)
참고

undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

예를 들어 애플리케이션은 jboss-web.xml 에서 exampleApplicationDomain 과 함께 FORM 인증을 사용하도록 구성됩니다.

jboss-web.xml

<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>exampleApplicationDomain</realm-name>
</login-config>

override-deployment-configuration 을 활성화하면 BASIC 또는 DIGEST 와 같은 다른 인증 메커니즘을 지정하는 새로운 http-authentication-factory 를 생성할 수 있습니다.

예: http-authentication-factory

/subsystem=elytron/http-authentication-factory=exampleHttpAuth:read-resource()
{
    "outcome" => "success",
    "result" => {
        "http-server-mechanism-factory" => "global",
        "mechanism-configurations" => [{
            "mechanism-name" => "BASIC",
            "mechanism-realm-configurations" => [{"realm-name" => "exampleApplicationDomain"}]
        }],
        "security-domain" => "exampleSD"
    }
}

그러면 애플리케이션의 jboss-web.xml 에 정의된 인증 메커니즘을 재정의하고 FORM 대신 BASIC 을 사용하여 사용자를 인증하려고 합니다.

2.8. 보안 Realms의 캐싱 설정

Elytron은 보안 영역에서 자격 증명 조회 결과를 캐시할 수 있는 caching-realm 을 제공합니다. 예를 들어 자주 쿼리된 사용자의 성능을 높이기 위해 LDAP 또는 데이터베이스에서 들어오는 자격 증명에 대한 캐시를 구성할 수 있습니다.

caching-realmLRU 또는 Least Reeast Recently Used 캐싱 전략을 사용하여 PasswordCredential 자격 증명을 캐시합니다. 이 전략에서는 최대 항목 수에 도달하면 액세스 권한이 가장 적은 항목이 삭제됩니다.

다음 보안 영역과 함께 caching-realm 을 사용할 수 있습니다.

  • filesystem-realm
  • jdbc-realm
  • ldap-realm
  • 사용자 정의 보안 영역

JBoss EAP 외부의 자격 증명 소스를 변경하는 경우 기본 보안 영역이 수신 대기를 지원하는 경우에만 해당 변경 사항이 JBoss EAP 캐싱 영역으로 전파됩니다. 특히 ldap-realm 은 수신 대기를 지원하지만 ldap-realm 내부의 역할과 같은 필터링된 특성은 그렇지 않습니다.

캐싱 영역에 사용자 데이터의 올바른 캐시가 있는지 확인하려면 인증 정보 소스가 아니라 캐싱 영역을 통해 사용자 속성을 수정하는 것이 좋습니다. 또는 캐시를 삭제할 수도 있습니다.

중요

캐싱 영역을 통한 사용자 변경은 기술 프리뷰로만 제공됩니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원하지 않으며, 기능상 완전하지 않을 수 있어 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

기술 프리뷰 기능에 대한 지원 범위에 대한 자세한 내용은 Red Hat 고객 포털의 기술 프리뷰 기능 지원 범위를 참조하십시오.

caching-realm 을 구성하고 사용하려면 다음을 수행합니다.

  1. 기존 보안 영역을 생성합니다.

    caching-realm 에서 사용할 기존 보안 영역이 필요합니다. 예를 들어 Filesystem -Based Identity Store를 사용하여 인증 구성의 단계와 유사한 filesystem-realm 만들 수 있습니다.

    filesystem-realm 예

    /subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir)
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1)
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=user1, clear={password="password123"})
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1,name=Roles,value=["Admin","Guest"])
    
    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)

  2. caching-realm 을 만듭니다.

    캐시하려는 기존 영역이 있으면 해당 영역을 참조하는 caching-realm 을 생성합니다.

    exampleFsRealm을 사용하는 caching-realm의 예

    /subsystem=elytron/caching-realm=exampleCacheRealm:add(realm=exampleFsRealm)

  3. caching-realm 을 사용합니다.

    caching-realm 을 생성한 후 다른 보안 영역과 마찬가지로 보안 구성에서 사용할 수 있습니다. 예를 들어 Filesystem 기반 ID 저장소로 인증 구성에서 filesystem-realm 을 사용하는 것과 동일한 위치에 사용할 수 있습니다.

    caching-realm을 사용한 구성 예

    /subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleCacheRealm, role-decoder=from-roles-attribute}], default-realm=exampleCacheRealm, permission-mapper=default-permission-mapper)
    
    /subsystem=elytron/http-authentication-factory=example-fs-http-auth:add(http-server-mechanism-factory=global, security-domain=exampleFsSD, mechanism-configurations=[{mechanism-name=BASIC, mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])

caching- realm 의 maximum -entries 및 maximum- age 특성을 사용하여 캐시 크기 및 항목 만료를 제어할 수 있습니다. 이러한 속성에 대한 자세한 내용은 How to Configure Server Security (서버 보안 구성 방법)의 Elytron Subsystem Components Reference 섹션을 참조하십시오.

caching-realm 캐시 지우기

clear-cache 명령을 사용하여 기존 캐시를 삭제할 수 있습니다. 캐시를 삭제하면 보안 영역의 최신 데이터를 사용하여 다시 채워집니다.

/subsystem=elytron/caching-realm=exampleCacheRealm:clear-cache

2.9. 컨테이너 관리 SSO(Single Sign-on)를 사용하도록 애플리케이션 구성

Elytron FORM 인증 방법을 사용하여 애플리케이션에 컨테이너 관리 Single Sign-On을 사용하도록 JBoss EAP를 구성할 수 있습니다. 이를 통해 사용자는 한 번 인증하고 다시 인증하지 않고도 FORM 인증 방법으로 보안된 다른 리소스에 액세스할 수 있습니다.

다음과 같은 경우 관련 Single Sign-On 세션이 무효화됩니다.

  • 남아 있는 로컬 세션이 없습니다.
  • 애플리케이션에서 로그아웃합니다.
중요

이러한 인스턴스가 클러스터에 있는 한 다양한 JBoss EAP 인스턴스에 배포된 애플리케이션 간에 SSO(Single Sign-On)를 사용할 수 있습니다.

  1. 키 저장소를 생성합니다.

    SSO에 참여하는 다양한 서버 간에 보안 통신 채널을 구성하려면 키 저장소가 필요합니다. 이 채널은 로그인 및 로그아웃 중에 Single Sign-On 세션이 생성되거나 삭제될 때 발생하는 이벤트에 대한 메시지를 교환하는 데 사용됩니다.

    elytron 하위 시스템에서 키 저장소 를 생성하려면 먼저 다음과 같이 Java 키 저장소를 생성합니다.

    keytool -genkeypair -alias localhost -keyalg RSA -keysize 1024 -validity 365 -keystore keystore.jks -dname "CN=localhost" -keypass secret -storepass secret

    keystore.jks 파일이 생성되면 다음 관리 CLI 명령을 실행하여 Elytron에서 키 저장소 정의를 생성합니다.

    /subsystem=elytron/key-store=example-keystore:add(path=keystore.jks, relative-to=jboss.server.config.dir, credential-reference={clear-text=secret}, type=JKS)
  2. 보안 영역을 추가합니다.

    다음 관리 CLI 명령을 사용하여 사용자가 로컬 파일 시스템에 저장되는 ID 저장소인 FileSystem 영역을 생성합니다.

    /subsystem=elytron/filesystem-realm=example-realm:add(path=/tmp/example-realm)
  3. 다음 관리 CLI 명령을 사용하여 security-domain 을 생성합니다.

    /subsystem=elytron/security-domain=example-domain:add(default-realm=example-realm,permission-mapper=default-permission-mapper,realms=[{realm=example-realm,role-decoder=groups-to-roles}]
    참고

    SSO를 사용하는 애플리케이션은 일반적으로 사용자에게 로그인 페이지를 제공해야 하므로 HTTP FORM 인증을 사용해야 합니다.

  4. undertow 하위 시스템에서 애플리케이션 보안 도메인을 생성합니다.

    참고

    undertow 하위 시스템에 정의된 application-security-domain 이 이미 있고 애플리케이션에 SSO(Single Sign-On)를 활성화하는 데만 사용하려는 경우 이 단계를 건너뛸 수 있습니다.

    /subsystem=undertow/application-security-domain=other:add(security-domain=example-domain)
    참고

    기본적으로 애플리케이션이 jboss-web.xml 파일에서 특정 security- domain을 정의하지 않으면 애플리케이션 서버에서 다른 이름으로 하나를 선택합니다.

  5. Single Sign-On을 활성화하고 키 저장소를 사용하도록 undertow 하위 시스템을 업데이트합니다.

    Single Sign-On은 undertow 하위 시스템의 특정 application-security-domain 정의로 활성화됩니다. 애플리케이션을 배포하는 데 사용하는 서버가 동일한 구성을 사용하고 있는 것이 중요합니다.

    Single Sign-On을 활성화하려면 다음과 같이 undertow 하위 시스템에서 기존 application-security-domain 을 변경합니다.

    /subsystem=undertow/application-security-domain=other/setting=single-sign-on:add(key-store=example-keystore, key-alias=localhost, domain=localhost, credential-reference={clear-text=secret})
    참고

    undertow 하위 시스템의 application-security-domain구성하위 시스템 → 웹(Undertow)애플리케이션 보안 도메인으로 이동하여 관리 콘솔을 사용하여 구성할 수 있습니다.

    SSO 속성 및 해당 정의에 대한 자세한 내용은 Single Sign-on Attributes 참조를 참조하십시오.

  6. 애플리케이션의 web.xmljboss-web.xml 파일을 구성합니다.

    JBoss EAP에서 구성한 application- security -domain을 사용하도록 애플리케이션의 web.xml 및 jboss- web.xml을 업데이트해야 합니다. 이러한 예는 Configure Web Applications to use Elytron 또는 Legacy Security for Authentication 에서 확인할 수 있습니다.

JBoss EAP는 undertowinfinispan 하위 시스템을 사용하여 클러스터형 SSO와 비클러스터형 SSO에 대한 기본 지원을 제공합니다.

2.10. 전달자 토큰을 사용하여 인증 및 권한 부여 구성

2.10.1. 전달자 토큰 인증

BEARER_TOKEN 인증 메커니즘을 사용하여 애플리케이션에 전송된 HTTP 요청을 인증할 수 있습니다. 클라이언트(예: 웹 브라우저)가 HTTP 요청을 애플리케이션에 전송한 후 BEARER_TOKEN 메커니즘은 요청의 인증 HTTP 헤더에 전달자 토큰이 있는지 확인합니다.

Elytron은 OpenID Connect ID 토큰과 같은 JWT 형식으로 전달자 토큰을 사용하거나 OAuth2 호환 인증 서버에서 발급한 불투명 토큰을 사용하여 인증을 지원합니다. 추가 리소스 섹션을 참조하십시오.

다음 예제에서는 Authorization HTTP 헤더에 mF_9.B5f-4.1JqM 전달자 토큰이 포함되어 있음을 보여줍니다.

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

BEARER_TOKEN 메커니즘은 이제 전달자 토큰 문자열을 추출하여 유효성 검사를 위해 token-realm 구현에 전달할 수 있습니다. 구현이 전달자 토큰의 유효성을 검증하는 경우 Elytron은 토큰으로 표시되는 정보를 기반으로 보안 컨텍스트를 생성합니다. 애플리케이션에서 이 보안 컨텍스트를 사용하여 요청자에 대한 정보를 얻을 수 있습니다. 그런 다음 HTTP 리소스에 대한 요청자 액세스 권한을 제공하여 요청을 이행할지 여부를 결정할 수 있습니다.

요청자가 전달자 토큰을 제공하지 않는 경우 BEARER_TOKEN 메커니즘은 401 HTTP 상태 코드를 반환합니다. 예를 들면 다음과 같습니다.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"

요청자가 리소스에 액세스할 권한이 없는 경우 BEARER_TOKEN 메커니즘은 403 HTTP 상태 코드를 반환합니다.

HTTP/1.1 403 Forbidden

추가 리소스

2.10.2. JWT(JSON 웹 토큰) 인증 구성

elytron 하위 시스템에서 token-realm 을 지정하여 JWT에 대한 지원을 활성화할 수 있습니다.

token-realm 내에서 특성 및 jwt 토큰 유효성 검사기를 지정할 수 있습니다. Elytron은 다음 검사를 완료합니다.

  • 자동 만료는 exp claim 및 nbf 클레임에 지정된 값에 대해 확인합니다.
  • 선택 사항: 서명은 다음 방법 중 하나에서 제공하는 공개 키를 기반으로 합니다.

    • 공개 키 또는 인증서 특성 사용.
    • 이름이 인 공개 키가 있는 키 맵 사용.
    • client-ssl-context 특성을 사용하여 jku 클레임에 지정된 URL에서 설정된 원격 JSON 웹 키(JWK)를 검색합니다.
  • 선택 사항: JWT에서 issaud 클레임에서 지원되는 값만 포함하도록 확인합니다. 발행자대상 속성을 사용하여 이러한 검사를 수행할 수 있습니다.

다음 예제에서는 token-realm 을 보안 영역으로, principal-claim 을 특성으로 보여줍니다. principal-claim 특성은 elytron 에서 주체 이름을 가져오는 데 사용하는 클레임 이름을 정의합니다. jwt 요소는 토큰을 JWT로 검증해야 함을 지정합니다.

구성된 토큰-realm의 예

<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
    <jwt issuer="${issuer_name}"
         audience="${audience_name}"
         <public-key="${public_key_in_PEM_format}"/>
 </token-realm>

token-realm 의 키 맵을 정의할 수 있습니다. 그런 다음 서로 다른 키 쌍을 서명 확인을 위해 사용할 수 있으며 이러한 키 쌍을 쉽게 회전할 수 있습니다. Elytron은 토큰 에서 청구를 가져와 검증을 위해 해당 공개 키를 사용합니다.

  • JWT 플레이버 클레임이 없으면 token-realmjwtpublic-key 특성에 지정된 값을 사용하여 서명을 확인합니다.
  • JWT에 가상 클레임 이 없고 public-key 를 구성하지 않은 경우 token-realm 이 토큰을 무효화합니다.

토큰-realm 에 대해 구성된 키 맵의 예.

<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
    <jwt issuer="${issuer_name}" audience="${audience_name}">
        <key kid="${key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/>
        <key kid="${another_key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/>
    </jwt>
</token-realm>

절차

  1. key tool을 사용하여 키 저장소 를 생성합니다.

    key tool을 사용하여 키 저장소 를 생성하는 예.

    keytool -genkeypair -alias <alias_name> -keyalg <key_algorithm> -keysize <key_size> -validity <key_validity_in_days> -keystore <key_store_path> -dname <distinguished_name> -keypass <key_password> -storepass  <key_store_password>

    그런 다음 elytron 하위 시스템에서 키 저장소 정의를 추가합니다.

    elytron 하위 시스템에서 키 저장소 정의 추가의 예.

    /subsystem=elytron/key-store=<key_store_name>:add(path=<key_store_path> , credential-reference={clear-text=<key_store_password>}, type=<keystore_type>)

  2. elytron 하위 시스템에서 token-realm 을 만들고 token -realm 에 대한 특성 및 jwt 토큰 유효성 검사기를 지정합니다.

    elytron 하위 시스템에서 토큰 영역 생성의 예.

    /subsystem=elytron/token-realm=<token_realm_name>:add(jwt={issuer=[<issuer_name>],audience=[<audience_name>],key-store=<key_store_name>,certificate=<alias_name>},principal-claim=<principal_claim_key>)

다음 단계

  • 애플리케이션의 인증을 구성하려면 애플리케이션의 인증 구성을 참조하십시오.

추가 리소스

2.10.3. OAuth2 호환 권한 서버에서 발행한 토큰을 사용하여 인증 구성

Elytron은 OAuth2 호환 권한 부여 서버에서 발행한 전달자 토큰을 지원합니다. 사전 정의된 oauth2-introspection 엔드포인트에 대해 토큰의 유효성을 검사하도록 토큰 영역을 구성할 수 있습니다.

절차

  1. 토큰 영역을 생성합니다.

    elytron 하위 시스템을 사용하여 토큰 영역을 생성하는 예:

    /subsystem=elytron/token-realm=<token_realm_name>:add(principal-claim=<principal_claim_key>, oauth2-introspection={client-id=<client_id>, client-secret=<client_secret>, introspection-url=<introspection_URL>})

    다음 예에서는 token-realm 요소에 지정된 oauth2-introspection 요소를 보여줍니다. 이 토큰 영역은 사전 정의된 oauth2-introspection 엔드포인트에 대해 토큰을 검증하도록 구성됩니다. oauth2-introspection 엔드포인트는 client-id 및 client- secret 특성에 지정된 값을 사용하여 클라이언트를 식별합니다.

    token-realm 요소 내부의 oauth2-introspection 요소의 예:

    <token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
        <oauth2-introspection client-id="${client_id}"
                              client-secret="${client_secret}"
                              introspection-url="${introspection_URL}"
                              host-name-verification-policy="${hostname_verification_policy_value}"/>
    </token-realm>

다음 단계

  • 애플리케이션의 인증을 구성하려면 애플리케이션의 인증 구성을 참조하십시오.

추가 리소스

2.10.4. 애플리케이션에 대한 전달자 토큰 인증 구성

OpenID Connect ID 토큰과 같은 JWT 형식으로 전달자 토큰을 사용하거나 OAuth2 호환 인증 서버에서 발급한 불투명 토큰을 사용하여 애플리케이션에 대한 인증을 구성할 수 있습니다.

사전 요구 사항

절차

  1. elytron 하위 시스템에서 보안 도메인을 생성합니다. 보안 도메인에서 토큰 보안 영역을 지정했는지 확인합니다.

    elytron 하위 시스템에서 보안 도메인을 생성하는 예제.

    /subsystem=elytron/security-domain=<security_domain_name>:add(realms=[{realm=<token_realm_name>,role-decoder=<role_decoder_name>}],permission-mapper=<permission_mapper_name>,default-realm=<token_realm_name>)

  2. BEARER_TOKEN 메커니즘을 사용하는 http-authentication-factory 를 생성합니다.

    http-authentication-factory 생성 예.

    /subsystem=elytron/http-authentication-factory=<authentication_factory_name>:add(security-domain=<security_domain_name>,http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=BEARER_TOKEN,mechanism-realm-configurations=[{realm-name=<token_realm_name>}]}])

  3. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    undertow 하위 시스템에서 application-security-domain 을 구성하는 예.

    /subsystem=undertow/application-security-domain=<application_security_domain_name>:add(http-authentication-factory=<authentication_factory_name>)

  4. 애플리케이션의 web.xmljboss-web.xml 파일을 구성합니다. 애플리케이션의 web.xmlBEARER_TOKEN 인증 방법을 지정했는지 확인해야 합니다. 또한 jboss-web.xml 이 JBoss EAP에서 구성한 application-security-domain 을 사용하는지 확인합니다.

추가 리소스

  • BEARER_TOKEN 인증 메커니즘에 대한 자세한 내용은 Bearer token authentication 를 참조하십시오.
  • token-realm jwt 속성에 대한 자세한 내용은 How to Configure Server Security Guide에서 Table A.94. token-realm jwt Attributes 를 참조하십시오.
  • OAuth2 토큰 끝점과 함께 사용할 수 있는 속성에 대한 자세한 내용은 테이블 A.95. token-realm oauth2-introspection Attributes 를 참조하십시오.
  • 애플리케이션의 web.xml 및 jboss- web.xml 을 구성하는 방법에 대한 자세한 내용은 ID 관리 가이드의 How to Configure Elytron 또는 Legacy Security for Authentication을 사용하도록 웹 애플리케이션 구성을 참조하십시오.

3장. 레거시 보안 하위 시스템

3.1. LDAP를 사용하도록 보안 도메인 설정

로그인 모듈을 사용하여 인증 및 권한 부여에 LDAP 서버를 사용하도록 보안 도메인을 구성할 수 있습니다. 보안 도메인 및 로그인 모듈의 기본 내용은 JBoss EAP 보안 아키텍처 가이드에서 설명합니다. LdapExtended 는 LDAP 서버(Active Directory 포함)와 통합하기 위한 기본 로그인 모듈이지만 다른 몇 가지 LDAP 로그인 모듈도 사용할 수 있습니다. 특히 Ldap,AdvancedLdapAdvancedAdLdap 로그인 모듈을 사용하여 LDAP를 사용하도록 보안 도메인을 구성할 수도 있습니다. 이 섹션에서는 LdapExtended 로그인 모듈을 사용하여 인증 및 권한 부여에 LDAP를 사용하는 보안 도메인을 만드는 방법을 설명하지만 다른 LDAP 로그인 모듈도 사용할 수 있습니다. 다른 LDAP 로그인 모듈에 대한 자세한 내용은 JBoss EAP 로그인 모듈 참조를 참조하십시오.

중요

레거시 보안 하위 시스템에서 LDAP 서버를 사용하여 인증을 수행하는 경우 LDAP 서버에 연결할 수 없는 경우 JBoss EAP에서 500 또는 내부 서버 오류(LDAP 서버에 연결할 수 없는 경우 오류 코드)를 반환합니다. 이 동작은 동일한 조건에서 401 또는 권한 없는 오류 코드를 반환한 이전 버전의 JBoss EAP와 다릅니다.

3.1.1. LdapExtended 로그인 모듈

LdapExtended(또는.jboss.security.auth.spi.LdapExtLoginModule)는 검색을 사용하여 LDAP 서버에서 바인드 사용자 및 관련 역할을 찾는 로그인 모듈 구현입니다. 역할 쿼리는 DN을 재귀적으로 따라 계층적 역할 구조를 탐색합니다. 보안 도메인과 LDAP를 사용할 경우 대부분의 경우 LdapExtended 로그인 모듈(특히 Active Directory가 아닌 LDAP 구현)을 사용해야 합니다. LdapExtended 로그인 모듈에 대한 구성 옵션 전체 목록은 JBoss EAP 로그인 모듈 참조의 LdapExtended 로그인 모듈섹션을 참조하십시오.

인증은 다음과 같이 수행됩니다.

  1. LDAP 서버에 초기 바인딩은 bindDN 및 bind Credential 옵션을 사용하여 수행됩니다. bindDNbaseCtxDN 및 rolesCtxDN 트리에서 사용자와 역할을 모두 검색할 수 있는 LDAP 사용자입니다. 인증할 사용자 DN은 baseFilter 특성에서 지정한 필터를 사용하여 쿼리합니다.
  2. 결과 사용자 DN은 사용자 DN을 InitialLdapContext 환경 Context.SECURITY_PRINCIPAL 로 사용하여 LDAP 서버에 바인딩하여 인증됩니다. Context.SECURITY_CREDENTIALS 속성은 콜백 핸들러에서 얻은 String 암호로 설정됩니다.

3.1.1.1. LdapExtended 로그인 모듈을 사용하도록 보안 도메인 구성

예제 데이터 (LDIF 형식)

dn: uid=jduke,ou=Users,dc=jboss,dc=org
objectClass: inetOrgPerson
objectClass: person
objectClass: top
cn: Java Duke
sn: duke
uid: jduke
userPassword: theduke
# =============================
dn: uid=hnelson,ou=Users,dc=jboss,dc=org
objectClass: inetOrgPerson
objectClass: person
objectClass: top
cn: Horatio Nelson
sn: Nelson
uid: hnelson
userPassword: secret
# =============================
dn: ou=groups,dc=jboss,dc=org
objectClass: top
objectClass: organizationalUnit
ou: groups
# =============================
dn: uid=ldap,ou=Users,dc=jboss,dc=org
objectClass: inetOrgPerson
objectClass: person
objectClass: top
cn: LDAP
sn: Service
uid: ldap
userPassword: randall
# =============================
dn: ou=Users,dc=jboss,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Users
# =============================
dn: dc=jboss,dc=org
objectclass: top
objectclass: domain
dc: jboss
# =============================
dn: uid=GroupTwo,ou=groups,dc=jboss,dc=org
objectClass: top
objectClass: groupOfNames
objectClass: uidObject
cn: GroupTwo
member: uid=jduke,ou=Users,dc=jboss,dc=org
uid: GroupTwo
# =============================
dn: uid=GroupThree,ou=groups,dc=jboss,dc=org
objectClass: top
objectClass: groupOfUniqueNames
objectClass: uidObject
cn: GroupThree
uid: GroupThree
uniqueMember: uid=GroupOne,ou=groups,dc=jboss,dc=org
# =============================
dn: uid=HTTP,ou=Users,dc=jboss,dc=org
objectClass: inetOrgPerson
objectClass: person
objectClass: top
cn: HTTP
sn: Service
uid: HTTP
userPassword: httppwd
# =============================
dn: uid=GroupOne,ou=groups,dc=jboss,dc=org
objectClass: top
objectClass: groupOfUniqueNames
objectClass: uidObject
cn: GroupOne
uid: GroupOne
uniqueMember: uid=jduke,ou=Users,dc=jboss,dc=org
uniqueMember: uid=hnelson,ou=Users,dc=jboss,dc=org

LdapExtended 로그인 모듈을 추가하기 위한 CLI 명령

/subsystem=security/security-domain=testLdapExtendedExample:add(cache-type=default)

/subsystem=security/security-domain=testLdapExtendedExample/authentication=classic:add

/subsystem=security/security-domain=testLdapExtendedExample/authentication=classic/login-module=LdapExtended:add(code=LdapExtended, flag=required, module-options=[ ("java.naming.factory.initial"=>"com.sun.jndi.ldap.LdapCtxFactory"),     ("java.naming.provider.url"=>"ldap://localhost:10389"), ("java.naming.security.authentication"=>"simple"),     ("bindDN"=>"uid=ldap,ou=Users,dc=jboss,dc=org"), ("bindCredential"=>"randall"),     ("baseCtxDN"=>"ou=Users,dc=jboss,dc=org"), ("baseFilter"=>"(uid={0})"), ("rolesCtxDN"=>"ou=groups,dc=jboss,dc=org"),     ("roleFilter"=>"(uniqueMember={1})"), ("roleAttributeID"=>"uid")])

reload

참고

표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

3.1.1.1.1. Active Directory에 LdapExtended 로그인 모듈을 사용하도록 보안 도메인 구성

Microsoft Active Directory의 경우 LdapExtended 로그인 모듈을 사용할 수 있습니다.

아래 예는 기본 Active Directory 구성의 구성을 나타냅니다. 일부 Active Directory 구성에서는 일반적인 포트 389 대신 포트 3268 에서 Global Catalog를 검색해야 할 수 있습니다. 이는 Active Directory forest에 여러 도메인이 포함된 경우 가장 흔히 발생합니다.

기본 AD 구성에 대한 LdapExtended 로그인 모듈 구성 예

/subsystem=security/security-domain=AD_Default:add(cache-type=default)

/subsystem=security/security-domain=AD_Default/authentication=classic:add

/subsystem=security/security-domain=AD_Default/authentication=classic/login-module=LdapExtended:add(code=LdapExtended,flag=required,module-options=[ ("java.naming.provider.url"=>"ldap://ldaphost.jboss.org"),("bindDN"=>"JBOSSsearchuser"), ("bindCredential"=>"password"), ("baseCtxDN"=>"CN=Users,DC=jboss,DC=org"), ("baseFilter"=>"(sAMAccountName={0})"), ("rolesCtxDN"=>"CN=Users,DC=jboss,DC=org"), ("roleFilter"=>"(sAMAccountName={0})"), ("roleAttributeID"=>"memberOf"), ("roleAttributeIsDN"=>"true"), ("roleNameAttributeID"=>"cn"), ("searchScope"=>"ONELEVEL_SCOPE"), ("allowEmptyPasswords"=>"false")])

reload

아래 예제에서는 Active Directory 내에서 재귀 역할 검색을 구현합니다. 이 예제와 기본 Active Directory 예제의 주요 차이점은 사용자의 DN을 사용하여 member 속성을 검색하도록 역할 검색이 교체되었다는 것입니다. 그런 다음 로그인 모듈은 역할의 DN을 사용하여 그룹이 멤버인 그룹을 찾습니다.

반복 검색을 사용하여 기본 AD 구성에 대한 LdapExtended 로그인 모듈 구성 예

/subsystem=security/security-domain=AD_Recursive:add(cache-type=default)

/subsystem=security/security-domain=AD_Recursive/authentication=classic:add

/subsystem=security/security-domain=AD_Recursive/authentication=classic/login-module=LdapExtended:add(code=LdapExtended,flag=required,module-options=[("java.naming.provider.url"=>"ldap://ldaphost.jboss.org"), ("java.naming.referral"=>"follow"), ("bindDN"=>"JBOSSsearchuser"), ("bindCredential"=>"password"), ("baseCtxDN"=>"CN=Users,DC=jboss,DC=org"), ("baseFilter"=>"(sAMAccountName={0})"), ("rolesCtxDN"=>"CN=Users,DC=jboss,DC=org"), ("roleFilter"=>"(member={1})"), ("roleAttributeID"=>"cn"), ("roleAttributeIsDN"=>"false"), ("roleRecursion"=>"2"), ("searchScope"=>"ONELEVEL_SCOPE"), ("allowEmptyPasswords"=>"false")])

reload

3.2. 데이터베이스를 사용하도록 보안 도메인 구성

LDAP와 유사하게 로그인 모듈을 사용하여 인증 및 권한 부여에 데이터베이스를 사용하도록 보안 도메인을 구성할 수 있습니다.

3.2.1. 데이터베이스 로그인 모듈

Database 로그인 모듈은 인증 및 역할 매핑을 지원하는 JDBC 로그인 모듈입니다. 이 로그인 모듈은 사용자 이름, 암호 및 역할 정보가 관계형 데이터베이스에 저장된 경우 사용됩니다.

이는 예상되는 형식의 주체 및 역할을 포함하는 논리 테이블에 대한 참조를 제공하여 작동합니다. 예를 들면 다음과 같습니다.

Table Principals(PrincipalID text, Password text) Table Roles(PrincipalID text, Role text, RoleGroup text)

Principals 테이블은 사용자 PrincipalID 를 유효한 암호와 연결하고 Roles 테이블은 사용자 PrincipalID 를 해당 역할 집합과 연결합니다. 사용자 권한에 사용되는 역할은 Roles (역할)의 RoleGroup 열 값이 있는 행에 포함되어야 합니다.

테이블은 사용자가 로그인 모듈에서 사용하는 SQL 쿼리를 지정할 수 있는 논리적입니다. 유일한 요구 사항은 java.sql.ResultSet 에 이전에 설명된 주체 및 역할 테이블과 동일한 논리 구조가 있다는 것입니다. 테이블 및 열의 실제 이름은 결과가 열 색인에 따라 액세스되므로 관련이 없습니다.

이 개념을 명확히 설명하려면 이미 선언된 대로 두 개의 테이블, 주체 및 역할이 있는 데이터베이스를 고려하십시오. 다음 설명은 다음 데이터로 테이블을 채웁니다.

  • Principal s 테이블에서 암호가 echoman 인 Principal ID java
  • Roles 테이블RolesRoleGroupEcho 라는 역할이 있는 PrincipalID java
  • Roles 테이블의 CallerPrincipalRoleGroupcaller-java 라는 역할이 있는 PrincipalID java

Database 로그인 모듈에 대한 전체 구성 옵션 목록은 JBoss EAP 로그인 모듈 참조의 Database 로그인 모듈섹션을 참조하십시오.

3.2.1.1. 데이터베이스 로그인 모듈을 사용하도록 보안 도메인 구성

Database 로그인 모듈을 사용하도록 보안 도메인을 구성하기 전에 데이터 소스를 올바르게 구성해야 합니다.

JBoss EAP에서 데이터 소스 생성 및 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 데이터 소스 관리 섹션을 참조하십시오.

데이터 소스를 올바르게 구성하고 나면 Database 로그인 모듈을 사용하도록 보안 도메인을 구성할 수 있습니다. 아래 예제에서는 MyDatabaseDS 라는 데이터 소스가 생성되어 다음을 사용하여 구성된 데이터베이스로 올바르게 구성되었다고 가정합니다.

CREATE TABLE Users(username VARCHAR(64) PRIMARY KEY, passwd VARCHAR(64))
CREATE TABLE UserRoles(username VARCHAR(64), role VARCHAR(32))

데이터베이스 로그인 모듈을 추가하기 위한 CLI 명령

/subsystem=security/security-domain=testDB:add

/subsystem=security/security-domain=testDB/authentication=classic:add

/subsystem=security/security-domain=testDB/authentication=classic/login-module=Database:add(code=Database,flag=required,module-options=[("dsJndiName"=>"java:/MyDatabaseDS"),("principalsQuery"=>"select passwd from Users where username=?"),("rolesQuery"=>"select role, 'Roles' from UserRoles where username=?")])

reload

3.3. 속성 파일을 사용하도록 보안 도메인 구성

로그인 모듈을 사용하여 파일 시스템을 인증 및 권한 부여에 대한 ID 저장소로 사용하도록 보안 도메인을 구성할 수도 있습니다.

3.3.1. UsersRoles 로그인 모듈

UsersRoles는 Java 속성 파일에서 로드된 여러 사용자 및 사용자 역할을 지원하는 간단한 로그인 모듈입니다. 이 로그인 모듈의 주요 목적은 애플리케이션과 함께 배포된 속성 파일을 사용하여 여러 사용자와 역할의 보안 설정을 쉽게 테스트하는 것입니다. 기본 username-to-password 매핑 filename은 users.properties 이며 기본 username-to-roles 매핑 filename은 roles.properties 입니다.

참고

이 로그인 모듈은 암호 스태킹, 암호 해싱 및 인증되지 않은 ID를 지원합니다.

속성 파일은 초기화 메서드 스레드 컨텍스트 클래스 로더를 사용하여 초기화 중에 로드됩니다. 즉, 이러한 파일을 Jakarta EE 배포의 클래스 경로(예: WAR 아카이브의 WEB-INF/classes 폴더)에 배치하거나 서버 클래스 경로의 모든 디렉토리에 배치할 수 있습니다.

UsersRoles 로그인 모듈에 대한 전체 구성 옵션 목록은 JBoss EAP 로그인 모듈 참조의 UsersRoles 로그인 모듈섹션을 참조하십시오.

3.3.1.1. UsersRoles 로그인 모듈을 사용하도록 보안 도메인 구성

아래 예제에서는 다음 파일이 생성되어 애플리케이션의 클래스 경로에서 사용할 수 있다고 가정합니다.

  • sampleapp-users.properties
  • sampleapp-roles.properties

UserRoles 로그인 모듈을 추가하기 위한 CLI 명령

/subsystem=security/security-domain=sampleapp:add

/subsystem=security/security-domain=sampleapp/authentication=classic:add

/subsystem=security/security-domain=sampleapp/authentication=classic/login-module=UsersRoles:add(code=UsersRoles,flag=required,module-options=[("usersProperties"=>"sampleapp-users.properties"),("rolesProperties"=>"sampleapp-roles.properties")])

reload

3.4. 인증서 기반 인증을 사용하도록 보안 도메인 구성

JBoss EAP는 보안 도메인과 함께 인증서 기반 인증을 사용하여 웹 애플리케이션 또는 Jakarta Enterprise Bean을 보호하는 기능을 제공합니다.

중요

인증서 기반 인증을 구성하려면 애플리케이션용 2-Way SSL/TLS 를 활성화 및 구성해야 합니다. 이 인증서는 JBoss EAP 인스턴스와 웹 애플리케이션 또는 보안 도메인으로 보호되는 Jakarta Enterprise Beans에 액세스하는 클라이언트 모두에 대해 X509 인증서를 구성해야 합니다.

인증서, 신뢰 저장소 및 양방향 SSL/TLS가 구성되면 인증서 기반 인증을 사용하는 보안 도메인을 구성하고, 해당 보안 도메인을 사용하도록 애플리케이션을 구성하고, 클라이언트에서 클라이언트 인증서를 사용하도록 구성할 수 있습니다.

3.4.1. 인증서 기반 인증을 사용하여 보안 도메인 생성

인증서 기반 인증을 사용하는 보안 도메인을 생성하려면 신뢰할 수 있는 저장소와 인증서 로그인 모듈 또는 하위 클래스 중 하나를 지정해야 합니다.

신뢰 저장소에는 인증에 사용되는 신뢰할 수 있는 클라이언트 인증서가 포함되어야 합니다. 그렇지 않으면 클라이언트 인증서에 서명하는 데 사용되는 인증 기관의 인증서가 포함되어야 합니다. 로그인 모듈은 구성된 신뢰 저장소를 사용하여 클라이언트에서 제공하는 인증서를 인증하는 데 사용됩니다. 보안 도메인 전체도 인증되고 나면 역할을 주체에 매핑하는 방법을 제공해야 합니다. 인증서 로그인 모듈 자체는 역할 정보를 주체에 매핑하지 않지만 다른 로그인 모듈과 결합될 수 있습니다. 또는 Certificate login 모듈의 두 하위 클래스인 CertificateRolesDatabaseCertificate 는 인증 후 역할을 주체에 매핑하는 방법을 제공합니다. 아래 예제에서는 CertificateRoles 로그인 모듈을 사용하여 인증서 기반 인증으로 보안 도메인을 구성하는 방법을 보여줍니다.

주의

인증을 수행할 때 보안 도메인은 양방향 SSL/TLS를 설정할 때 클라이언트가 제공하는 것과 동일한 인증서를 사용합니다. 따라서 클라이언트는 양방향 SSL/TLS에 동일한 인증서를 사용하고 애플리케이션 또는 Jakarta Enterprise Beans와 인증서 기반 인증을 사용해야 합니다.

인증서 기반 인증을 사용한 보안 도메인 예

/subsystem=security/security-domain=cert-roles-domain:add

/subsystem=security/security-domain=cert-roles-domain/jsse=classic:add(truststore={password=secret, url="/path/to/server.truststore.jks"}, keystore={password=secret, url="/path/to/server.keystore.jks"}, client-auth=true)

/subsystem=security/security-domain=cert-roles-domain/authentication=classic:add

/subsystem=security/security-domain=cert-roles-domain/authentication=classic/login-module=CertificateRoles:add(code=CertificateRoles, flag=required, module-options=[ securityDomain="cert-roles-domain", rolesProperties="${jboss.server.config.dir}/cert-roles.properties",password-stacking="useFirstPass", verifier="org.jboss.security.auth.certs.AnyCertVerifier"])

참고

위의 예제에서는 CertificateRoles 로그인 모듈을 사용하여 인증을 처리하고 인증된 주체에 역할을 매핑합니다. 이 작업은 rolesProperties 특성을 사용하여 속성 파일을 참조하여 수행합니다. 이 파일에는 다음 형식을 사용하는 사용자 이름 및 역할이 나열됩니다.

user1=roleA
user2=roleB,roleC
user3=

사용자 이름이 제공된 인증서의 DN(예: CN=valid-client, OU=JBoss, O=Red Hat, L=Raleigh, ST=NC, C=US )으로 표시되므로 속성 파일을 사용할 때 = 및 공백과 같은 특수 문자를 이스케이프해야 합니다.

역할 속성 파일 예

CN\=valid-client,\ OU\=JBoss,\ O\=Red\ Hat,\ L\=Raleigh,\ ST\=NC,\ C\=US=Admin

확인할 인증서 DN은 다음과 같습니다.

$ keytool -printcert -file valid-client.crt
Owner: CN=valid-client, OU=JBoss, O=Red Hat, L=Raleigh, ST=NC, C=US
...

3.4.2. 인증서 기반 인증을 통한 보안 도메인을 사용하도록 애플리케이션 구성

다른 형태의 인증과 함께 보안 도메인을 사용하도록 애플리케이션을 구성하는 것과 유사하게 jboss-web.xml 및 web.xml 파일을 적절하게 구성해야 합니다.

jboss-web.xml 의 경우 인증서 기반 인증을 위해 구성한 보안 도메인에 참조를 추가합니다.

jboss-web.xml 예

<jboss-web>
  <security-domain>cert-roles-domain</security-domain>
</jboss-web>

web.xml 의 경우 < login-config>에서 <auth-method > 속성을 CLIENT-CERT 로 설정합니다. 또한 <security-constraint><security-roles> 를 정의해야 합니다.

예: web.xml

<web-app>
  <!-- URL for secured portion of application-->
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>secure</web-resource-name>
      <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>All</role-name>
    </auth-constraint>
  </security-constraint>

  <!-- Security roles referenced by this web application -->
  <security-role>
    <description>The role that is required to log in to the application</description>
    <role-name>All</role-name>
  </security-role>

  <login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>cert-roles-domain</realm-name>
  </login-config>
</web-app>

3.4.3. 클라이언트 설정

클라이언트가 인증서 기반 인증으로 보안된 애플리케이션에 대해 인증하려면 클라이언트는 JBoss EAP 인스턴스의 신뢰 저장소에 포함된 클라이언트 인증서에 액세스해야 합니다. 예를 들어 브라우저를 사용하여 애플리케이션에 액세스하는 경우 클라이언트는 신뢰할 수 있는 인증서를 브라우저의 신뢰 저장소로 가져와야 합니다.

3.5. 보안 도메인의 캐싱 구성

보안 도메인의 캐시를 지정하여 인증 검사 속도를 높일 수 있습니다. 기본적으로 보안 도메인에서는 간단한 맵을 캐시로 사용합니다. 이 기본 캐시는 Least Recently Used (LRU) 캐시이며 최대 1000개의 항목이 있습니다. 또는 Infinispan 캐시를 사용하도록 보안 도메인을 설정하거나 캐싱을 완전히 비활성화할 수 있습니다.

3.5.1. 보안 도메인의 캐시 유형 설정

사전 요구 사항

  • Infinispan 캐시를 사용하도록 보안 도메인을 구성하는 경우 먼저 보안 도메인에서 사용할 기본 캐시가 포함된 security 라는 Infinispan 캐시 컨테이너를 생성해야 합니다.

    중요

    보안 도메인에 사용할 하나의 Infinispan 캐시 구성만 정의할 수 있습니다. Infinispan 캐시를 사용하는 여러 보안 도메인이 있을 수 있지만 각 보안 도메인은 하나의 Infinispan 캐시 구성에서 고유한 캐시 인스턴스를 생성합니다.

    캐시 컨테이너 생성에 대한 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

관리 콘솔 또는 관리 CLI를 사용하여 보안 도메인의 캐시 유형을 설정할 수 있습니다.

  • 관리 콘솔을 사용하려면 다음을 수행합니다.

    1. ConfigurationSubsystemsSecurity (Legacy) 로 이동합니다.
    2. 목록에서 보안 도메인을 선택하고 View(보기 )를 클릭합니다.
    3. Edit(편집 )를 클릭하고 Cache Type (캐시 유형) 필드의 default 또는 infinspan 을 선택합니다.
    4. 저장을 클릭합니다.
  • 관리 CLI를 사용하려면 다음 명령을 사용합니다.

    /subsystem=security/security-domain=SECURITY_DOMAIN_NAME:write-attribute(name=cache-type,value=CACHE_TYPE)

    예를 들어 Infinispan 캐시를 사용하도록 other 보안 도메인을 설정하려면 다음을 수행합니다.

    /subsystem=security/security-domain=other:write-attribute(name=cache-type,value=infinispan)

3.5.2. 보안 주체 나열 및 플러시

캐시의 보안 주체 나열

다음 관리 CLI 명령을 사용하여 보안 도메인의 캐시에 저장된 주체를 확인할 수 있습니다.

/subsystem=security/security-domain=SECURITY_DOMAIN_NAME:list-cached-principals

캐시에서 보안 주체 플러시

필요한 경우 보안 도메인의 캐시에서 주체를 플러시할 수 있습니다.

  • 특정 주체를 플러시하려면 다음 관리 CLI 명령을 사용합니다.

    /subsystem=security/security-domain=SECURITY_DOMAIN_NAME:flush-cache(principal=USERNAME)
  • 캐시에서 모든 주체를 플러시하려면 다음 관리 CLI 명령을 사용합니다.

    /subsystem=security/security-domain=SECURITY_DOMAIN_NAME:flush-cache

3.5.3. 보안 도메인의 캐싱 비활성화

관리 콘솔 또는 관리 CLI를 사용하여 보안 도메인의 캐싱을 비활성화할 수 있습니다.

  • 관리 콘솔을 사용하려면 다음을 수행합니다.

    1. ConfigurationSubsystemsSecurity (Legacy) 로 이동합니다.
    2. 목록에서 보안 도메인을 선택하고 View(보기 )를 클릭합니다.
    3. Edit(편집 )를 클릭하고 Cache Type(캐시 유형 )의 빈 값을 선택합니다.
    4. 저장을 클릭합니다.
  • 관리 CLI를 사용하려면 다음 명령을 사용합니다.

    /subsystem=security/security-domain=SECURITY_DOMAIN_NAME:undefine-attribute(name=cache-type)

4장. 애플리케이션 설정

4.1. 인증에 Elytron 또는 Legacy Security를 사용하도록 웹 애플리케이션 구성

인증을 위해 elytron 또는 레거시 보안 하위 시스템을 구성한 후에는 애플리케이션을 사용하도록 구성해야 합니다.

  1. 애플리케이션의 web.xml 을 구성합니다.

    적절한 인증 방법을 사용하도록 애플리케이션의 web.xml 을 구성해야 합니다. elytron 하위 시스템을 사용하는 경우 생성한 http-authentication-factory 에서 정의됩니다. 레거시 보안 하위 시스템을 사용하는 경우 로그인 모듈과 구성하려는 인증 유형에 따라 달라집니다.

    BASIC 인증을 사용하는 web.xml

    <web-app>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>secure</web-resource-name>
          <url-pattern>/secure/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
          <role-name>Admin</role-name>
        </auth-constraint>
      </security-constraint>
      <security-role>
        <description>The role that is required to log in to /secure/*</description>
        <role-name>Admin</role-name>
      </security-role>
      <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>exampleApplicationDomain</realm-name>
      </login-config>
    </web-app>

  2. 보안 도메인을 사용하도록 애플리케이션을 구성합니다.

    애플리케이션의 jboss-web.xml 을 구성하여 인증에 사용할 보안 도메인을 지정할 수 있습니다. elytron 하위 시스템을 사용하는 경우 이는 application-security-domain 을 생성할 때 정의됩니다. 레거시 보안 하위 시스템을 사용하는 경우 이는 레거시 보안 도메인의 이름입니다.

    jboss-web.xml

    <jboss-web>
      <security-domain>exampleApplicationDomain</security-domain>
    </jboss-web>

    jboss-web.xml 을 사용하면 단일 애플리케이션에 대해서만 보안 도메인을 구성할 수 있습니다. 또는 undertow 하위 시스템을 사용하여 모든 애플리케이션에 기본 보안 도메인을 지정할 수도 있습니다. 이렇게 하면 jboss-web.xml 을 사용하여 개별 애플리케이션의 보안 도메인을 구성할 수 있습니다.

    /subsystem=undertow:write-attribute(name=default-security-domain, value="exampleApplicationDomain")
    중요

    undertow 하위 시스템에서 default-security-domain 을 설정하면 모든 애플리케이션에 적용됩니다. default-security-domain 이 설정되고 애플리케이션이 jboss-web.xml 파일에서 보안 도메인을 지정하는 경우 jboss-web.xml 의 구성이 undertow 하위 시스템의 default-security-domain 을 재정의합니다.

    참고

    Jakarta Enterprise Beans의 보안 도메인은 ejb3 하위 시스템, jboss-ejb3.xml 파일의 Jakarta Enterprise Beans의 설명자 또는 @SecurityDomain 주석을 사용하여 Jakarta Enterprise Beans 구성에 정의되어 있습니다.

    자세한 내용은 Jakarta Enterprise Beans Application Security in the Developing Jakarta Enterprise Beans Applications 가이드를 참조하십시오.

자동 BASIC 인증

자동 BASIC 인증을 수행하도록 elytron 을 구성할 수 있습니다. 자동 인증이 활성화되면 사용자는 웹 애플리케이션에 액세스하기 위해 로그인하라는 메시지가 표시되지 않습니다. 대신 대체 인증 메커니즘이 사용됩니다. 사용자 요청에 Authorization 헤더가 포함된 경우 BASIC 인증 메커니즘이 사용됩니다.

자동 BASIC 인증을 사용하려면 다음과 같이 auth-method 속성 값을 설정합니다.

<auth-method>BASIC?silent=true</auth-method>

병렬에서 Elytron 및 legacyacy Security Subsystems 사용

elytron 및 레거시 보안 하위 시스템에서 인증을 정의하고 병렬로 사용할 수 있습니다. undertow 하위 시스템에서 jboss-web.xmldefault-security-domain 을 둘 다 사용하는 경우 JBoss EAP는 먼저 elytron 하위 시스템에서 구성된 보안 도메인과 일치하려고 합니다. 일치하는 항목을 찾을 수 없는 경우 JBoss EAP는 레거시 보안 하위 시스템에 구성된 항목과 보안 도메인을 일치시키려고 합니다. elytron 및 레거시 보안 하위 시스템에 각각 이름이 동일한 보안 도메인이 있는 경우 elytron 보안 도메인이 사용됩니다.

참고

하나의 보안 도메인을 사용하여 정의된 웹 서블릿이 있고 Jakarta Enterprise Beans 특정 보안 도메인을 사용하는 다른 EAR 모듈에서 Jakarta Enterprise Bean을 호출하는 경우 다음 중 하나가 발생할 수 있습니다.

  • WAR와 Jakarta Enterprise Beans가 다른 Elytron 보안 도메인에 매핑되면 해당 ID가 하나의 배포 도메인에서 다음 배포 도메인으로 전파되도록 아웃플로우 또는 신뢰할 수 있는 보안 도메인을 구성해야 합니다. 이 작업을 수행하지 않는 한, 호출이 Jakarta Enterprise Beans에 도달하면 ID가 익명이 됩니다. 인증을 위해 보안 ID를 구성하는 방법에 대한 자세한 내용은 신뢰할 수 있는 보안 도메인 아웃플로 구성을 참조하십시오.
  • WAR와 Jakarta Enterprise Beans가 다른 보안 도메인 이름을 참조하지만 동일한 Elytron 보안 도메인에 매핑되는 경우 해당 ID는 추가 단계 없이 전파됩니다.

마이그레이션 시 전체 애플리케이션을 마이그레이션하는 것이 가장 좋습니다. Jakarta Enterprise Beans 및 WAR를 별도로 마이그레이션하여 elytron 및 레거시 보안 하위 시스템을 병렬로 사용하는 것은 권장되지 않습니다. Elytron을 사용하도록 애플리케이션을 마이그레이션하는 방법에 대한 자세한 내용은 JBoss EAP 마이그레이션 가이드에서 Elytron 으로 마이그레이션을 참조하십시오.

4.2. Elytron 클라이언트를 사용하여 클라이언트 인증 구성

Jakarta Enterprise Beans 등의 JBoss EAP에 연결하는 클라이언트는 Elytron Client를 사용하여 인증할 수 있습니다. Elytron Client는 Elytron을 사용하여 원격 클라이언트를 인증할 수 있도록 하는 클라이언트측 프레임워크입니다. Elytron Client에는 다음과 같은 구성 요소가 있습니다.

인증 설정
인증 구성에는 사용자 이름, 암호, 허용되는 SASL 메커니즘 등의 인증 정보와 다이제스트 인증 중에 사용할 보안 영역이 포함됩니다. 인증 구성에 지정된 연결 정보는 초기 컨텍스트의 PROVIDER_URL 에 지정된 모든 값을 재정의합니다.
MatchRule
사용할 인증 구성을 결정하는 데 사용되는 규칙입니다.
인증 문맥
클라이언트와 함께 연결을 설정하는 데 사용할 규칙 및 인증 구성 세트입니다.

연결이 설정되면 클라이언트는 인증 컨텍스트를 사용합니다. 이 인증 컨텍스트에는 각 아웃바운드 연결에 사용할 인증 구성을 선택하는 규칙이 포함되어 있습니다. 예를 들어 server1에 연결할 때 하나의 인증 구성과 server 2 와 연결할 때 다른 인증 구성을 사용하는 규칙이 있을 수 있습니다. 인증 컨텍스트는 인증 구성 집합과 연결을 설정할 때 선택하는 방법을 정의하는 규칙 집합으로 구성됩니다. 인증 컨텍스트는 ssl-context 를 참조할 수도 있으며 규칙과 일치시킬 수 있습니다.

연결을 설정할 때 보안 정보를 사용하는 클라이언트를 생성하려면 다음을 수행합니다.

  • 하나 이상의 인증 구성 생성.
  • 규칙 및 인증 구성 쌍을 만들어 인증 컨텍스트를 만듭니다.
  • 연결을 설정할 실행 가능 항목을 만듭니다.
  • 인증 컨텍스트를 사용하여 실행 가능 항목을 실행합니다.

연결을 설정하면 Elytron Client는 인증 컨텍스트에서 제공하는 규칙 집합을 사용하여 인증 중에 사용할 올바른 인증 구성과 일치시킵니다.

다음 접근 방법 중 하나를 사용하여 클라이언트 연결을 설정할 때 보안 정보를 사용할 수 있습니다.

중요

Elytron Client를 사용하여 Jakarta Enterprise Beans를 호출할 때 javax.naming.InitialContext 에서 Context.SECURITY_PRINCIPAL 설정과 같은 하드 코딩된 프로그래밍 방식의 인증 정보가 Elytron 클라이언트 구성을 재정의합니다.

4.2.1. 구성 파일 접근 방식

구성 파일 접근 방식은 인증 구성, 인증 컨텍스트 및 일치 규칙을 사용하여 XML 파일을 생성해야 합니다.

예: custom-config.xml

<configuration>
    <authentication-client xmlns="urn:elytron:client:1.2">
        <authentication-rules>
            <rule use-configuration="monitor">
                <match-host name="127.0.0.1" />
            </rule>
            <rule use-configuration="administrator">
                <match-host name="localhost" />
            </rule>
        </authentication-rules>
        <authentication-configurations>
            <configuration name="monitor">
                <sasl-mechanism-selector selector="DIGEST-MD5" />
                <providers>
                  <use-service-loader />
                </providers>
                <set-user-name name="monitor" />
                <credentials>
                    <clear-password password="password1!" />
                </credentials>
                <set-mechanism-realm name="ManagementRealm" />
             </configuration>

             <configuration name="administrator">
                <sasl-mechanism-selector selector="DIGEST-MD5" />
                <providers>
                  <use-service-loader />
                </providers>
                <set-user-name name="administrator" />
                <credentials>
                    <clear-password password="password1!" />
                </credentials>
                <set-mechanism-realm name="ManagementRealm" />
             </configuration>
        </authentication-configurations>
    </authentication-client>
</configuration>

그런 다음 클라이언트를 실행할 때 시스템 속성을 설정하여 클라이언트 코드에서 해당 파일을 참조할 수 있습니다.

$ java -Dwildfly.config.url=/path/to/custom-config.xml ...
중요

프로그래밍 방식을 사용하는 경우, 와일드플ly .config.url 시스템 속성이 설정된 경우에도 제공된 구성 파일을 재정의합니다.

규칙을 만들 때 호스트 이름,포트,프로토콜 또는 사용자 이름과 같은 다양한 매개 변수에서 일치 항목을 찾을 수 있습니다. MatchRule 의 전체 옵션 목록은 Javadocs에서 확인할 수 있습니다. 규칙은 구성된 순서대로 평가합니다.

규칙에 일치하는 설정이 포함되지 않은 경우 전체 규칙이 일치하고 인증 구성이 선택됩니다. 규칙에 둘 이상의 일치 설정이 포함된 경우 인증 구성을 선택하려면 모두 일치해야 합니다.

표 4.1. 일반 규칙

속성설명

match-local-security-domain

는 일치시킬 로컬 보안 도메인을 지정하는 단일 이름 특성을 사용합니다.

match-host

는 일치시킬 호스트 이름을 지정하는 단일 name 속성을 사용합니다. 예를 들어 호스트 127.0.0.1http://127.0.0.1:9990/my/path 에서 일치합니다.

match-no-user

사용자가 없는 URI와 일치합니다.

match-path

는 일치시킬 경로를 지정하는 단일 name 속성을 사용합니다. 예를 들어 /my/path/ 경로는 http://127.0.0.1:9990/my/path 에서 일치합니다.

match-port

는 와 일치할 포트를 지정하는 단일 이름 특성을 사용합니다. 예를 들어 포트 9990http://127.0.0.1:9990/my/path 에서 일치합니다.

match-protocol

는 일치시킬 프로토콜을 지정하는 단일 이름 특성을 사용합니다. 예를 들어 프로토콜 httphttp://127.0.0.1:9990/my/path 에서 일치합니다.

match-urn

는 일치시킬 URN을 지정하는 단일 name 속성을 사용합니다.

match-user

는 일치시킬 사용자를 지정하는 단일 name 속성을 사용합니다.

wildfly-config.xml 파일은 Example wildfly-config.xml 에서 찾을 수 있습니다. wildfly-config.xml 파일을 구성하는 방법에 대한 자세한 내용은 wildfly -config.xml 파일을 사용하여 클라이언트 구성을 참조하십시오.

4.2.2. 프로그래밍 방식 접근 방식

프로그래밍 방식의 접근 방식은 클라이언트의 코드에서 모든 Elytron 클라이언트 구성을 구성합니다.

//create your authentication configuration
AuthenticationConfiguration adminConfig =
    AuthenticationConfiguration.empty()
      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
      .setSaslMechanismSelector(SaslMechanismSelector.NONE.addMechanism("DIGEST-MD5"))
      .useRealm("ManagementRealm")
      .useName("administrator")
      .usePassword("password1!");

//create your authentication context
AuthenticationContext context = AuthenticationContext.empty();
context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), adminConfig);


//create your runnable for establishing a connection
Runnable runnable =
    new Runnable() {
      public void run() {
        try {
           //Establish your connection and do some work
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    };

//use your authentication context to run your client
context.run(runnable);

AuthenticationConfiguration 및 Authentication Context 에 구성 세부 정보를 추가하면 각 메서드 호출에서 해당 오브젝트의 새 인스턴스를 반환합니다. 예를 들어 다른 호스트 이름으로 연결할 때 별도의 구성을 원하는 경우 다음을 수행할 수 있습니다.

//create your authentication configuration
AuthenticationConfiguration commonConfig =
    AuthenticationConfiguration.empty()
      .useProviders(() -> new Provider[] { new WildFlyElytronProvider() })
      .setSaslMechanismSelector(SaslMechanismSelector.NONE.addMechanism("DIGEST-MD5"))
      .useRealm("ManagementRealm");

AuthenticationConfiguration administrator =
    commonConfig
      .useName("administrator")
      .usePassword("password1!");


AuthenticationConfiguration monitor =
    commonConfig
      .useName("monitor")
      .usePassword("password1!");


//create your authentication context
AuthenticationContext context = AuthenticationContext.empty();
context = context.with(MatchRule.ALL.matchHost("127.0.0.1"), administrator);
context = context.with(MatchRule.ALL.matchHost("localhost"), monitor);

표 4.2. 일반 규칙

Rule설명

matchLocalSecurityDomain(String name)

구성 파일 접근 방식의 match-domain 과 동일합니다.

matchNoUser()

구성 파일 접근 방식의 match-no-user 와 동일합니다.

matchPath(String pathSpec)

구성 파일 방법에서는 match-path 와 동일합니다.

matchPort(int port)

이는 구성 파일 접근 방식의 match-port 와 동일합니다.

matchProtocol(String protoName)

이는 구성 파일 접근 방식의 match-port 와 동일합니다.

matchPurpose(문자열 목적)

이 규칙과 동일하지만 지정된 목적 이름과도 일치하는 새 규칙을 만듭니다.

matchUrnName(문자열 이름)

구성 파일 방법에서는 match-urn 과 동일합니다.

matchUser(String userSpec)

구성 파일 방법에서는 match-userinfo 와 동일합니다.

또한 비어 있는 인증 구성을 시작하는 대신, captureCurrite() 를 사용하여 현재 구성된 인증 구성을 시작할 수 있습니다.

//create your authentication configuration
AuthenticationConfiguration commonConfig = AuthenticationConfiguration.captureCurrent();

captureCurrite() 를 사용하면 이전에 설정된 인증 컨텍스트를 캡처하고 새 기본 구성으로 사용합니다. 인증 컨텍스트는 run()을 호출하여 활성화되면 설정됩니다. captureCurrite() 를 호출하고 컨텍스트가 현재 활성 상태가 아닌 경우 사용 가능한 경우 기본 인증을 사용하려고 합니다. 이에 대한 자세한 내용은 다음 섹션에서 확인할 수 있습니다.

AuthenticationConfiguration.empty() 는 구성을 빌드하는 데 기본으로만 사용해야 하며 자체적으로 사용해서는 안 됩니다. JVM 전체의 등록된 공급업체를 사용하고 익명 인증을 활성화하는 구성을 제공합니다.

AuthenticationConfiguration.empty() 구성 상단에 공급자를 지정하는 경우 사용자 지정 목록을 지정할 수 있지만, 대부분의 사용자는 WildFlyElytronProvider() 공급자를 사용해야 합니다.

인증 컨텍스트를 생성할 때 context.with(…​) 는 현재 컨텍스트에서 제공된 규칙 및 인증 구성과 규칙 및 인증 구성을 병합하는 새 컨텍스트를 생성합니다. 제공된 규칙 및 인증 구성은 현재 컨텍스트의 뒤에 표시됩니다.

4.2.3. 기본 설정 접근 방식

기본 구성 방법은 Elytron 클라이언트가 제공하는 구성에 완전히 의존합니다.

//create your runnable for establishing a connection
Runnable runnable =
    new Runnable() {
      public void run() {
        try {
           //Establish your connection and do some work
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    };

// run runnable directly
runnable.run();

기본 구성을 제공하기 위해 Elytron Client는 파일 시스템에서 a wildfly-config.xml 파일을 자동 검색합니다. 다음과 같은 위치가 표시됩니다.

  • 클라이언트 코드 외부에 설정된 wildfly.config.url 시스템 속성으로 지정된 위치입니다.
  • classpath 루트 디렉토리.
  • 클래스 경로의 META-INF 디렉터리입니다.
  • 현재 사용자의 홈 디렉토리.
  • 현재 작업 디렉터리.

다음 예제를 client wildfly-config.xml 파일의 기본 구성으로 사용할 수 있습니다.

Basic wildfly-config.xml

<configuration>
  <authentication-client xmlns="urn:elytron:client:1.2">
    <authentication-rules>
      <rule use-configuration="default" />
    </authentication-rules>
    <authentication-configurations>
      <configuration name="default">
        <sasl-mechanism-selector selector="#ALL" />
        <set-mechanism-properties>
          <property key="wildfly.sasl.local-user.quiet-auth" value="true" />
        </set-mechanism-properties>
        <providers>
          <use-service-loader/>
        </providers>
      </configuration>
    </authentication-configurations>
  </authentication-client>
</configuration>

참고

The ANONYMOUS 메커니즘은 비익명 사용자로 권한을 지원하지 않습니다. 즉, Elytron 클라이언트 구성 파일에서 set-authorization -name 이 set-anonymous 에서 작동하지 않습니다. 대신 set-authorization-name 을 구성하는 경우 인증된 ID에 set-user-name 을 지정해야 합니다.

4.2.4. JBoss EAP에 배포된 클라이언트와 함께 Elytron 클라이언트 사용

JBoss EAP에 배포된 클라이언트는 Elytron Client도 사용할 수 있습니다. AuthenticationContext 는 JBoss EAP 구성의 default-authentication-context 설정에서 자동으로 구문 분석되고 생성됩니다. default-authentication-context 가 구성되지 않았지만 배포에 포함되거나 the wildfly.config. url 시스템 속성을 사용하여 설정된 awildfly-config. xml 파일이 있는 경우 AuthenticationContext 는 해당 파일에서 자동으로 구문 분석하고 생성됩니다.

예제: 기본 인증 컨텍스트 설정

/subsystem=elytron/authentication-context=AUTH_CONTEXT:add
/subsystem=elytron:write-attribute(name=default-authentication-context,value=AUTH_CONTEXT)

배포 외부에서 구성 파일을 로드하려면 parseAuthenticationClientConfiguration(URI) 메서드를 사용할 수 있습니다. 이 메서드는 프로그래밍 방식을 사용하여 클라이언트 코드에서 사용할 수 있는 AuthenticationContext 를 반환합니다.

또한 클라이언트는 elytron 하위 시스템에서 제공하는 클라이언트 구성에서 AuthenticationContext 를 자동으로 구문 분석하고 생성합니다. elytron 하위 시스템의 클라이언트 구성은 자격 증명 저장소와 같이 elytron 하위 시스템에 정의된 다른 구성 요소를 활용할 수도 있습니다. 배포 및 elytron 하위 시스템에서 클라이언트 구성을 모두 제공하는 경우 elytron 하위 시스템의 구성이 사용됩니다.

참고

elytron 하위 시스템의 AuthenticationContext 는 이 authentication-contextelytron 하위 시스템의 기본값으로 설정된 경우에만 사용할 수 있습니다.

4.2.5. wildfly-config.xml 파일을 사용하여 자카르타 관리 클라이언트 구성

JBoss EAP 7.1부터 JConsole을 포함한 Jakarta Management 클라이언트는 the wildfly-config.xml 파일을 사용하여 구성할 수 있습니다. Jakarta Management 클라이언트를 시작할 때 -Dwildfly.config.url 시스템 속성을 사용하여 구성 파일의 파일 경로를 지정합니다.

-Dwildfly.config.url=path/to/wildfly-config.xml
참고

JConsole을 사용하는 경우 -Dwildfly.config.url 시스템 속성 앞에 -J 가 있어야 합니다. 예를 들면 다음과 같습니다.

-J-Dwildfly.config.url=path/to/wildfly-config.xml

자세한 내용은 JBoss EAP 개발 가이드 의 the wildfly-config.xml 파일을 사용한 클라이언트 구성을 참조하십시오.

4.2.6. ElytronAuthenticator를 사용하여 ID 전달

주의

JBoss EAP에서 ElytronAuthenticator 를 사용하는 것은 Java 8의 알려진 인증 정보 제한으로 인해 지원되지 않거나 권장되지 않습니다. 이 클래스를 사용하여 ID를 전파할 때 다음 제한 사항에 유의하십시오.

  • Java 8 설계 제한으로 인해 보안 ID 전파가 보호된 서블릿 호출에서는 작동하지 않습니다.
  • 서버에 ElytronAuthenticator 를 사용하지 마십시오(예: Jakarta Enterprise Beans).
  • 자격 증명 캐싱은 독립 실행형 클라이언트 JVM의 사용에 영향을 줄 수 있습니다.

JBoss EAP 7.1은 현재 보안 컨텍스트를 사용하여 인증을 수행하는 ElytronAuthenticator 클래스를 도입했습니다. org.wildfly.security.auth.util.ElytronAuthenticator 클래스는 java.net.Authenticator 의 구현입니다.

다음은 ElytronAuthenticator 클래스를 생성하고 사용하여 ID를 서버에 전파하는 클라이언트 코드의 예입니다.

예제: ElytronAuthenticator를 사용하는 코드

// Create the authentication configuration
AuthenticationConfiguration httpConfig = AuthenticationConfiguration.empty().useName("bob");

// Create the authentication context
AuthenticationContext context = AuthenticationContext.captureCurrent().with(MatchRule.ALL, httpConfig.usePassword(createPassword(httpConfig, "secret")));

String response = context.run((PrivilegedExceptionAction<String>) () -> {
    Authenticator.setDefault(new ElytronAuthenticator());
    HttpURLConnection connection = HttpURLConnection.class.cast(new URL("http://localhost:" + SERVER_PORT).openConnection());
    try (InputStream inputStream = connection.getInputStream()) {
        return new BufferedReader(new InputStreamReader(inputStream)).lines().findFirst().orElse(null);
    }
});

4.3. 신뢰할 수 있는 보안 도메인 개요 구성

모든 보안 호출에 대해 보안 도메인의 보안 ID가 설정됩니다. 호출이 처리되면 SecurityIdentity 가 현재 스레드와 연결됩니다. 동일한 보안 도메인에서 getCurriteSecurityIdentity() 에 대한 후속 호출의 경우 관련 ID가 반환됩니다.

애플리케이션 서버 내에 단일 호출 또는 스레드에 대해 여러 SecurityDomain 인스턴스가 있을 수 있습니다. 각 SecurityDomain 인스턴스는 다른 SecurityIdentity 와 연결할 수 있습니다. 해당 보안 도메인의 getCurriteSecurityIdentity() 메서드를 호출하면 올바른 보안 ID가 반환됩니다. 배포는 요청 처리 중에 다른 배포를 호출할 수 있습니다. 각 배포는 단일 보안 도메인에 연결됩니다. 호출된 배포에서 동일한 보안 도메인을 사용하는 경우 현재 보안 ID가 있는 단일 보안 도메인의 개념은 그대로 유지됩니다. 그러나 각 배포에서 자체 보안 도메인을 참조할 수 있습니다.

다음 섹션에 설명된 대로 보안 도메인과 연결된 보안 ID를 다른 보안 도메인으로 가져올 수 있습니다.

보안 ID 가져오기

이 도메인의 보안 ID를 얻기 위해 보안 도메인에서 다른 보안 도메인으로 보안 ID를 가져오려면 주로 세 가지 처리 흐름이 있습니다.

동일한 보안 도메인
보안 도메인은 항상 고유한 보안 ID를 가져올 수 있습니다. 이 경우 보안 도메인은 항상 자체적으로 신뢰합니다.
공통 보안 영역
가져오기 프로세스 중에 보안 도메인은 가져오는 보안 ID의 주체를 가져와서 구성된 주요 변환기 및 영역 매퍼를 통해 전달한 다음 해당 보안 도메인의 ID에 매핑합니다. ID를 생성한 보안 도메인에서 사용된 보안 도메인 내에서 동일한 보안 영역을 사용하는 경우 둘 다 동일한 기본 ID로 지원되며 가져오기가 허용됩니다.
신뢰할 수 있는 보안 도메인
ID가 성공적으로 매핑되었지만 일반적인 보안 영역이 없는 경우 가져오기를 처리하는 보안 도메인이 원래 보안 도메인을 신뢰하는지 여부를 테스트합니다. 이 경우 가져오기가 수락됩니다.
참고

가져오기를 처리하는 보안 도메인에 ID가 있어야 합니다. 보안 ID는 전체에서 신뢰되지 않습니다.

아웃플로

보안 ID를 자동으로 다른 보안 도메인으로 이전하도록 보안 도메인을 구성할 수 있습니다.

보안 도메인에서 현재 호출에 보안 ID를 설정하고 사용하는 경우 아웃플로 보안 도메인 목록을 반복하여 각 보안 ID를 가져옵니다.

이 모델은 예를 들어 웹 애플리케이션에서 공통 보안 도메인을 사용하여 5개의 서로 다른 Jakarta Enterprise Bean을 호출하는 경우와 같이 다른 보안 도메인을 사용하는 배포에 대한 여러 호출이 발생할 경우 더 적절합니다.

5장. LDAP를 사용하여 관리 인터페이스 보안

관리 인터페이스는 LDAP 서버(Microsoft Active Directory 포함)에 대해 인증할 수 있습니다. 이 작업은 LDAP 인증자를 사용하여 수행합니다. LDAP 인증자는 먼저 아웃바운드 LDAP 연결을 사용하여 원격 디렉터리 서버에 대한 연결을 설정하여 작동합니다. 그런 다음 사용자가 인증 시스템에 전달한 사용자 이름을 사용하여 LDAP 레코드의 DN(정규화된 고유 이름)을 찾습니다. 성공하면 사용자의 DN을 자격 증명으로 사용하고 사용자가 제공한 암호를 사용하여 새 연결이 설정됩니다. 이 두 번째 연결 및 LDAP 서버에 대한 인증이 성공하면 DN이 유효하도록 확인되고 인증에 성공했습니다.

참고

LDAP를 사용하여 관리 인터페이스를 보호하면 인증이 다이제스트에서 BASIC/Plain으로 변경되므로 기본적으로 사용자 이름과 암호가 네트워크를 통해 암호화되지 않습니다. 아웃바운드 연결에서 SSL/TLS를 활성화하여 이 트래픽을 암호화하고 이 정보를 지우는 것을 방지할 수 있습니다.

중요

레거시 보안 영역이 LDAP 서버를 사용하여 인증을 수행하는 경우(예: LDAP를 사용하여 관리 인터페이스 보안) LDAP 서버에 연결할 수 없는 경우 JBoss EAP에서 500 또는 내부 서버 오류를 반환합니다. 이 동작은 동일한 조건에서 401 또는 권한 없는 오류 코드를 반환한 이전 버전의 JBoss EAP와 다릅니다.

5.1. Elytron 사용

ID 저장소를 사용하는 것과 동일한 방식으로 elytron 하위 시스템에서 LDAP를 사용하여 관리 인터페이스를 보호할 수 있습니다. elytron 하위 시스템과 함께 보안에 대한 ID 저장소를 사용하는 방법에 대한 정보는 How to Configure Server Security (서버 보안 구성 방법)의 새 ID 저장소로 관리 인터페이스 보안 섹션에서 확인할 수 있습니다. 예를 들어 LDAP로 관리 콘솔을 보호하려면 다음을 수행합니다.

참고

JBoss EAP 서버에 Active Directory LDAP 서버를 사용하는 경우와 같이 암호를 읽을 권한이 없는 경우 정의된 LDAP 영역에서 직접 확인을 true 설정해야 합니다. 이 특성을 사용하면 JBoss EAP 서버 대신 LDAP 서버에서 직접 확인할 수 있습니다.

LDAP ID 저장소의 예

/subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389",principal="uid=admin,ou=system",credential-reference={clear-text="secret"})

/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={search-base-dn="ou=Users,dc=wildfly,dc=org",rdn-identifier="uid",user-password-mapper={from="userPassword"},attribute-mapping=[{filter-base-dn="ou=Roles,dc=wildfly,dc=org",filter="(&(objectClass=groupOfNames)(member={0}))",from="cn",to="Roles"}]})

/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)

/subsystem=elytron/security-domain=exampleLdapSD:add(realms=[{realm=exampleLR,role-decoder=from-roles-attribute}],default-realm=exampleLR,permission-mapper=default-permission-mapper)

/subsystem=elytron/http-authentication-factory=example-ldap-http-auth:add(http-server-mechanism-factory=global,security-domain=exampleLdapSD,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])

/core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=example-ldap-http-auth)

reload

5.1.1. 아웃바운드 LDAP 연결에 양방향 SSL/TLS에 Elytron 사용

LDAP를 사용하여 관리 인터페이스를 보호하는 경우 양방향 SSL/TLS를 사용하도록 아웃바운드 LDAP 연결을 구성할 수 있습니다. 이렇게 하려면 ssl-context 를 만들고 ldap-realm 에서 사용하는 dir-context 에 추가합니다. 양방향 SSL/TLS ssl-context 생성에 대해서는 서버 보안 구성 방법의 Elytron 하위 시스템 섹션에서 애플리케이션의 Enable Two-way SSL/TLS를 참조하십시오.

주의

Red Hat은 영향을 받는 모든 패키지에서 TLSv1.1 또는 TLSv1.2를 기반으로 SSLv2, SSLv3 및 TLSv1.0을 명시적으로 비활성화하는 것이 좋습니다.

5.2. 레거시 코어 관리 인증 사용

레거시 보안 하위 시스템을 사용하여 관리 인터페이스의 인증 소스로 LDAP 디렉터리 서버를 사용하려면 다음 단계를 수행해야 합니다.

  1. LDAP 서버에 대한 아웃바운드 연결을 만듭니다.

    아웃바운드 LDAP 연결을 생성하는 목적은 보안 영역(및 JBoss EAP 인스턴스)이 LDAP 서버에 대한 연결을 설정하도록 허용하는 것입니다. 보안 도메인에서 Database 로그인 모듈과 함께 사용할 데이터 소스를 생성하는 경우와 유사합니다.

    LDAP 아웃바운드 연결을 통해 다음 속성을 사용할 수 있습니다.

    속성필수 항목설명

    url

    제공됨

    디렉터리 서버의 URL 주소입니다.

    search-dn

    아니요

    검색을 수행할 권한이 있는 사용자의 고유 이름(DN)입니다.

    search-credential

    아니요

    검색을 수행하기 위해 인증된 사용자의 암호입니다. 이 요소에서 지원하는 특성은 다음과 같습니다.

    • 저장 - 검색 자격 증명을 가져올 자격 증명 저장소에 대한 참조입니다.
    • alias - 참조된 저장소에 있는 자격 증명의 별칭입니다.
    • 유형 - 자격 증명 저장소에서 가져올 자격 증명 유형의 정규화된 클래스 이름입니다.
    • 일반 텍스트 - 자격 증명 저장소를 참조하는 대신, 이 속성을 사용하여 일반 텍스트 암호를 지정할 수 있습니다.

    initial-context-factory

    아니요

    연결을 설정할 때 사용할 초기 컨텍스트 팩토리입니다. 기본값은 com.sun.jndi.ldap.LdapCtxFactory 입니다.

    security-realm

    아니요

    연결을 설정할 때 사용할 구성된 SSLContext 를 얻기 위해 참조할 보안 영역입니다.

    추천

    아니요

    검색을 수행할 때 참조가 발생할 때 동작을 지정합니다. 유효한 옵션은 IGNORE,FOLLOW, THROW 입니다.

    • 무시: 기본 옵션. 참조를 무시합니다.
    • 팔로우: 검색 중에 참조가 발생하면 사용 중인 DirContext 가 해당 참조를 따르려고 합니다. 이 경우 두 번째 서버에 연결하는 데 동일한 연결 설정을 사용할 수 있고 참조에 사용되는 이름에 도달할 수 있다고 가정합니다.
    • THROW: DirContext 에서 참조가 필요하다는 것을 나타내기 위해 예외 LdapReferralException 이 발생합니다. 보안 영역은 참조에 사용할 대체 연결을 처리하고 식별하려고 시도합니다.

    always-send-client-cert

    아니요

    기본적으로 사용자 자격 증명을 확인하는 동안 서버의 클라이언트 인증서가 전송되지 않습니다. true 로 설정되면 항상 전송됩니다.

    handles-referrals-for

    아니요

    연결이 처리할 수 있는 참조를 지정합니다. URI 목록을 지정하는 경우 공백으로 구분해야 합니다. 이를 통해 연결 속성과의 연결을 정의하고 사용할 수 있습니다. 참조를 따르기 위해 다른 자격 증명이 필요한 경우입니다. 이 기능은 두 번째 서버에 대해 인증하는 데 다양한 자격 증명이 필요한 경우 또는 서버가 JBoss EAP 설치에서 연결할 수 없는 이름을 반환하고 대체 주소를 대체할 수 있는 경우에 유용합니다.

    참고

    search-dnsearch-credential 은 사용자가 제공한 사용자 이름 및 암호와 다릅니다. 여기에서 제공하는 정보는 특히 JBoss EAP 인스턴스와 LDAP 서버 간에 초기 연결을 설정하는 데 사용됩니다. 이 연결을 통해 JBoss EAP는 인증을 시도하는 사용자의 DN을 후속 검색을 수행할 수 있습니다. 검색 결과인 사용자의 DN은 인증을 시도하고 제공된 암호를 사용하여 인증 프로세스를 완료하기 위한 별도의 두 번째 연결을 설정합니다.

    다음 예제 LDAP 서버에서는 아웃바운드 LDAP 연결을 구성하는 관리 CLI 명령이 아래에 있습니다.

    표 5.1. LDAP 서버 예

    속성현재의

    url

    127.0.0.1:389

    search-credential

    myPass

    search-dn

    cn=search,dc=acme,dc=com

    아웃바운드 연결을 추가하기 위한 CLI

    /core-service=management/ldap-connection=ldap-connection/:add(search-credential=myPass,url=ldap://127.0.0.1:389,search-dn="cn=search,dc=acme,dc=com")
    
    reload

    참고

    이렇게 하면 JBoss EAP 인스턴스와 LDAP 서버 간에 암호화되지 않은 연결이 생성됩니다. SSL/TLS를 사용하여 암호화된 연결 설정에 대한 자세한 내용은 아웃바운드 LDAP 연결에 SSL/TLS 사용을 참조하십시오.

  2. 새 LDAP 사용 보안 영역을 생성합니다.

    아웃바운드 LDAP 연결이 생성되면 이를 사용하려면 새 LDAP 사용 보안 영역을 만들어야 합니다.

    LDAP 보안 영역에는 다음과 같은 구성 특성이 있습니다.

    속성설명

    연결

    LDAP 디렉터리에 연결하는 데 사용할 아웃바운드-커넥션에 정의된 연결의 이름입니다.

    base-dn

    사용자 검색을 시작할 컨텍스트의 DN입니다.

    재귀

    LDAP 디렉토리 트리 전체에서 검색을 재귀해야 하는지 여부 또는 지정된 컨텍스트만 검색합니다. 기본값은 false입니다.

    user-dn

    DN을 보유한 사용자의 속성입니다. 이 작업은 사용자가 완료할 수 있으므로 인증을 테스트하는 데 사용됩니다. 기본값은 dn 입니다.

    allow-empty-passwords

    이 속성은 비어 있는 암호가 허용되는지 여부를 결정합니다. 기본값은 false입니다.

    username-attribute

    사용자를 검색할 속성의 이름입니다. 이 필터는 사용자가 입력한 사용자 이름이 지정된 속성과 일치하는 간단한 검색을 수행합니다.

    advanced-filter

    제공된 사용자 ID를 기반으로 사용자를 검색하는 데 사용되는 완전히 정의된 필터입니다. 이 속성에는 표준 LDAP 구문에 필터 쿼리가 포함되어 있습니다. 필터에는 {0} 형식의 변수가 포함되어야 합니다. 나중에 사용자가 제공한 사용자 이름으로 대체됩니다. 자세한 내용 및 고급 필터 예제는 권한 부여에 대한 LDAP 및 RBAC 결합 섹션에서 확인할 수 있습니다.

    주의

    심각한 보안 문제이므로 비어 있는 LDAP 암호가 허용되지 않도록 하는 것이 중요합니다. 이 동작이 특히 환경에 권장되지 않는 한, 비어 있는 암호가 허용되지 않고 allow-empty-passwords 가 false로 남아 있는지 확인합니다.

    다음은 ldap-connection 아웃바운드 LDAP 연결을 사용하여 LDAP 지원 보안 영역을 구성하는 관리 CLI 명령입니다.

    /core-service=management/security-realm=ldap-security-realm:add
    
    /core-service=management/security-realm=ldap-security-realm/authentication=ldap:add(connection="ldap-connection", base-dn="cn=users,dc=acme,dc=com",username-attribute="sambaAccountName")
    
    reload
  3. 관리 인터페이스에서 새 보안 영역을 참조합니다. 보안 영역을 만들고 아웃바운드 LDAP 연결을 사용하고 나면 관리 인터페이스에서 새 보안 영역을 참조해야 합니다.

    /core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value="ldap-security-realm")
    참고

    표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

5.2.1. 아웃바운드 LDAP 연결에 양방향 SSL/TLS 사용

다음 단계에 따라 SSL/TLS로 보호되는 아웃바운드 LDAP 연결을 생성합니다.

주의

Red Hat은 영향을 받는 모든 패키지에서 TLSv1.1 또는 TLSv1.2를 기반으로 SSLv2, SSLv3 및 TLSv1.0을 명시적으로 비활성화하는 것이 좋습니다.

  1. 사용할 아웃바운드 LDAP 연결의 보안 영역을 구성합니다.

    보안 영역에는 JBoss EAP 서버가 자체와 LDAP 서버 간의 통신을 암호 해독/암호화하는 데 사용할 키 저장소로 구성된 키 저장소가 포함되어야 합니다. 이 키 저장소를 사용하면 JBoss EAP 인스턴스가 LDAP 서버에 대해 자체적으로 확인할 수 있습니다. 보안 영역에는 LDAP 서버의 인증서가 포함된 신뢰 저장소 또는 LDAP 서버의 인증서에 서명하는 데 사용되는 인증 기관의 인증서도 포함되어 있어야 합니다. 키 저장소 및 신뢰 저장소 구성 및 이를 사용하는 보안 영역 생성 방법은 JBoss EAP의 관리 인터페이스용 2-Way SSL/TLS 설정을 참조하십시오.

  2. SSL/TLS URL 및 보안 영역을 사용하여 아웃바운드 LDAP 연결을 생성합니다.

    Legacy Core Management Authentication 사용에 정의된 프로세스와 유사하게 아웃바운드 LDAP 연결을 만들어야 하지만 LDAP 서버 및 SSL/TLS 보안 영역에 SSL/TLS URL을 사용해야 합니다.

    LDAP 서버의 아웃바운드 LDAP 연결 및 SSL/TLS 보안 영역을 만들고 나면 아웃바운드 LDAP 연결을 해당 정보로 업데이트해야 합니다.

    SSL/TLS URL을 사용하여 아웃바운드 연결을 추가하기 위한 CLI의 예

    /core-service=management/ldap-connection=ldap-connection/:add(search-credential=myPass, url=ldaps://LDAP_HOST:LDAP_PORT, search-dn="cn=search,dc=acme,dc=com")

    SSL/TLS 인증서를 사용하여 보안 영역 추가

    /core-service=management/ldap-connection=ldap-connection:write-attribute(name=security-realm,value="CertificateRealm")
    
    reload

  3. 관리 인터페이스에서 사용할 아웃바운드 LDAP 연결을 사용하는 새 보안 영역을 생성합니다.

    Legacy Core Management Authentication 사용의 절차에서 관리 인터페이스의 새 LDAP 활성화 보안 영역 생성 및 관리 인터페이스 의 새 보안 영역을 참조합니다.

    참고

    표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

5.3. LDAP 및 RBAC

RBAC(역할 기반 액세스 제어)는 관리 사용자를 위한 권한 집합(역할)을 지정하는 메커니즘입니다. 이를 통해 사용자는 무제한 액세스 권한을 부여하지 않고도 서로 다른 관리 책임을 부여받을 수 있습니다. RBAC에 대한 자세한 내용은 JBoss EAP 보안 아키텍처 가이드의 역할 기반 액세스 제어 섹션을 참조하십시오.

RBAC는 인증이 별도로 처리되는 권한 부여에만 사용됩니다. LDAP는 인증 및 권한 부여에 사용할 수 있으므로 다음과 같은 방식으로 JBoss EAP를 구성할 수 있습니다.

  • 권한 부여에만 RBAC를 사용하고 LDAP 또는 인증에만 다른 메커니즘을 사용합니다.
  • 관리 인터페이스에서 권한을 결정하기 위해 LDAP와 결합된 RBAC를 사용합니다.

5.3.1. LDAP 및 RBAC 독립적 사용

JBoss EAP를 사용하면 보안 영역에서 인증 및 권한 부여를 독립적으로 구성할 수 있습니다. 이를 통해 LDAP를 인증 메커니즘으로 구성하고 RBAC를 권한 부여 메커니즘으로 구성할 수 있습니다. 이러한 방식으로 구성된 경우 사용자가 관리 인터페이스에 액세스하려고 하면 먼저 구성된 LDAP 서버를 사용하여 인증됩니다. 성공하면 사용자의 역할에 따라 LDAP 서버에 있는 그룹 정보와 독립적으로 RBAC만 사용하여 결정됩니다.

관리 인터페이스의 권한 부여 메커니즘으로 RBAC를 사용하는 방법에 대한 자세한 내용은 JBoss EAP의 서버 보안 구성 방법을 참조하십시오. 관리 인터페이스를 사용한 인증을 위한 LDAP 구성에 대한 자세한 내용은 이전 섹션 을 참조하십시오.

5.3.2. 인증을 위해 LDAP 및 RBAC 결합

LDAP 서버를 사용하여 인증했거나 속성 파일을 사용하는 사용자는 사용자 그룹의 멤버가 될 수 있습니다. 사용자 그룹은 하나 이상의 사용자에게 할당할 수 있는 임의 레이블입니다. 이 그룹 정보를 사용하여 사용자에게 역할을 자동으로 할당하거나 역할에서 사용자를 제외하도록 RBAC를 구성할 수 있습니다.

LDAP 디렉터리에는 속성으로 참조된 교차 사용자 계정 및 그룹 항목이 포함되어 있습니다. LDAP 서버 구성에 따라 사용자 엔터티는 memberOf 속성을 통해 사용자가 속한 그룹을 매핑할 수 있습니다. 그룹 엔터티는 uniqueMember 속성을 통해 사용자가 속한 그룹을 매핑할 수 있습니다. 또는 이 둘의 조합을 사용할 수 있습니다. 사용자가 LDAP 서버에 성공적으로 인증되면 그룹 검색을 수행하여 해당 사용자의 그룹 정보를 로드합니다. 사용 중인 디렉터리 서버에 따라 SN(일반적으로 인증에 사용되는 사용자 이름)을 사용하거나 디렉터리에서 사용자 항목의 DN을 사용하여 그룹 검색을 수행할 수 있습니다. 보안 영역에서 LDAP를 권한 부여 메커니즘으로 설정할 때 그룹검색(그룹 검색) 및 사용자 이름과 고유 이름(username-to-dn) 간 매핑이 구성됩니다.

LDAP 서버에서 사용자의 그룹 구성원 정보를 결정하면 RBAC 구성 내의 매핑을 사용하여 사용자가 보유한 역할을 결정합니다. 이 매핑은 개별 사용자와 그룹을 명시적으로 포함하거나 제외하도록 구성됩니다.

참고

서버에 연결하는 사용자의 인증 단계가 항상 먼저 수행됩니다. 사용자가 성공적으로 인증되면 서버에서 사용자 그룹을 로드합니다. 인증 단계 및 권한 부여 단계에는 각각 LDAP 서버에 대한 연결이 필요합니다. security 영역에서는 그룹 로드 단계에 대한 인증 연결을 재사용하여 이 프로세스를 최적화합니다.

5.3.2.2. username-to-dn 사용

사용자의 간단한 사용자 이름을 고유 이름으로 변환하기 위해 권한 섹션 내에 규칙을 정의할 수 있습니다. username-to-dn 요소는 사용자 이름을 LDAP 디렉토리의 해당 항목의 고유 이름에 매핑하는 방법을 지정합니다. 이 요소는 선택 사항이며 다음 중 둘 다 true인 경우에만 필요합니다.

  • 인증 및 권한 부여 단계는 다양한 LDAP 서버에 대해 수행됩니다.
  • 그룹 검색에서 고유 이름을 사용합니다.
참고

이는 보안 영역이 LDAP 인증과 Kerberos 인증을 모두 지원하며 인증 중에 검색된 DN을 수행한 경우 Kerberos에 대한 변환이 필요한 인스턴스에도 적용할 수 있습니다.

여기에는 다음 속성이 포함됩니다.

표 5.5. username-to-dn

속성설명

force

인증 중에 이름 매핑 검색을 구분하는 사용자 이름의 결과는 force 특성이 false 로 설정된 경우 권한 부여 쿼리 중에 캐시되고 재사용됩니다. force가 true 이면 그룹을 로드하는 동안 권한 부여 중에 검색이 다시 수행됩니다. 일반적으로 다른 서버가 인증 및 권한 부여를 수행할 때 수행됩니다.

사용자 이름-to-dn 은 다음 중 하나로 구성할 수 있습니다.

username-is-dn

이는 원격 사용자가 입력한 사용자 이름이 사용자의 고유 이름임을 지정합니다.

username-is-dn 예제

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-is-dn:add(force=false)

run-batch

1:1 매핑을 정의하고 추가 구성이 없습니다.

username-filter

지정된 속성은 제공된 사용자 이름과 일치하는 것으로 검색됩니다.

username-filter 예

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-filter:add(force=false, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", attribute="sn", user-dn-attribute="dn")

run-batch

속성설명

base-dn

검색을 시작할 컨텍스트의 고유 이름입니다.

재귀

검색이 하위 컨텍스트로 확장되는지 여부. 기본값은 false입니다.

attribute

제공된 사용자 이름과 일치하도록 시도하는 사용자 항목의 속성입니다. 기본값은 uid 입니다.

user-dn-attribute

사용자의 고유 이름을 얻기 위해 읽을 속성입니다. 기본값은 dn 입니다.

advanced-filter

이 옵션은 사용자 지정 필터를 사용하여 사용자의 고유 이름을 찾습니다.

advanced-filter 예

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=advanced-filter:add(force=true, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", user-dn-attribute="dn",filter="sAMAccountName={0}")

run-batch

username-filter 예제의 속성과 일치하는 속성의 경우 의미와 기본값이 동일합니다. 한 가지 추가 특성이 있습니다.

속성설명

filter

{0} 자리 표시자에서 사용자 이름을 대체할 사용자 항목을 검색하는 데 사용되는 사용자 지정 필터입니다.

중요

특수 문자(예: &)가 사용되는 경우 적절한 형식이 사용되는지 확인하기 위해 필터를 정의한 후에도 유효해야 합니다. 예를 들어 & 문자의 경우 & 입니다.

5.3.2.3. LDAP 그룹 정보를 RBAC 역할에 매핑

LDAP 서버에 대한 연결이 생성되고 검색 그룹이 올바르게 구성되면 LDAP 그룹과 RBAC 역할 간에 매핑을 생성해야 합니다. 이 매핑은 포괄적일 뿐만 아니라 배타적일 수 있으며 사용자는 그룹 멤버십에 따라 사용자에게 하나 이상의 역할을 자동으로 할당할 수 있습니다.

주의

RBAC가 아직 구성되지 않은 경우 새로 생성된 LDAP 지원 영역으로 전환하는 경우 특히 이 작업을 수행할 때 주의하십시오. 사용자와 역할이 올바르게 구성되지 않고 RBAC를 활성화하면 관리자가 JBoss EAP 관리 인터페이스에 로그인할 수 없습니다.

참고

표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

RBAC가 활성화되어 구성되었는지 확인합니다.

LDAP 및 RBAC 역할 간 매핑을 사용하려면 RBAC를 활성화하고 처음에 구성해야 합니다.

/core-service=management/access=authorization:read-attribute(name=provider)

다음 결과를 생성해야 합니다.

{ "outcome" => "success", "result" => "rbac" }

RBAC 활성화 및 구성에 대한 자세한 내용은 JBoss EAP용 서버 보안 구성 방법에서 역할 기반 액세스 제어 활성화를 참조하십시오.

기존 역할 목록 확인

read-children-names 작업을 사용하여 구성된 역할의 전체 목록을 가져옵니다.

/core-service=management/access=authorization:read-children-names(child-type=role-mapping)

다음 중 역할 목록을 생성해야 합니까.

{
  "outcome" => "success",
  "result" =>
    [ "Administrator", "Deployer", "Maintainer", "Monitor", "Operator", "SuperUser" ]
}

또한 역할에 대한 기존 매핑을 모두 확인할 수 있습니다.

/core-service=management/access=authorization/role-mapping=Administrator:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" =>
  {
    "include-all" => false,
    "exclude" => undefined,
    "include" => {
      "user-theboss" => {
        "name" => "theboss",
        "realm" => undefined,
        "type" => "USER"
      },
      "user-harold" => {
        "name" => "harold",
        "realm" => undefined,
        "type" => "USER"
      },
      "group-SysOps" => {
        "name" => "SysOps",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

Role-Mapping 항목 구성

역할에 Role-Mapping 항목이 아직 없는 경우 역할을 만들어야 합니다. 예를 들면 다음과 같습니다.

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "failed",
  "failure-description" => "WFLYCTL0216: Management resource '[ (\"core-service\" => \"management\"), (\"access\" => \"authorization\"), (\"role-mapping\" => \"Auditor\") ]' not found"
}

역할 매핑을 추가하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor:add()
{
  "outcome" => "success"
}

확인하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => undefined,
    "include" => undefined
  }
}

포함 및 제외를 위한 역할에 그룹 추가

그룹은 역할에서 포함하거나 제외하기 위해 추가할 수 있습니다.

참고

제외 매핑이 우선하거나 포함 매핑이 우선합니다.

포함되도록 그룹을 추가하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:add(name=GroupToInclude, type=GROUP)

제외를 위한 그룹을 추가하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:add(name=GroupToExclude, type=GROUP)

결과를 확인하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => {
      "group-GroupToExclude" => {
        "name" => "GroupToExclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    },
    "include" => {
      "group-GroupToInclude" => {
        "name" => "GroupToInclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

RBAC 역할 그룹에 제외 또는 포함에서 그룹 제거

포함에서 그룹을 제거하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:remove

제외에서 그룹을 제거하려면 다음을 수행합니다.

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:remove

5.4. 캐싱 활성화

Security Realms는 그룹 로드뿐만 아니라 인증에 대한 LDAP 쿼리 결과를 캐시하는 기능도 제공합니다. 이를 통해 특정 상황에서 다양한 사용자가 여러 검색에서 다양한 쿼리 결과를 재사용할 수 있습니다(예: 그룹의 그룹 구성원 정보를 반복적으로 쿼리). 각각 개별적으로 구성되고 독립적으로 작동하는 세 개의 캐시를 사용할 수 있습니다.

  • 인증
  • group-to-principal
  • username-to-dn

5.4.1. 캐시 설정

캐시는 서로 독립적이지만 모두 동일한 방식으로 구성됩니다. 각 캐시는 다음과 같은 구성 옵션을 제공합니다.

속성설명

type

이는 캐시가 준수할 제거 전략을 정의합니다. 옵션은 by-access-timeby-search-time 입니다.by-access-time 은 마지막 액세스 이후 특정 시간이 경과한 후 캐시에서 항목을 제거합니다. by-search-time 은 마지막 액세스와 관계없이 캐시에 있는 기간을 기준으로 항목을 제거합니다.

eviction-time

이는 전략에 따라 제거에 사용되는 시간(초)을 정의합니다.

cache-failures

실패한 검색의 캐싱을 활성화/비활성화하는 부울입니다. 이로 인해 동일한 실패한 검색을 통해 LDAP 서버에 반복적으로 액세스하지 못하도록 할 수 있지만 존재하지 않는 사용자에 대한 검색으로 캐시를 채울 수도 있습니다. 이 설정은 인증 캐시에 특히 중요합니다.

max-cache-size

이는 캐시의 최대 크기(항목 수)를 정의합니다. 이 캐시는 항목이 제거되기 시작할 시기를 지정합니다. 새로운 인증 및 검색에 필요한 경우 이전 항목이 캐시에서 제거되므로 max-cache-size 는 새로운 인증 시도나 검색이 발생하지 않습니다.

5.4.2. 예제

참고

이 예제에서는 LDAPRealm 이라는 보안 영역이 생성되었다고 가정합니다. 기존 LDAP 서버에 연결되며 인증 및 권한 부여를 위해 구성됩니다. 현재 구성을 표시하는 명령은 Reading the Current Cache Configuration( 현재 캐시 구성 읽기)에 자세히 설명되어 있습니다. LDAP를 사용하는 보안 영역 생성에 대한 자세한 내용은 Legacy Core Management Authentication 사용에서 확인할 수 있습니다.

기본 구성 예

"core-service" : { ​
  "management" : { ​
    "security-realm" : { ​
      "LDAPRealm" : { ​
        "authentication" : {
          "ldap" : {
            "allow-empty-passwords" : false,
            "base-dn" : "...", ​
            "connection" : "MyLdapConnection", ​
            "recursive" : false, ​
            "user-dn" : "dn", ​
            "username-attribute" : "uid", ​
            "cache" : null
          }
        },
        "authorization" : {
          "ldap" : {
            "connection" : "MyLdapConnection", ​
            "group-search" : {
              "group-to-principal" : { ​
                "base-dn" : "...", ​
                "group-dn-attribute" : "dn", ​
                "group-name" : "SIMPLE", ​
                "group-name-attribute" : "uid", ​
                "iterative" : true, ​
                "principal-attribute" : "uniqueMember", ​
                "search-by" : "DISTINGUISHED_NAME", ​
                "cache" : null ​
              }
            }, ​
            "username-to-dn" : {
              "username-filter" : { ​
                "attribute" : "uid", ​
                "base-dn" : "...", ​
                "force" : false, ​
                "recursive" : false, ​
                "user-dn-attribute" : "dn", ​
                "cache" : null ​
                }
              } ​
            }
          }, ​
        } ​
      } ​
  }
}

"cache" : null 이 표시되는 모든 영역에서 캐시를 구성할 수 있습니다.

인증
인증 중에 이 정의를 사용하여 사용자의 고유 이름을 검색하고 LDAP 서버에 연결을 시도하고 이러한 자격 증명을 사용하여 ID를 만들었는지 확인합니다.
group-search 정의
그룹 검색 정의가 있습니다. 이 경우 위의 샘플 구성에서 반복이 true 로 설정되므로 반복 검색입니다. 먼저 검색을 수행하여 사용자가 의 직접 구성원인 모든 그룹을 찾습니다. 그런 다음 각 그룹에 대해 검색하여 다른 그룹에 대한 멤버십이 있는지 확인합니다. 이 프로세스는 재생성 참조가 탐지되거나 최종 그룹이 추가 그룹의 구성원이 아닐 때까지 계속됩니다.
그룹 검색의 username-to-dn 정의
검색 그룹은 사용자의 고유 이름의 가용성에 따라 다릅니다. 이 섹션은 모든 상황에서 사용되지 않지만 사용자의 고유 이름을 검색하기 위한 두 번째 시도로 사용할 수 있습니다. 이 기능은 두 번째 인증 형식(예: 로컬 인증)이 지원되는 경우 유용하거나 필요할 수도 있습니다.

5.4.2.1. 현재 캐시 설정 읽기

참고

이 섹션에서 사용된 CLI 명령은 보안 영역 이름으로 LDAPRealm 을 사용합니다. 구성 중인 실제 영역의 이름으로 대체해야 합니다.

현재 캐시 구성을 읽는 CLI 명령

/core-service=management/security-realm=LDAPRealm:read-resource(recursive=true)

출력 결과

{ ​
  "outcome" => "success", ​
  "result" => { ​
    "map-groups-to-roles" => true, ​
    "authentication" => {
      "ldap" => { ​
        "advanced-filter" => undefined, ​
        "allow-empty-passwords" => false, ​
        "base-dn" => "dc=example,dc=com", ​
         "connection" => "ldapConnection", ​
         "recursive" => true, ​
         "user-dn" => "dn", ​
         "username-attribute" => "uid",
         "cache" => undefined ​
        }
      }, ​
      "authorization" => {
        "ldap" => { ​
          "connection" => "ldapConnection", ​
          "group-search" => {
            "principal-to-group" => { ​
              "group-attribute" => "description", ​
              "group-dn-attribute" => "dn", ​
              "group-name" => "SIMPLE", ​
              "group-name-attribute" => "cn", ​
              "iterative" => false, ​
              "prefer-original-connection" => true, ​
              "skip-missing-groups" => false, ​
              "cache" => undefined ​
            }
          }, ​
          "username-to-dn" => {
            "username-filter" => { ​
              "attribute" => "uid", ​
              "base-dn" => "ou=Users,dc=jboss,dc=org", ​
              "force" => true, ​
              "recursive" => false, ​
              "user-dn-attribute" => "dn", ​
              "cache" => undefined ​
            }
          } ​
        }
      }, ​
      "plug-in" => undefined, ​
      "server-identity" => undefined ​
    }
  ​}

5.4.2.2. 캐시 활성화

참고

이 및 후속 섹션에 사용된 관리 CLI 명령은 보안 영역의 인증 섹션에 캐시를 구성합니다. 즉, authentication=ldap/ 입니다. 권한 부여 섹션의 캐시도 명령의 경로를 업데이트하여 유사한 방식으로 구성할 수 있습니다.

캐시 활성화 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)

이 명령은 제거 시간이 300초(5분)이고 최대 캐시 크기가 100개 항목인 인증을 위해 by-access-time 캐시를 추가합니다. 또한 실패한 검색이 캐시됩니다. 또는 by-search-time 캐시를 구성할 수도 있습니다.

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-search-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)

5.4.2.3. 기존 캐시 검사

기존 캐시를 검사하기 위한 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:read-resource(include-runtime=true)

{
  "outcome" => "success",
  "result" => {
    "cache-failures" => true,
    "cache-size" => 1,
    "eviction-time" => 300,
    "max-cache-size" => 100
  }
}

include-runtime 특성은 캐시의 현재 항목 수를 표시하는 cache-size 를 추가합니다. 위 출력에서 1 입니다.

5.4.2.4. 기존 캐시 내용 테스트

기존 캐시의 콘텐츠를 테스트하기 위한 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:contains(name=TestUserOne)

{
  "outcome" => "success",
  "result" => true
}

TestUserOne 에 대한 항목이 캐시에 있음을 나타냅니다.

5.4.2.5. 캐시 플러시

캐시에서 단일 항목을 플러시하거나 전체 캐시를 플러시할 수 있습니다.

단일 항목 플러시를 위한 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache(name=TestUserOne)

전체 캐시 플러시를 위한 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache()

5.4.2.6. 캐시 제거

캐시 제거를 위한 관리 CLI 명령

/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:remove()

reload

6장. 보안 도메인에 대한 보안 매핑

보안 도메인에 보안 매핑을 추가할 때 인증 또는 권한 부여가 발생한 후 인증 및 권한 부여 정보를 결합할 수 있지만 정보가 애플리케이션에 전달되기 전에 이 정보를 결합할 수 있습니다.

보안 매핑을 기존 보안 도메인에 추가하려면 코드,유형 및 관련 모듈 옵션을 구성해야 합니다.

예제: 기존 보안 도메인에 SimpleRoles 보안 매핑을 추가하기 위한 관리 CLI 명령

/subsystem=security/security-domain=sampleapp/mapping=classic:add

/subsystem=security/security-domain=sampleapp/mapping=classic/mapping-module=SimpleRoles:add(code=SimpleRoles,type=role,module-options=[("user1"=>"specialRole")])

reload

코드 필드는 짧은 이름(예: SimpleRoles,PropertiesRoles,DatabaseRoles ) 또는 보안 매핑 모듈의 클래스 이름입니다.

type 필드는 이 모듈이 수행하는 매핑 유형을 참조하며 허용되는 값은 보안 주체,role,특성 또는 자격 증명 입니다.

추가 리소스

7장. 관리형 도메인 고려 사항의 독립 실행형 서버와 서버 비교

Microsoft Active Directory를 포함한 LDAP 서버를 사용하여 ID 관리를 설정하는 것은 독립 실행형 서버에서 또는 관리형 도메인의 서버에 사용하든 관계없이 본질적으로 동일합니다. 일반적으로 이는 보안 영역 및 보안 도메인을 모두 사용하여 대부분의 ID 저장소를 설정하는 데도 적용됩니다.

다른 구성 설정과 마찬가지로 독립 실행형 구성은 standalone.xml 파일에 상주하며 관리형 도메인의 구성은 domain.xml 및 host. xml 파일에 있습니다.

부록 A. 참고 자료

A.1. 예제 wildfly-config.xml

wildlfly-config.xml 파일은 클라이언트가 Elytron Client를 사용할 수 있는 한 가지 방법입니다. 이 파일을 사용하면 클라이언트가 JBoss EAP에 연결할 때 보안 정보를 사용할 수 있습니다.

예: custom-config.xml

<configuration>
  <authentication-client xmlns="urn:elytron:client:1.2">
    <authentication-rules>
      <rule use-configuration="monitor">
        <match-host name="127.0.0.1" />
      </rule>
      <rule use-configuration="administrator">
        <match-host name="localhost" />
      </rule>
    </authentication-rules>
    <authentication-configurations>
      <configuration name="monitor">
        <sasl-mechanism-selector selector="DIGEST-MD5" />
        <providers>
          <use-service-loader />
        </providers>
        <set-user-name name="monitor" />
        <credentials>
          <clear-password password="password1!" />
        </credentials>
        <set-mechanism-realm name="ManagementRealm" />
      </configuration>

      <configuration name="administrator">
        <sasl-mechanism-selector selector="DIGEST-MD5" />
        <providers>
          <use-service-loader />
        </providers>
        <set-user-name name="administrator" />
        <credentials>
          <clear-password password="password1!" />
        </credentials>
        <set-mechanism-realm name="ManagementRealm" />
      </configuration>
    </authentication-configurations>

    <net-authenticator/>

    <!-- This decides which SSL context configuration to use -->
    <ssl-context-rules>
      <rule use-ssl-context="mycorp-client">
        <match-host name="mycorp.com"/>
      </rule>
    </ssl-context-rules>
    <ssl-contexts>
      <default-ssl-context name="mycorp-context"/>
      <ssl-context name="mycorp-context">
        <key-store-ssl-certificate key-store-name="store1" alias="mycorp-client-certificate"/>
        <!-- This is an OpenSSL-style cipher suite selection string; this example is the expanded form of DEFAULT to illustrate the format -->
        <cipher-suite selector="ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2"/>
        <protocol names="TLSv1.2"/>
      </ssl-context>
    </ssl-contexts>
  </authentication-client>
</configuration>

추가 리소스

A.2. SSO(Single Sign-On) 속성

SSO(Single Sign-On) 인증 메커니즘 구성.

다음 표에서는 RuntimeClass 하위 시스템에서 application-security-domainsetting=single-sign-on 리소스에 대한 특성 설명을 제공합니다.

A.2.1. Single Sign-on

표 A.1. SSO( Single-Sign-On ) 속성

속성설명

client-ssl-context

백엔드 로그 아웃 연결을 보호하는 데 사용되는 SSL 컨텍스트에 대한 참조입니다.

cookie-name

쿠키 이름입니다. 기본값은 JSESSIONIDSSO 입니다.

credential-reference

개인 키 항목의 암호를 해독하는 자격 증명 참조입니다.

Credentials-reference 에는 다음과 같은 속성이 있습니다.

  • alias : 저장소에 저장된 비밀 또는 자격 증명을 나타내는 별칭입니다.
  • clear-text : 일반 텍스트를 사용하여 지정된 시크릿입니다. 서비스에 자격 증명 또는 시크릿을 제공하는 자격 증명 저장소를 확인합니다.
  • store : 자격 증명에 대한 별칭을 포함하는 자격 증명 저장소의 이름입니다.
  • type : 이 참조가 주석으로 처리되는 인증 정보 유형입니다.

domain

사용할 쿠키 도메인입니다.

http-only

쿠키의 httpOnly 속성을 설정합니다. 기본값은 false입니다.

key-alias

백엔드 로그 아웃 연결에 서명하고 확인하는 데 사용되는 개인 키 항목의 별칭입니다.

key-store

개인 키 항목이 포함된 키 저장소에 대한 참조입니다.

path

쿠키 경로입니다. 기본값은 / 입니다.

보안

쿠키의 보안 속성을 설정합니다. 기본값은 false입니다.

추가 리소스

A.3. 암호 매퍼

암호 매퍼는 다음 알고리즘 유형 중 하나를 사용하여 데이터베이스의 여러 필드에서 암호를 구성합니다.

  • 텍스트 지우기
  • 간단한 다이제스트
  • 솔팅된 간단한 다이제스트
  • bcrypt
  • SCRAM
  • 모듈 암호화

암호 매퍼에는 다음 속성이 있습니다.

참고

첫 번째 열의 인덱스는 모든 매퍼에 대해 1 입니다.

표 A.2. 암호 매퍼 특성

매퍼 이름속성암호화 방법

clear-password-mapper

  • password-index

    일반 텍스트 암호가 포함된 열의 인덱스입니다.

암호화 없음.

simple-digest

  • password-index

    암호 해시를 포함하는 열의 인덱스입니다.

  • 알고리즘

    사용된 해시 알고리즘. 다음 값이 지원됩니다.

    • simple-digest-md2
    • simple-digest-md5
    • simple-digest-sha-1
    • simple-digest-sha-256
    • simple-digest-sha-384
    • simple-digest-sha-512
  • hash-encoding

    표현 해시를 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수

간단한 해싱 메커니즘이 사용됩니다.

salted-simple-digest

  • password-index

    암호 해시를 포함하는 열의 인덱스입니다.

  • 알고리즘

    사용된 해시 알고리즘. 다음 값이 지원됩니다.

    • password-salt-digest-md5
    • password-salt-digest-sha-1
    • password-salt-digest-sha-256
    • password-salt-digest-sha-384
    • password-salt-digest-sha-512
    • salt-password-digest-md5
    • salt-password-digest-sha-1
    • salt-password-digest-sha-256
    • salt-password-digest-sha-384
    • salt-password-digest-sha-512
  • salt-index

    해시에 사용된 salt를 포함하는 열의 인덱스입니다.

  • hash-encoding

    해시 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수
  • salt-encoding

    salt의 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수

간단한 해싱 메커니즘은 솔트와 함께 사용됩니다.

bcrypt-password-mapper

  • password-index

    암호 해시를 포함하는 열의 인덱스입니다.

  • salt-index

    해시에 사용된 salt를 포함하는 열의 인덱스입니다.

  • iteration-count-index

    사용된 반복 횟수를 포함하는 열의 인덱스입니다.

  • hash-encoding

    해시 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수
  • salt-encoding

    salt의 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수

해시에 사용되는 firefish 알고리즘.

scram-mapper

  • password-index

    암호 해시를 포함하는 열의 인덱스입니다.

  • 알고리즘

    사용된 해시 알고리즘. 다음 값이 지원됩니다.

    • scram-sha-1
    • scram-sha-256
    • scram-sha-384
    • scram-sha-512
  • salt-index

    salt를 포함하는 열의 인덱스는 해시에 사용됩니다.

  • iteration-count-index

    사용된 반복 횟수를 포함하는 열의 인덱스입니다.

  • hash-encoding

    해시 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수
  • salt-encoding

    salt의 표현을 지정합니다. 허용되는 값:

    • base64 (기본값)
    • 16진수

해시 작업에 솔트된 챌린지 대응 인증 메커니즘이 사용됩니다.

modular-crypt-mapper

  • password-index

    암호화된 암호를 포함하는 열의 인덱스입니다.

모듈식 암호화 인코딩을 사용하면 암호 유형, 해시 또는 다이제스트, salt 및 반복 개수와 같은 단일 문자열로 여러 정보를 인코딩할 수 있습니다.





2024-02-10에 최종 업데이트된 문서

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.