5.3. 클라이언트 승인
5.3.1. 클라이언트 권한 부여 방법
주소 및 큐 생성 및 삭제, 메시지 전송 및 소비와 같은 브로커에서 작업을 수행하도록 클라이언트에 권한을 부여하려면 다음 방법을 사용할 수 있습니다.
- 사용자 및 역할 기반 권한 부여
- 인증된 사용자 및 역할에 대해 브로커 보안 설정을 구성합니다.
- 클라이언트 권한을 부여하도록 LDAP 구성
- 인증 및 권한 부여를 모두 처리하도록 LDAP( Lightweight Directory Access Protocol ) 로그인 모듈을 구성합니다. LDAP 로그인 모듈은 중앙 X.500 디렉터리 서버에 저장된 사용자 데이터에 대해 들어오는 인증 정보를 확인하고 사용자 역할을 기반으로 권한을 설정합니다.
- 클라이언트 권한을 부여하도록 Kerberos 구성
-
Kerberos 인증 및 권한 부여 서비스 (JAAS)
Krb5LoginModule
로그인 모듈을 구성하여 인증 정보를 AMQ Broker 역할에 매핑하는PropertiesLoginModule
또는LDAPLoginModule
로그인 모듈에 전달합니다.
5.3.2. 사용자 및 역할 기반 권한 부여 구성
5.3.2.1. 권한 설정
권한은 broker.xml
구성 파일의 < security-setting
> 요소를 통해 큐(주소 기반)에 대해 정의됩니다. 구성 파일의 < security-
settings> 요소에서 < security-settings
>의 여러 인스턴스를 정의할 수 있습니다. 정확한 주소 일치를 지정하거나 숫자 기호(#
) 및 별표(*
) 와일드카드 문자를 사용하여 일치하는 와일드카드를 정의할 수 있습니다.
주소와 일치하는 대기열 세트에 다른 권한을 부여할 수 있습니다. 이러한 권한은 다음 표에 표시되어 있습니다.
사용자가…할 수 있도록 허용 | 이 매개변수 사용… |
---|---|
주소 생성 |
|
주소 삭제 |
|
일치하는 주소 아래에 Cryostat 큐 생성 |
|
일치하는 주소 아래의 Cryostat 큐 삭제 |
|
일치하는 주소에 정렬할 수 없는 큐를 생성 |
|
일치하는 주소에서 확인할 수 없는 큐 삭제 |
|
일치하는 주소로 메시지 보내기 |
|
일치하는 주소에 바인딩된 큐의 메시지 사용 |
|
관리 주소로 관리 메시지를 전송하여 관리 작업 호출 |
|
일치하는 주소에 바인딩된 큐 검색 |
|
관리 작업의 하위 집합에 대한 읽기 전용 액세스 권한 |
|
|
|
각 권한에 대해 권한이 부여된 역할 목록을 지정합니다. 지정된 사용자에게 역할 중 하나가 있는 경우 해당 주소 집합에 대한 권한이 부여됩니다.
다음 섹션에서는 권한에 대한 몇 가지 구성 예제를 보여줍니다.
5.3.2.1.1. 단일 주소에 대한 메시지 프로덕션 구성
다음 절차에서는 단일 주소에 대한 메시지 프로덕션 권한을 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
security-
요소를 추가합니다.settings> 요소에 단일 <security-setting
>일치
키의 경우 주소를 지정합니다. 예를 들면 다음과 같습니다.<security-settings> <security-setting match="my.destination"> <permission type="send" roles="producer"/> </security-setting> </security-settings>
이전 구성을 기반으로
생산자
역할의 멤버는my.destination
주소에 대한전송
권한이 있습니다.
5.3.2.1.2. 단일 주소에 대한 메시지 사용 구성
다음 절차에서는 단일 주소에 대한 메시지 사용 권한을 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
security-
요소를 추가합니다.settings> 요소에 단일 <security-setting
>일치
키의 경우 주소를 지정합니다. 예를 들면 다음과 같습니다.<security-settings> <security-setting match="my.destination"> <permission type="consume" roles="consumer"/> </security-setting> </security-settings>
이전 구성을 기반으로
소비자
역할의 멤버는my.destination
주소에 대한 사용 권한을 갖습니다.
5.3.2.1.3. 모든 주소에 대한 전체 액세스 구성
다음 절차에서는 모든 주소 및 연결된 큐에 대한 전체 액세스를 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
security-
요소를 추가합니다.settings> 요소에 단일 <security-setting
>일치
키의 경우 모든 주소에 대한 액세스를 구성하려면 숫자 기호(#
) 와일드카드 문자를 지정합니다. 예를 들면 다음과 같습니다.<security-settings> <security-setting match="#"> <permission type="createDurableQueue" roles="guest"/> <permission type="deleteDurableQueue" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> <permission type="createAddress" roles="guest"/> <permission type="deleteAddress" roles="guest"/> <permission type="send" roles="guest"/> <permission type="browse" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="manage" roles="guest"/> </security-setting> </security-settings>
이전 구성을 기반으로 모든 큐에 대한 guest 역할의 멤버에게 모든 권한이 부여됩니다. 이 기능은 모든 사용자에게
게스트
역할을 할당하도록 익명 인증이 구성된 개발 시나리오에서 유용할 수 있습니다.
추가 리소스
- 더 복잡한 사용 사례 구성에 대한 자세한 내용은 5.3.2.1.4절. “여러 보안 설정 구성” 을 참조하십시오.
5.3.2.1.4. 여러 보안 설정 구성
다음 예제 절차에서는 일치하는 주소 집합에 대해 여러 보안 설정을 개별적으로 구성하는 방법을 보여줍니다. 이는 모든 주소에 대한 전체 액세스 권한을 부여하는 방법을 보여주는 이 섹션의 이전 예제와 대조됩니다.
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
security-
요소를 추가합니다.settings> 요소에 단일 <security-setting
>일치
키의 경우 일치하는 주소 집합에 설정을 적용하려면 숫자 기호(#
) 와일드카드 문자를 포함합니다. 예를 들면 다음과 같습니다.<security-setting match="globalqueues.europe.#"> <permission type="createDurableQueue" roles="admin"/> <permission type="deleteDurableQueue" roles="admin"/> <permission type="createNonDurableQueue" roles="admin, guest, europe-users"/> <permission type="deleteNonDurableQueue" roles="admin, guest, europe-users"/> <permission type="send" roles="admin, europe-users"/> <permission type="consume" roles="admin, europe-users"/> </security-setting>
match=globalqueues.europe.#
-
숫자 기호(
#
) 와일드카드 문자는 브로커에서 "모든 순서의 단어"로 해석됩니다. 마침표(.
)로 구분됩니다. 이 예제에서 보안 설정은 globalqueues.europe 문자열로 시작하는 모든 주소에 적용됩니다. permission type="createDurableQueue"
-
admin
역할이 있는 사용자만 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 Cryostat 큐를 생성하거나 삭제할 수 있습니다. permission type="createNonDurableQueue"
-
역할
admin
,guest
또는europe-users
가 있는 모든 사용자는 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 임시 큐를 만들거나 삭제할 수 있습니다. 권한 유형="send"
-
역할
admin
또는europe-users
를 사용하는 모든 사용자는 문자열 globalqueues.europe로 시작하는 주소에 바인딩된 큐로 메시지를 보낼 수 있습니다. permission type="consume"
-
역할
admin
또는europe-users
를 사용하는 모든 사용자는 문자열 globalqueues.europe로 시작하는 주소에 바인딩된 대기열의 메시지를 사용할 수 있습니다.
(선택 사항) 보다 좁은 주소 세트에 다른 보안 설정을 적용하려면 다른 <
security-setting> 요소를
추가합니다.일치
키의 경우 더 구체적인 텍스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.<security-setting match="globalqueues.europe.orders.#"> <permission type="send" roles="europe-users"/> <permission type="consume" roles="europe-users"/> </security-setting>
두 번째
security-setting
요소에서globalqueues.europe.orders.#
match는 첫 번째security-setting
요소에 지정된globalqueues.europe.#
보다 더 구체적입니다.globalqueues.europe.orders.#
과 일치하는 모든 주소의 경우createDurableQueue
,deleteDurableQueue
,createNonDurableQueue
,deleteNonDurableQueue
에서는 파일의 첫 번째security-setting
요소에서 상속 되지 않습니다. 예를 들어globalqueues.europe.orders.plastics
주소의 경우 존재하는 유일한 권한은europe-users
역할에 대해전송
및소비
됩니다.따라서 한
security-setting
블록에 지정된 권한이 다른 블록에 상속되지 않으므로 해당 권한을 지정하지 않고 보다 구체적인security-setting
블록에서 권한을 효과적으로 거부할 수 있습니다.
5.3.2.1.5. 사용자로 대기열 구성
큐가 자동으로 생성되면 연결 클라이언트의 사용자 이름이 큐에 할당됩니다. 이 사용자 이름은 큐의 메타데이터로 포함됩니다. 이름은 Cryostat 및 AMQ Broker 관리 콘솔에 의해 노출됩니다.
다음 절차에서는 브로커 구성에 수동으로 정의한 큐에 사용자 이름을 추가하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 지정된 큐의 경우
사용자
키를 추가합니다. 값을 할당합니다. 예를 들면 다음과 같습니다.<address name="ExampleQueue"> <anycast> <queue name="ExampleQueue"> <user>admin</user> </queue> </anycast> </address>
이전 구성을 기반으로
admin
사용자는ExampleQueue
큐에 할당됩니다.
- 큐에서 사용자를 구성해도 해당 큐에 대한 보안 의미 체계는 변경되지 않으며 해당 큐의 메타데이터에만 사용됩니다.
사용자 간 매핑과 보안 관리자 라는 구성 요소에서 처리하는 역할 간의 매핑입니다. 보안 관리자는 브로커에 저장된 속성 파일에서 사용자 자격 증명을 읽습니다. 기본적으로 AMQ Broker는
org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager
보안 관리자를 사용합니다. 이 기본 보안 관리자는 JAAS 및 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 보안과의 통합을 제공합니다.사용자 정의 보안 관리자를 사용하는 방법에 대한 자세한 내용은 5.6.2절. “사용자 정의 보안 관리자 지정” 을 참조하십시오.
5.3.2.2. 역할 기반 액세스 제어 구성
RBAC( 역할 기반 액세스 제어 )는 속성 및 메서드의 액세스를 제한하는 데 사용됩니다. Cryostat는 AMQ Broker에서 관리 작업을 지원하기 위해 관리 API를 노출하는 방법입니다.
다음 방법 중 하나를 사용하여 Cryostat에 대한 액세스를 제한할 수 있습니다.
-
기본 방법인
management.xml
파일에서 권한 부여 요소를 구성합니다. -
broker.xml
파일에서 보안 설정을 구성합니다.
management.xml
파일을 업데이트할 때와 달리 broker.xml
파일의 보안 설정을 변경한 후에는 브로커를 다시 시작할 필요가 없습니다.
5.3.2.2.1. management.xml
파일에서 역할 기반 액세스 제어 구성.
관리 작업에 대한 역할 기반 액세스 제어를 구성하는 기본 방법은 management.xml
파일에서 권한 부여 요소를 구성하는 것입니다.
다음 예제 절차에서는 역할을 특정 Cryostat 및 해당 속성 및 메서드에 매핑하는 방법을 보여줍니다.
사전 요구 사항
- 사용자 및 역할을 정의했습니다. 자세한 내용은 5.2.2.1절. “기본 사용자 및 암호 인증 구성”의 내용을 참조하십시오.
프로세스
-
<
;broker_instance_dir> /etc/management.xml
구성 파일을 엽니다. role-access
요소를 검색하고 구성을 편집합니다. 예를 들면 다음과 같습니다.<role-access> <match domain="org.apache.activemq.artemis"> <access method="list*" roles="view,update,amq"/> <access method="get*" roles="view,update,amq"/> <access method="is*" roles="view,update,amq"/> <access method="set*" roles="update,amq"/> <access method="*" roles="amq"/> </match> </role-access>
-
이 경우 도메인 이름이
org.apache.activemq.apache
인 모든 Cryostat 속성에 일치가 적용됩니다. -
일치하는 Cryostat 속성에 대한
보기
,업데이트
또는amq
역할의 액세스는목록*,
,get*
set*
,is*
및*
액세스 방법 중 에 대한 액세스 권한을 제어합니다.method="*"(
wildcard) 구문은 구성에 나열되지 않은 다른 모든 방법을 지정하는 catch-all 방법으로 사용됩니다. 구성의 각 액세스 메서드는 Cryostat 메서드 호출로 변환됩니다. -
호출된 Cryostat 메서드는 구성에 나열된 메서드와 일치합니다. 예를 들어
org.apache.activemq.artemis
도메인을 사용하여 Cryostat에서listMessages
라는 메서드를 호출하면 브로커는목록
메서드 구성에 정의된 역할에 다시 액세스합니다. 전체 메서드 이름을 사용하여 액세스를 구성할 수도 있습니다. 예를 들면 다음과 같습니다.
<access method="listMessages" roles="view,update,amq"/>
-
이 경우 도메인 이름이
브로커를 시작하거나 다시 시작합니다.
-
Linux에서: &
lt;broker_instance_dir> /bin/artemis 실행
Windows에서: &
lt;broker_instance_dir> \bin\artemis-service.exe start
Cryostat 속성과 일치하는
키
특성을 추가하여 도메인 내의 특정 Cryostat를 일치시킬 수도 있습니다.
-
Linux에서: &
5.3.2.2.1.1. 역할 기반 액세스 예
이 섹션에서는 역할 기반 액세스 제어를 적용하는 다음 예를 보여줍니다.
다음 예제에서는 키
특성을 사용하여 지정된 도메인의 모든 큐에 역할을 매핑하는 방법을 보여줍니다.
<match domain="org.apache.activemq.artemis" key="subcomponent=queues"> <access method="list*" roles="view,update,amq"/> <access method="get*" roles="view,update,amq"/> <access method="is*" roles="view,update,amq"/> <access method="set*" roles="update,amq"/> <access method="*" roles="amq"/> </match>
다음 예제에서는 키
특성을 사용하여 이름이 지정된 특정 큐에 역할을 매핑하는 방법을 보여줍니다. 이 예제에서 명명된 큐는 예제Queue
입니다.
<match domain="org.apache.activemq.artemis" key="queue=exampleQueue"> <access method="list*" roles="view,update,amq"/> <access method="get*" roles="view,update,amq"/> <access method="is*" roles="view,update,amq"/> <access method="set*" roles="update,amq"/> <access method="*" roles="amq"/> </match>
다음 예제에서는 지정된 접두사가 포함된 모든 큐에 역할을 매핑하는 방법을 보여줍니다. 이 예에서는 별표(*
) 와일드카드 연산자가 접두사로 시작하는 모든 큐 이름과 일치하도록 사용됩니다.
<match domain="org.apache.activemq.artemis" key="queue=example*"> <access method="list*" roles="view,update,amq"/> <access method="get*" roles="view,update,amq"/> <access method="is*" roles="view,update,amq"/> <access method="set*" roles="update,amq"/> <access method="*" roles="amq"/> </match>
동일한 특성 집합(예: 다양한 대기열 세트)에 대해 역할을 다르게 매핑해야 할 수 있습니다. 이 경우 구성 파일에 일치하는
요소를 여러 개 포함할 수 있습니다. 그러나 동일한 도메인에 여러 일치 항목을 가질 수 있습니다.
예를 들어 다음과 같이 구성된 두 개의 <match
> 요소를 고려해 보십시오.
<match domain="org.apache.activemq.artemis" key="queue=example*">
및
<match domain="org.apache.activemq.artemis" key="queue=example.sub*">
이 구성을 기반으로 org.apache.activemq.artemis
도메인에 있는 example.sub.queue
라는 큐는 두 와일드카드 키 표현식과 일치합니다. 따라서 브로커는 큐에 매핑할 역할 집합, 첫 번째 일치 요소에 지정된 역할 또는 두 번째
요소에 지정된 역할을 결정하는 우선순위 지정 체계가 필요합니다.
일치
동일한 도메인에 일치하는 항목이 여러 개인 경우 브로커는 역할을 매핑할 때 다음 우선순위 지정 체계를 사용합니다.
- 와일드카드 일치보다 정확한 일치 항목의 우선순위가 지정됨
- 더 긴 와일드카드 일치는 더 짧은 와일드카드 일치보다 우선 순위가 지정됩니다.
이 예에서 긴 와일드카드 표현식은 example.sub.queue
의 큐 이름과 가장 근접하게 일치하므로 브로커는 두 번째 < match
> 요소에 구성된 role-mapping을 적용합니다.
default-access
요소는 role-access
또는 허용 목록
구성을 사용하여 처리되지 않는 모든 메서드 호출의 catch-all 요소입니다. default-access
및 role-access
요소에는 동일한 match
요소 의미 체계가 있습니다.
5.3.2.2.1.2. allowlist
요소 구성
허용 목록은 사용자 인증이 필요하지 않은 사전 승인 도메인 또는 Cryostats 집합입니다. 인증을 바이패스해야 하는 도메인 목록 또는 도메인 목록 또는 둘 다 제공할 수 있습니다. 예를 들어 allowlist
를 사용하여 AMQ Broker 관리 콘솔에 필요한 모든 Cryostat를 지정할 수 있습니다.
다음 예제 절차에서는 allowlist
요소를 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/management.xml
구성 파일을 엽니다. allowlist
요소를 검색하고 구성을 편집합니다.<allowlist> <entry domain="hawtio"/> </allowlist>
이 예에서 도메인
hawtio
가 있는 모든 Cryostat는 인증 없이 액세스할 수 있습니다. 또한 <entry domain="hawtio" key="type=*"/
> 형식의 와일드카드 항목을 사용할 수도 있습니다.브로커를 시작하거나 다시 시작합니다.
-
Linux에서: &
lt;broker_instance_dir> /bin/artemis 실행
-
Windows에서: &
lt;broker_instance_dir> \bin\artemis-service.exe start
-
Linux에서: &
5.3.2.2.2. broker.xml
파일에서 역할 기반 액세스 제어 구성
management.xml
파일 대신 broker.xml
파일에서 관리 작업에 대한 역할 기반 액세스 제어를 구성할 수 있습니다. broker.xml
파일에서 권한을 업데이트하려면 브로커를 다시 시작할 필요가 없습니다.
broker.xml
파일에서 관리 작업에 대한 보기
또는 편집
권한을 부여할 수 있습니다. 보기
또는 편집
권한이 있는 역할에 사용할 수 있는 특정 관리 작업은 사전 정의된 정규식으로 제어됩니다. 정규식과 일치하는 모든 작업에는 뷰
권한과 기타 모든 작업에 대한 편집
권한이 있는 역할로 액세스할 수 있습니다.
사전 요구 사항
- 사용자 및 역할을 정의했습니다. 자세한 내용은 5.2.2.1절. “기본 사용자 및 암호 인증 구성”의 내용을 참조하십시오.
프로세스
브로커가 이 파일에서 기본 RBAC 구성을 사용하지 못하도록
management.xml
파일에서 권한 부여 요소 구성을 삭제합니다.-
<
broker_instance_dir>/etc/management.xml
파일을 편집합니다. -
파일에서 권한
부여
요소 구성을 삭제합니다. -
<
broker_instance_dir>/etc/management.xml
파일을 저장합니다.
-
<
브로커 JVM에 환경 변수를 추가하여
broker.xml
파일에서 RBAC 구성을 사용하도록 브로커를 구성합니다.-
<
;broker_instance_dir>/etc/artemis.profile
파일을 엽니다. Java 시스템 인수의
JAVA_ARGS 목록에
다음 인수를 추가합니다.-Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder
-
Artemis
.profile
파일을 저장합니다.
-
<
-
<
;broker_instance_dir> /etc/broker.xml
파일을 열어 관리 작업에 대한 RBAC를 구성합니다. security-settings
요소를 검색하고 관리 작업에 대한security-setting
요소를 추가합니다.관리 작업의 일치 주소 형식은 다음과 같습니다.
<_management-rbac-prefix_>.<_resource type_>.<_resource name_>.<_operation_>
management-rbac-prefix
매개변수의 기본값은mops
입니다.다음 예제 RBAC 구성에서 일치 주소의 숫자 기호(#)는
admin
역할보기를
부여하고 모든 Cryostat에 대한 권한을편집합니다
.<security-settings> .. <security-setting match="mops.#"> <permission type="view" roles="admin"/> <permission type="edit" roles="admin"/> </security-setting> .. </security-setting>
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 저장합니다.
관리 작업을 위한 역할 기반 액세스 제어의 기타 예
다음 예제에서는 manager
역할 보기
와 activemq.management
주소에 대한 편집
권한을 부여합니다. 작업 위치의 별표(*)는 모든 작업에 대한 액세스 권한을 부여합니다.
<security-setting match="mops.address.activemq.management.*"> <permission type="view" roles="manager"/> </security-setting>
다음 예제에는 브로커를 사용하여 지정된 작업을 수행할 수 있는 모든 사용자 권한을 거부하는 빈 roles 목록이 있습니다.
<security-setting match="mops.broker.forceFailover"> <permission type="edit" roles=""/> </security-setting>
5.3.2.3. 리소스 제한 설정
경우에 따라 특정 사용자가 권한 부여 및 인증과 관련된 일반 보안 설정을 초과하여 수행할 수 있는 특정 제한을 설정하는 것이 유용합니다.
5.3.2.3.1. 연결 및 큐 제한 구성
다음 예제 절차에서는 사용자가 생성할 수 있는 연결 및 대기열 수를 제한하는 방법을 보여줍니다.
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. resource-limit-settings
요소를 추가합니다.max-connections
및max-queues
의 값을 지정합니다. 예를 들면 다음과 같습니다.<resource-limit-settings> <resource-limit-setting match="myUser"> <max-connections>5</max-connections> <max-queues>3</max-queues> </resource-limit-setting> </resource-limit-settings>
max-connections
-
일치하는 사용자가 브로커에서 생성할 수 있는 세션 수를 정의합니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다. 세션 수를 제한하려면 AMQ Core Protocol JMS 클라이언트에서 브로커에 대한 각 연결이 두 개의 세션을 생성하는 경우를 고려하십시오. max-queues
-
일치하는 사용자가 생성할 수 있는 대기열 수를 정의합니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다.
브로커 구성의 address-setting
요소에 지정할 수 있는 일치
문자열과 달리 resource-limit-settings
에서 지정하는 일치
문자열은 와일드카드 구문을 사용할 수 없습니다. 대신 match 문자열은 리소스 제한 설정을 적용할 특정 사용자를 정의합니다.