5.4. 인증 및 권한 부여에 LDAP 사용
LDAP 로그인 모듈은 X.500 디렉터리 서버에 저장된 사용자 데이터에 대해 들어오는 자격 증명을 확인하여 인증 및 권한을 활성화합니다. 이는 org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule
에 의해 구현됩니다.
5.4.1. 클라이언트 인증을 위해 LDAP 구성
다음 예제 절차에서는 LDAP를 사용하여 클라이언트를 인증하는 방법을 보여줍니다.
절차
-
<
broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 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>
이전 구성은 모든 큐에 대한 특정 권한을
사용자
역할의 구성원에게 할당합니다.-
<
broker_instance_dir> /etc/login.config
파일을 엽니다. 사용 중인 디렉터리 서비스를 기반으로 LDAP 로그인 모듈을 설정합니다.
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"
.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 tojavax.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
roleName
- 역할/그룹의 이름(예: C, O, OU 등)이 포함된 역할 항목의 특성 유형입니다. 이 옵션을 생략하면 역할 검색 기능이 효과적으로 비활성화됩니다.
roleSearchMatching
-
역할Base
에서 선택한 하위 트리에 적용되는 LDAP 검색 필터를 지정합니다. 자세한 내용은 5.4.1.1절. “검색 일치 매개변수” 섹션을 참조하십시오. roleSearchSubtree
roleBase
에서 지정한 노드와 관련하여 역할 항목에 대한 검색 깊이를 지정합니다.false
로 설정하면 검색이roleBase
노드의 하위 항목 중 하나와 일치하려고 합니다(Javax.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.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)
입니다.
추가 리소스
- 검색 필터 구문에 대한 간략한 소개는 Oracle JNDI 튜토리얼 을 참조하십시오.