5.4. 인증 및 권한 부여에 LDAP 사용


LDAP 로그인 모듈은 중앙 X.500 디렉터리 서버에 저장된 사용자 데이터에 대해 들어오는 자격 증명을 확인하여 인증 및 권한 부여를 활성화합니다. 이는 org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule 에 의해 구현됩니다.

5.4.1. 클라이언트 인증을 위한 LDAP 구성

다음 예제 절차에서는 LDAP를 사용하여 클라이언트를 인증하는 방법을 보여줍니다.

절차

  1. &lt ;broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. security-settings 요소 내에서 security-setting 요소를 추가하여 권한을 구성합니다. 예를 들면 다음과 같습니다.

    <security-settings>
        <security-setting match="#">
            <permission type="createDurableQueue" roles="user"/>
            <permission type="deleteDurableQueue" roles="user"/>
            <permission type="createNonDurableQueue" roles="user"/>
            <permission type="deleteNonDurableQueue" roles="user"/>
            <permission type="send" roles="user"/>
            <permission type="consume" roles="user"/>
        </security-setting>
    </security-settings>

    이전 구성은 모든 큐에 대한 특정 권한을 사용자 역할의 멤버에게 할당합니다.

  3. < broker-instance-dir>/etc/login.config 파일을 엽니다.
  4. 사용 중인 디렉터리 서비스에 따라 LDAP 로그인 모듈을 구성합니다.

    1. Microsoft Active Directory 디렉터리 서비스를 사용하는 경우 다음 예와 유사한 구성을 추가합니다.

      activemq {
        org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule required
           debug=true
           initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
           connectionURL="LDAP://localhost:389"
           connectionUsername="CN=Administrator,CN=Users,OU=System,DC=example,DC=com"
           connectionPassword=redhat.123
           connectionProtocol=s
           connectionTimeout=5000
           authentication=simple
           userBase="dc=example,dc=com"
           userSearchMatching="(CN={0})"
           userSearchSubtree=true
           readTimeout=5000
           roleBase="dc=example,dc=com"
           roleName=cn
           roleSearchMatching="(member={0})"
           roleSearchSubtree=true
           ;
      };
      참고

      Microsoft Active Directory를 사용하고 있고 connectionUsername 의 속성에 대해 지정해야 하는 값에 공백(예: OU=System Accounts)을 포함하는 경우, 한 쌍의 따옴표("")로 값을 묶고 백슬래시(\)를 사용하여 쌍의 이중 인용을 이스케이프해야 합니다. 예를 들어 connectionUsername="CN=Administrator,CN=Users,OU=\"System Accounts\",DC=example,DC=com" 입니다.

    2. ApacheDS 디렉터리 서비스를 사용하는 경우 다음 예와 유사한 구성을 추가합니다.

      activemq {
        org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule required
           debug=true
           initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
           connectionURL="ldap://localhost:10389"
           connectionUsername="uid=admin,ou=system"
           connectionPassword=secret
           connectionProtocol=s
           connectionTimeout=5000
           authentication=simple
           userBase="dc=example,dc=com"
           userSearchMatching="(uid={0})"
           userSearchSubtree=true
           userRoleName=
           readTimeout=5000
           roleBase="dc=example,dc=com"
           roleName=cn
           roleSearchMatching="(member={0})"
           roleSearchSubtree=true
           ;
      };
      debug
      디버깅을 끄십시오 (true) off (false). 기본값은 false입니다.
      initialContextFactory
      Must always be set to com.sun.jndi.ldap.LdapCtxFactory
      connectionURL
      LDAP URL을 사용하는 디렉터리 서버의 위치, __<ldap://Host:Port>. 디렉터리 트리에 슬래시( / )를 추가한 다음 디렉터리 트리에 특정 노드의 DN을 추가하여 선택적으로 이 URL의 자격을 부여할 수 있습니다. Apache DS의 기본 포트는 Microsoft AD의 경우 10389 이며 기본값은 389 입니다.
      connectionUsername
      디렉터리 서버에 대한 연결을 여는 사용자의 고유 이름(DN)입니다. 예: uid=admin,ou=system. 일반적으로 디렉터리 서버는 연결을 열기 위해 클라이언트가 사용자 이름/암호 자격 증명을 제공해야 합니다.
      connectionPassword
      connectionUsername 의 DN과 일치하는 암호입니다. 디렉터리 서버의 DIT( Directory Information Tree )에서 암호는 일반적으로 해당 디렉터리 항목에 userPassword 속성으로 저장됩니다.
      connectionProtocol
      모든 값은 지원되지만 효과적으로 사용되지 않습니다. 이 옵션은 기본값이 없기 때문에 명시적으로 설정해야 합니다.
      connectionTimeout

      브로커가 디렉터리 서버에 연결하는 데 사용할 수 있는 최대 시간(밀리초)을 지정합니다. 브로커가 이 시간 내에 디렉터리 서버에 연결할 수 없는 경우 연결 시도를 중단합니다. 이 속성에 대해 0 이하의 값을 지정하면 기본 TCP 프로토콜의 시간 초과 값이 대신 사용됩니다. 값을 지정하지 않으면 브로커는 연결을 설정하기 위해 무기한 대기하거나 기본 네트워크 시간이 초과됩니다.

      연결에 대한 연결 풀링이 요청되면 이 속성은 최대 풀 크기에 이미 도달하고 풀의 모든 연결이 사용 중인 경우 브로커가 연결을 대기하는 최대 시간을 지정합니다. 값을 0 이하로 지정하면 브로커가 연결을 사용할 수 있을 때까지 무기한 대기합니다. 그렇지 않으면 최대 대기 시간에 도달하면 브로커가 연결 시도를 중단합니다.

      인증
      LDAP 서버에 바인딩할 때 사용되는 인증 방법을 지정합니다. 이 매개변수는 단순 (사용자 이름 및 암호 필요) 또는 없음 (비명 액세스 허용)으로 설정할 수 있습니다.
      userBase
      사용자 항목을 검색하려면 DIT의 특정 하위 트리를 선택합니다. 하위 트리는 하위 트리의 기본 노드를 지정하는 DN에 의해 지정됩니다. 예를 들어 이 옵션을 ou=User,ou=ActiveMQ,ou=system 로 설정하면 사용자 항목을 검색하면 ou=User,ou=ActiveMQ,ou=system 노드 아래에 있는 하위 트리로 제한됩니다.
      userSearchMatching
      userBase 에서 선택한 하위 트리에 적용되는 LDAP 검색 필터를 지정합니다. 자세한 내용은 아래 5.4.1.1절. “일치하는 매개변수 검색” 섹션을 참조하십시오.
      userSearchSubtree
      userBase 에 지정된 노드를 기준으로 사용자 항목에 대한 검색 깊이를 지정합니다. 이 옵션은 부울입니다. false 값을 지정하면 검색이 userBase 노드의 하위 항목 중 하나(Java x.naming.directory.SearchControls.ONELEVEL_SCOPE에 매핑) 중 하나와 일치하려고 한다는 의미입니다. true 값을 지정하면 검색이 userBase 노드의 하위 트리에 속하는 모든 항목을 찾습니다(Java x.naming.directory.SearchControls.SUBTREE_SCOPE).
      userRoleName
      사용자의 역할 이름 목록이 포함된 사용자 항목의 속성 이름입니다. 역할 이름은 브로커의 권한 부여 플러그인에서 그룹 이름으로 해석됩니다. 이 옵션을 생략하면 사용자 항목에서 역할 이름을 추출하지 않습니다.
      readTimeout
      브로커가 디렉터리 서버에서 LDAP 요청으로 응답을 수신하기 위해 대기할 수 있는 최대 시간(밀리초)을 지정합니다. 브로커가 현재 디렉터리 서버에서 응답을 받지 못하면 브로커가 요청을 중단합니다. 값을 0 이하로 지정하거나 값을 지정하지 않으면 브로커는 디렉터리 서버에서 LDAP 요청으로의 응답을 무기한 대기합니다.
      roleBase
      역할 데이터가 디렉터리 서버에 직접 저장되는 경우 역할 옵션(roleBase,roleSearchMatching,roleSearchSubtreeroleName)의 조합으로 userRoleName 옵션을 지정하는 대안 (또는 그 외에)을 사용할 수 있습니다. 이 옵션은 역할/그룹 항목을 검색할 DIT의 특정 하위 트리를 선택합니다. 하위 트리는 하위 트리의 기본 노드를 지정하는 DN에 의해 지정됩니다. 예를 들어 이 옵션을 ou=Group,ou=ActiveMQ,ou=system 로 설정하면 role/group 항목이 ou=Group,ou=ActiveMQ,ou=system 노드 아래에 있는 하위 트리로 제한됩니다.
      roleName
      role/group(예: C, O, OU 등)의 이름을 포함하는 역할 항목의 속성 유형입니다. 이 옵션을 생략하면 역할 검색 기능이 효과적으로 비활성화됩니다.
      roleSearchMatching
      roleBase 에서 선택한 하위 트리에 적용되는 LDAP 검색 필터를 지정합니다. 자세한 내용은 아래 5.4.1.1절. “일치하는 매개변수 검색” 섹션을 참조하십시오.
      roleSearchSubtree

      roleBase 에서 지정한 노드를 기준으로 역할 항목을 검색 깊이를 지정합니다. false (기본값)로 설정하면 검색이 roleBase 노드의 하위 항목 중 하나(Java x.naming.directory.SearchControls.ONELEVEL_SCOPE에 매핑) 중 하나와 일치하려고 합니다. true 인 경우 roleBase 노드의 하위 트리에 속하는 모든 항목을 찾습니다( javax.naming.directory.SearchControls.SUBTREE_SCOPE).

      참고

      Apache DS는 DN 경로의 OID 부분을 사용합니다. Microsoft Active Directory는 CN 부분을 사용합니다. 예를 들어 Apache DS에서는 oid=ECDHE,dc=example,dc=com 과 같은 DN 경로를 사용할 수 있지만 Microsoft Active Directory에서 cn=ECDHE,dc=example,dc=com 과 같은 DN 경로를 사용할 수 있습니다.

  5. 브로커를 시작하거나 다시 시작합니다(서비스 또는 프로세스).

