검색

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

download PDF

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

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

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

절차

  1. < 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 )에 공백(예: 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
      항상 com.sun.jndi.ldap.LdapCtxFactory로 설정해야 합니다.
      connectionURL
      LDAP URL을 사용하는 디렉터리 서버의 위치, __<ldap://Host:Port>. 슬래시 / 다음에 디렉터리 트리에 특정 노드의 DN을 추가하여 선택적으로 이 URL의 자격을 부여할 수 있습니다. Apache DS의 기본 포트는 10389 이며 Microsoft AD의 경우 기본값은 389 입니다.
      connectionUsername
      디렉터리 서버에 대한 연결을 여는 사용자의 고유 이름(DN)입니다. 예를 들면 uid=admin,ou=system 입니다. 디렉터리 서버는 일반적으로 클라이언트가 연결을 열기 위해 사용자 이름/암호 자격 증명을 제공해야 합니다.
      connectionPassword
      connectionUsername 에서 DN과 일치하는 암호입니다. 디렉터리 서버의 DIT( Directory Information Tree )에서 암호는 일반적으로 해당 디렉터리 항목에 userPassword 속성으로 저장됩니다.
      connectionProtocol
      모든 값이 지원되지만 효과적으로 사용되지 않습니다. 이 옵션은 기본값이 없으므로 명시적으로 설정해야 합니다.
      connectionTimeout

      브로커가 디렉터리 서버에 연결하는 데 사용할 수 있는 최대 시간(밀리초)을 지정합니다. 브로커가 이 시간 내에 디렉터리에 연결할 수 없는 경우 연결 시도가 중단됩니다. 이 속성에 대해 값을 0 이하로 지정하면 기본 TCP 프로토콜의 시간 초과 값이 대신 사용됩니다.If you specify a value of zero or less for this property, the timeout value of the underlying TCP protocol is used instead. 값을 지정하지 않으면 브로커가 무기한 대기하여 연결을 설정하거나 기본 네트워크 시간이 초과됩니다.

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

      인증
      LDAP 서버에 바인딩할 때 사용되는 인증 방법을 지정합니다. 이 매개변수는 단순 (사용자 이름과 암호가 필요한) 또는 none ( anonymous 액세스를 허용하는)으로 설정할 수 있습니다.
      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 노드의 하위 항목 중 하나와 일치하게 됩니다(maps to javax.naming.directory.SearchControls.ONELEVEL_SCOPE). 값이 true 이면 검색에서 userBase 노드의 하위 트리에 속하는 모든 항목( javax.naming.directory.SearchControls.SUBTREE_SCOPE)과 일치함을 의미합니다.
      userRoleName
      사용자의 역할 이름 목록이 포함된 사용자 항목의 속성 이름입니다. 역할 이름은 브로커의 권한 부여 플러그인에 의해 그룹 이름으로 해석됩니다. 이 옵션을 생략하면 사용자 항목에서 역할 이름을 추출하지 않습니다.
      readTimeout
      브로커가 디렉터리 서버에서 LDAP 요청에 대한 응답을 수신 대기할 수 있는 최대 시간(밀리초)을 지정합니다. 브로커가 현재 디렉터리 서버에서 응답을 받지 못하면 브로커가 요청을 중단합니다. 값을 0 이하로 지정하거나 값을 지정하지 않으면 브로커는 디렉터리 서버에서 LDAP 요청으로의 응답을 무기한 대기합니다.
      roleBase
      역할 데이터가 디렉터리 서버에 직접 저장되는 경우 userRoleName 옵션을 지정하는 대신 역할 옵션(roleBase,roleSearchMatching,roleSearchSubtree, roleName)의 조합을 사용할 수 있습니다. 이 옵션은 역할/그룹 항목을 검색하기 위해 DIT의 특정 하위 트리를 선택합니다. 하위 트리는 DN에 의해 지정되며 하위 트리의 기본 노드를 지정합니다. 예를 들어 이 옵션을 ou=Group,ou=ActiveMQ,ou=system 로 설정하면 role/group 항목 검색이 ou=Group,ou=system 노드 아래의 하위 트리로 제한됩니다.
      roleName
      역할/그룹의 이름(예: C, O, OU 등)이 포함된 역할 항목의 특성 유형입니다. 이 옵션을 생략하면 역할 검색 기능이 효과적으로 비활성화됩니다.
      roleSearchMatching
      역할Base 에서 선택한 하위 트리에 적용되는 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=testuser,dc=example,dc=com 과 같은 DN 경로를 사용할 수 있지만 Microsoft Active Directory의 cn=testuser,dc=example,dc=com 과 같은 DN 경로를 사용할 수 있습니다.

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

5.4.1.1. 검색 일치 매개변수

userSearchMatching

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

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

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

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

roleSearchMatching

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

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

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

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

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

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

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.