5.3. 클라이언트 인증
5.3.1. 클라이언트 권한 부여 방법
주소 및 큐 생성 및 삭제, 메시지 전송 및 사용과 같은 브로커에서 작업을 수행하도록 클라이언트에 권한을 부여하려면 다음 방법을 사용할 수 있습니다.
- 사용자 및 역할 기반 권한
- 인증된 사용자 및 역할에 대한 브로커 보안 설정을 구성합니다.
- 클라이언트를 인증하도록 LDAP 설정
- 인증 및 권한 부여를 모두 처리하도록 LDAP( Lightweight Directory Access Protocol ) 로그인 모듈을 구성합니다. LDAP 로그인 모듈은 중앙 X.500 디렉터리 서버에 저장된 사용자 데이터에 대해 들어오는 자격 증명을 확인하고 사용자 역할을 기반으로 권한을 설정합니다.
- 클라이언트를 인증하도록 Kerberos 구성
-
Kerberos 인증 사용자를 AMQ Broker 역할에 매핑하는
PropertiesLoginModule
또는LDAPLoginModule
로그인 모듈에 인증 정보를 전달하도록 JVM( Java Authentication and Authorization Service )Krb5LoginModule
로그인 모듈을 구성합니다.
5.3.2. 사용자 및 역할 기반 권한 부여 구성
5.3.2.1. 권한 설정
권한은 broker.xml
구성 파일의 < security-setting
> 요소를 통해 해당 주소에 따라 큐에 대해 정의됩니다. 구성 파일의 < security-
settings> 요소에서 여러 인스턴스를 < security-settings
>에 정의할 수 있습니다. 정확한 주소 일치를 지정하거나 숫자 기호(#
) 및 별표(*
) 와일드카드 문자를 사용하여 와일드카드 일치 항목을 정의할 수 있습니다.
주소와 일치하는 대기열 집합에 다른 권한을 제공할 수 있습니다. 이러한 권한은 다음 표에 표시되어 있습니다.
사용자가…을 사용할 수 있도록 허용 | 이 매개변수를 사용합니다. |
---|---|
주소 생성 |
|
주소 삭제 |
|
일치하는 주소 아래에 직렬화 대기열 생성 |
|
일치하는 주소 아래의 직렬화 대기열 삭제 |
|
일치하는 주소에 적용할 수 없는 큐 생성 |
|
일치하는 주소에서 정의할 수 없는 큐 삭제 |
|
일치하는 주소로 메시지 보내기 |
|
일치하는 주소에 바인딩된 큐의 메시지 사용 |
|
관리 주소로 관리 메시지를 보내 관리 작업 호출 |
|
일치하는 주소에 바인딩된 큐 검색 |
|
각 권한에 대해 권한이 부여된 역할 목록을 지정합니다. 지정된 사용자에게 역할이 있는 경우 해당 주소 집합에 대한 권한이 부여됩니다.
다음 섹션에는 권한에 대한 몇 가지 구성 예제가 표시되어 있습니다.
5.3.2.1.1. 단일 주소에 대한 메시지 프로덕션 구성
다음 절차에서는 단일 주소에 대한 메시지 프로덕션 권한을 구성하는 방법을 보여줍니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
security-
요소를 추가합니다.settings> 요소에 단일 <security-setting
>match
키의 경우 주소를 지정합니다. 예를 들면 다음과 같습니다.<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
>match
키의 경우 주소를 지정합니다. 예를 들면 다음과 같습니다.<security-settings> <security-setting match="my.destination"> <permission type="consume" roles="consumer"/> </security-setting> </security-settings>
앞의 구성에 따라
consumer
역할의 멤버는 주소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"
-
관리자
역할이 있는 사용자만 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 내성 대기열을 생성하거나 삭제할 수 있습니다. permission type="createNonDurableQueue"
-
admin
,guest
또는europe-users
역할이 있는 모든 사용자는 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 임시 대기열을 만들거나 삭제할 수 있습니다. permission type="send"
-
역할
admin
또는europe-users
가 있는 모든 사용자는 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 큐에 메시지를 보낼 수 있습니다. permission type="consume"
-
역할
admin
또는europe-users
가 있는 모든 사용자는 globalqueues.europe 문자열로 시작하는 주소에 바인딩된 큐에서 메시지를 사용할 수 있습니다.
(선택 사항) 더 좁은 주소 집합에 다른 보안 설정을 적용하려면 <
security-setting> 요소를
추가합니다.match
키의 경우 더 구체적인 텍스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.<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.#
일치는 첫 번째security-setting
요소에 지정된글로벌 큐 큐.europe.#
보다 더 구체적입니다.globalqueues.europe.orders.#
와 일치하는 주소의 경우 권한createDurableQueue
,deleteDurableQueue
만들기NonDurableQueue
,deleteNonDurableQueue
는 파일의 첫 번째security-setting
요소에서 상속 되지 않습니다. 예를 들어 주소globalqueues.europe.orders.plastics
의 경우 존재하는 유일한 권한은 역할europe-users
에 대해전송
및소비
됩니다.따라서 하나의 security-setting 블록에서 지정된 권한은 다른
security-setting
블록에서 상속되지 않으므로 해당 권한을 지정하지 않고 보다 구체적인security-setting
블록에서 권한을 효과적으로 거부할 수 있습니다.
5.3.2.1.5. 사용자로 큐 구성
큐가 자동으로 생성되면 연결된 클라이언트의 사용자 이름이 큐에 할당됩니다. 이 사용자 이름은 큐의 메타데이터로 포함됩니다. 이름은 CloudEvent 및 AMQ Broker 관리 콘솔에서 노출됩니다.
다음 절차에서는 브로커 구성에 수동으로 정의한 큐에 사용자 이름을 추가하는 방법을 보여줍니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 지정된 큐의 경우
사용자
키를 추가합니다. 값을 할당합니다. 예를 들면 다음과 같습니다.<address name="ExampleQueue"> <anycast> <queue name="ExampleQueue" user="admin"/> </anycast> </address>
이전 구성을 기반으로
admin
사용자는 대기열예Queue
에 할당됩니다.
- 큐에서 사용자를 구성해도 해당 큐의 보안 의미는 변경되지 않으며 해당 큐의 메타데이터에만 사용됩니다.
사용자 간 매핑과 보안 관리자 라는 구성 요소에서 처리하는 역할 간의 매핑입니다. 보안 관리자는 브로커에 저장된 속성 파일에서 사용자 자격 증명을 읽습니다. 기본적으로 AMQ Broker는
org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager
보안 관리자를 사용합니다. 이 기본 보안 관리자는 10.0.0.1 및 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 보안과의 통합을 제공합니다.사용자 정의 보안 관리자 사용 방법에 대한 자세한 내용은 5.6.2절. “사용자 정의 보안 관리자 지정” 을 참조하십시오.
5.3.2.2. 역할 기반 액세스 제어 구성
RBAC( 역할 기반 액세스 제어 )는 CloudEvents의 속성 및 메서드에 대한 액세스를 제한하는 데 사용됩니다. 관리자는 RBAC를 사용하면 역할에 따라 웹 콘솔, 관리 인터페이스, 코어 메시지 등과 같은 모든 사용자에게 올바른 수준의 액세스 권한을 부여할 수 있습니다.
5.3.2.2.1. 역할 기반 액세스 구성
다음 예제 절차에서는 역할을 특정 CloudEvents 및 해당 속성 및 메서드에 매핑하는 방법을 보여줍니다.
사전 요구 사항
- 먼저 사용자 및 역할을 정의해야 합니다. 자세한 내용은 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
가 있는 모든 CloudEvent 속성에 일치가 적용됩니다. -
일치하는 10.0.0.1 속성에 대한
보기
,업데이트
또는amq
역할에 대한 액세스는 역할을 추가하는list*
,get*
,is*
,*
액세스 메서드로 제어됩니다.method="*"(
위드카드) 구문은 구성에 나열되지 않은 다른 모든 메서드를 지정하는 데 catch-all 방법으로 사용됩니다. 구성의 각 액세스 방법은 CloudEvent 메서드 호출로 변환됩니다. -
호출된 CloudEvent 메서드가 구성에 나열된 메서드와 일치합니다. 예를 들어
org.apache.activemq.artemis
도메인을 사용하여listMessages
라는 메서드를 호출하면 브로커는목록
메서드의 구성에 정의된 역할에 대한 액세스를 다시 찾습니다. 전체 method name을 사용하여 액세스를 구성할 수도 있습니다. 예를 들면 다음과 같습니다.
<access method="listMessages" roles="view,update,amq"/>
-
이 경우 도메인 이름
브로커를 시작하거나 다시 시작합니다.
-
Linux: <
;broker_instance_dir> /bin/artemis 실행
-
Windows에서 <
;broker_instance_dir> \bin\artemis-service.exe 시작
-
Linux: <
또한 CloudEvent 속성과 일치하는 키
특성을 추가하여 도메인 내에서 특정>-<s를 일치시킬 수도 있습니다.
5.3.2.2.2. 역할 기반 액세스 예
이 섹션에서는 역할 기반 액세스 제어 적용의 다음 예를 보여줍니다.
다음 예제에서는 키
특성을 사용하여 지정된 도메인의 모든 큐에 역할을 매핑하는 방법을 보여줍니다.
<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
요소는 일치하는
요소 의미 체계가 동일합니다.
5.3.2.2.3. 허용 목록 요소 구성
화이트리스트 는 사용자 인증이 필요하지 않은 사전 승인 도메인 또는 10.0.0.1s 집합입니다. 인증을 무시해야 하는 도메인 목록 또는 둘 다 목록을 제공할 수 있습니다. 예를 들어 허용 목록을 사용하여 AMQ Broker 관리 콘솔에서 실행하는 데 필요한 CloudEvents를 지정할 수 있습니다.
다음 예제 절차에서는 허용 목록
요소를 구성하는 방법을 보여줍니다.
절차
-
<
;broker_instance_dir> /etc/management.xml
구성 파일을 엽니다. 허용 목록
요소를 검색하고 구성을 편집합니다.<whitelist> <entry domain="hawtio"/> </whitelist>
이 예에서 도메인
hawtio
가 있는 모든 10.0.0.1은 인증 없이 액세스가 허용됩니다. <entry domain="hawtio" key="type=*"/
> 형식의 와일드카드 항목을 사용할 수도 있습니다.브로커를 시작하거나 다시 시작합니다.
-
Linux: <
;broker_instance_dir> /bin/artemis 실행
-
Windows에서 <
;broker_instance_dir> \bin\artemis-service.exe 시작
-
Linux: <
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
이며 이는 제한이 없음을 의미합니다. max-queues
-
일치하는 사용자가 생성할 수 있는 대기열 수를 정의합니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다.
브로커 구성의 address-setting
요소에서 지정할 수 있는 일치 문자열과 달리 resource-limit-settings
에서 지정하는
문자열은 와일드카드 구문을 사용할 수 없습니다. 대신 match 문자열은 리소스 제한 설정이 적용되는 특정 사용자를 정의합니다.
match