5.4.1.1. 일치하는 매개변수 검색

userSearchMatching

LDAP 검색 작업에 전달하기 전에 이 구성 매개변수에 제공된 문자열 값에는 java.text.MessageFormat 클래스에서 구현한 대로 문자열 대체가 적용됩니다.

즉, 특수 문자열 {0},은 들어오는 클라이언트 자격 증명에서 추출된 대로 사용자 이름으로 대체됩니다. 대체 후에는 문자열이 LDAP 검색 필터로 해석됩니다( syntax는 IETF 표준 RFC 2254에 의해 정의됨).

예를 들어 이 옵션이 (uid={0}) 로 설정되고 수신된 사용자 이름이 jdoe 인 경우 문자열 대체 후 검색 필터는 (uid=jdoe) 가 됩니다.

생성된 검색 필터가 사용자 base, ou=User,ou=ActiveMQ,ou=system 에서 선택한 하위 트리에 적용되는 경우 uid=jdoe,ou=User,ou=ActiveMQ,ou=system 와 일치합니다.

roleSearchMatching

이는 두 개의 대체 문자열을 지원하는 경우를 제외하고 userSearchMatching 옵션과 유사한 방식으로 작동합니다.

대체 문자열 {0} 은 일치하는 사용자 항목의 전체 DN을 대체합니다(즉, 사용자 검색 결과). 예를 들어 사용자 jdoe 의 경우 대체 문자열은 uid=jdoe,ou=User,ou=ActiveMQ,ou=system 일 수 있습니다.

대체 문자열( {1} )은 수신된 사용자 이름을 대체합니다. 예를 들면 jdoe 입니다.

이 옵션이 (member=uid={1}) 로 설정되고 수신된 사용자 이름이 jdoe 인 경우 문자열 대체(ApacheDS 검색 필터 구문 가정) 이후 검색 필터는 (member=uid=jdoe) 가 됩니다.

결과 검색 필터가 역할 base, ou=Group,ou=ActiveMQ,ou=system 에서 선택한 하위 트리에 적용되는 경우 uid=jdoe (구성 멤버 특성의 값이 DN임)와 같은 멤버 특성이 있는 모든 역할 항목과 일치합니다.

역할 검색에 기본값이 없으므로 이 옵션을 항상 설정해야 합니다. OpenLDAP를 사용하는 경우 검색 필터의 구문은 (member:=uid=jdoe) 입니다.

추가 리소스

5.4.2. LDAP 권한 부여 구성

LegacyLDAPSecuritySettingPlugin 보안 설정 플러그인은 이전에 AMQ 6에서 LDAPAuthorizationMapcachedLDAPAuthorizationMap 으로 이전에 처리한 보안 정보를 읽고 이 정보를 가능한 경우 AMQ 7 보안 설정으로 변환합니다.

AMQ 6 및 AMQ 7의 브로커에 대한 보안 구현이 정확히 일치하지 않습니다. 따라서 플러그인은 두 버전 간 일부 변환을 수행하여 거의 동등한 기능을 달성합니다.

다음 예제에서는 플러그인을 구성하는 방법을 보여줍니다.

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. security-settings 요소 내에서 security-setting-plugin 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <security-settings>
        <security-setting-plugin class-name="org.apache.activemq.artemis.core.server.impl.LegacyLDAPSecuritySettingPlugin">
            <setting name="initialContextFactory" value="com.sun.jndi.ldap.LdapCtxFactory"/>
            <setting name="connectionURL" value="ldap://localhost:1024"/>`ou=destinations,o=ActiveMQ,ou=system`
            <setting name="connectionUsername" value="uid=admin,ou=system"/>
            <setting name="connectionPassword" value="secret"/>
            <setting name="connectionProtocol" value="s"/>
            <setting name="authentication" value="simple"/>
        </security-setting-plugin>
    </security-settings>
    class-name
    구현은 org.apache.activemq.artemis.core.server.impl.LegacyLDAPSecuritySettingPlugin 입니다.
    initialContextFactory
    LDAP에 연결하는 데 사용되는 초기 컨텍스트 팩토리입니다. 항상 com.sun.jndi.ldap.LdapCtxFactory (즉, 기본값)로 설정해야 합니다.
    connectionURL
    LDAP URL <ldap://Host:Port>을 사용하여 디렉터리 서버의 위치를 지정합니다. 디렉터리 트리에 특정 노드의 고유 이름(DN) 뒤에 슬래시( / )를 추가하여 선택적으로 이 URL의 자격을 부여할 수 있습니다. 예: ldap://ldapserver:10389/ou=system. 기본값은 ldap://localhost:1024 입니다.
    connectionUsername
    디렉터리 서버에 대한 연결을 여는 사용자의 DN입니다. 예: uid=admin,ou=system. 일반적으로 디렉터리 서버는 연결을 열기 위해 클라이언트가 사용자 이름/암호 자격 증명을 제공해야 합니다.
    connectionPassword
    connectionUsername 의 DN과 일치하는 암호입니다. 디렉터리 서버의 DIT( Directory Information Tree )에서 암호는 일반적으로 해당 디렉터리 항목에 userPassword 속성으로 저장됩니다.
    connectionProtocol
    현재 사용되지 않습니다. 나중에 이 옵션을 사용하면 디렉터리 서버에 연결할 SSL(Secure Socket Layer)을 선택할 수 있습니다. 이 옵션은 기본값이 없기 때문에 명시적으로 설정해야 합니다.
    인증

    LDAP 서버에 바인딩할 때 사용되는 인증 방법을 지정합니다. 이 매개변수의 유효한 값은 단순 (사용자 이름 및 암호) 또는 none (익명)입니다. 기본값은 simple 입니다.

    참고

    SASL(Simple Authentication and Security Layer) 인증은 지원되지 않습니다.

이전 구성 예에 표시되지 않는 다른 설정은 다음과 같습니다.

destinationBase
자식이 모든 대상에 대한 권한을 제공하는 노드의 DN을 지정합니다. 이 경우 DN은 리터럴 값(즉, 속성 값에서 문자열 대체가 수행되지 않음)입니다. 예를 들어 이 속성의 일반적인 값은 ou=destinations,o=ActiveMQ,ou=system 이며 기본값은 ou=destinations,o=ActiveMQ,ou=system 입니다.
filter
모든 종류의 대상에 대한 권한을 찾을 때 사용되는 LDAP 검색 필터를 지정합니다. 검색 필터는 큐 또는 주제 노드의 하위 또는 하위 항목 중 하나를 일치시킵니다. 기본값은 (cn=*) 입니다.
roleAttribute
역할의 DN 값인 filter 로 일치하는 노드의 속성을 지정합니다. 기본값은 uniqueMember 입니다.
adminPermissionValue
관리자 권한과 일치하는 값을 지정합니다. 기본값은 admin 입니다.
readPermissionValue
읽기 권한과 일치하는 값을 지정합니다. 기본값은 read 입니다.
writePermissionValue
쓰기 권한과 일치하는 값을 지정합니다. 기본값은 write 입니다.
enableListener
LDAP 서버에서 자동으로 업데이트를 수신하고 브로커의 권한 부여 구성을 실시간으로 업데이트하는 리스너를 활성화할지 여부를 지정합니다. 기본값은 true입니다.
mapAdminToManage

레거시(즉, AMQ 6) 관리자 권한을 AMQ 7 관리 권한에 매핑할지 여부를 지정합니다. 아래 표의 매핑 의미에 대한 세부 정보를 참조하십시오. 기본값은 false입니다.

LDAP에 정의된 대기열 또는 주제의 이름은 보안 설정의 "match" 역할을 하며, 권한 값은 AMQ 6 유형에서 AMQ 7 유형으로 매핑되며, 역할은 그대로 매핑됩니다. LDAP에 정의된 대기열 또는 주제 이름은 보안 설정에 대한 일치 항목으로 사용되므로 보안 설정이 JMS 대상에 예상대로 적용되지 않을 수 있습니다. AMQ 7은 필요에 따라 항상 "jms.queue" 또는 "jms.topic"로 JMS 대상 앞에 있기 때문입니다.

AMQ 6에는 읽기,쓰기관리자 의 세 가지 권한 유형이 있습니다. 이러한 권한 유형은 ActiveMQ 웹 사이트; 보안에 설명되어 있습니다.

AMQ 7에는 다음과 같은 권한 유형이 있습니다.

  • createAddress
  • deleteAddress
  • createDurableQueue
  • deleteDurableQueue
  • createNonDurableQueue
  • deleteNonDurableQueue
  • send
  • consume
  • 관리
  • 찾아보기

    이 표는 보안 설정 플러그인에서 AMQ 6 권한 유형을 AMQ 7 권한 유형으로 매핑하는 방법을 보여줍니다.

    Expand
    AMQ 6 권한 유형AMQ 7 권한 유형

    read

    사용, 찾아보기

    write

    send

    admin

    createAddress, deleteAddress, createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue, manage ( mapAdminToManagetrue로 설정된 경우)

    아래 설명과 같이 플러그인에서 동등성을 달성하기 위해 AMQ 6 및 AMQ 7 권한 유형 간에 일부 변환을 수행하는 몇 가지 사례가 있습니다.

    • AMQ 6에는 유사한 권한 유형이 없기 때문에 기본적으로 매핑에 AMQ 7 관리 권한 유형이 포함되지 않습니다. 그러나 mapAdminToManagetrue 로 설정된 경우 플러그인은 AMQ 6 admin 권한을 AMQ 7 관리 권한에 매핑합니다.
    • AMQ 6의 admin 권한 유형은 대상이 존재하지 않고 사용자가 메시지를 보내는 경우 브로커가 자동으로 대상을 생성하는지 여부를 결정합니다. AMQ 7을 사용하면 사용자가 대상에 메시지를 보낼 수 있는 권한이 있는 경우 자동으로 대상을 자동으로 생성할 수 있습니다. 따라서 플러그인은 레거시 관리자 권한을 위에 표시된 AMQ 7 권한에 매핑합니다. mapAdminToManagetrue 로 설정된 경우 플러그인은 AMQ 6 admin 권한을 AMQ 7 관리 권한에 매핑합니다.

5.4.3. login.config 파일에서 암호 암호화

조직에서는 LDAP를 사용하여 데이터를 안전하게 저장하므로 login.config 파일에는 브로커가 조직의 LDAP 서버와 통신하는 데 필요한 구성이 포함될 수 있습니다. 이 설정 파일에는 일반적으로 LDAP 서버에 로그인할 수 있는 암호가 포함되어 있으므로 이 암호를 암호화해야 합니다.

사전 요구 사항

절차

다음 절차에서는 < broker_instance_dir> /etc/login.config 파일에 있는 connectionPassword 매개 변수 값을 마스킹하는 방법을 보여줍니다.

  1. 명령 프롬프트에서 mask 유틸리티를 사용하여 암호를 암호화합니다.

    $ <broker_instance_dir>/bin/artemis mask <password>
    result: 3a34fd21b82bf2a822fa49a8d8fa115d
  2. < broker_instance_dir>/etc/login.config 파일을 엽니다. connectionPassword 매개변수를 찾습니다.

    connectionPassword = <password>
  3. 일반 텍스트 암호를 암호화된 값으로 바꿉니다.

    connectionPassword = 3a34fd21b82bf2a822fa49a8d8fa115d
  4. 암호화된 값을 "ENC()" 식별자로 래핑합니다.

    connectionPassword = "ENC(3a34fd21b82bf2a822fa49a8d8fa115d)"

login.config 파일에 마스크된 암호가 포함되어 있습니다. 암호가 "ENC()" 식별자로 래핑되므로 AMQ Broker는 사용하기 전에 암호를 해독합니다.

추가 리소스

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동