10.4. 메시징 끝점에 대한 연결 및 리소스 제한 설정
vhost 정책을 구성하여 메시징 엔드포인트에 대한 연결 제한 및 AMQP 리소스 제한을 정의할 수 있습니다. vhost 정책은 클라이언트가 특정 연결을 통해 메시징 끝점에서 액세스할 수 있는 리소스를 정의합니다.
vhost는 일반적으로 클라이언트 연결이 전달되는 호스트의 이름입니다. 예를 들어 클라이언트 애플리케이션이 amqp://mybroker.example.com:5672/queue01
URL에 대한 연결을 여는 경우 vhost는 mybroker.example.com
입니다.
10.4.1. vhost 정책 활성화
정책을 생성하기 전에 vhost 정책을 사용하도록 라우터를 활성화해야 합니다.
절차
/etc/qpid-dispatch/qdrouterd.conf
구성 파일에서policy
섹션이 없는 경우 해당 라우터에 대해 vhost 정책을 활성화합니다.policy { ... enableVhostPolicy: true enableVhostNamePatterns: true defaultVhost: $default }
enableVhostPolicy
-
라우터에서 구성된 vhost 정책에 정의된 연결 거부 및 리소스 제한을 적용할 수 있습니다. 기본값은
false
입니다. 즉, 라우터에서 vhost 정책을 적용하지 않습니다. enableVhostNamePatterns
-
vhost 호스트 이름과 패턴 일치를 활성화합니다.
true
로 설정하면 와일드카드를 사용하여 vhost의 호스트 이름을 지정할 수 있습니다.false
로 설정하면 vhost 호스트 이름이 리터럴 문자열로 처리됩니다. 즉, 각 vhost에 대해 정확한 호스트 이름을 지정해야 합니다. 기본값은false
입니다. defaultVhost
-
vhost 정책이 구성되지 않은 연결에 적용되는 기본 vhost 정책의 이름입니다. 기본값은
$default
입니다.defaultVhost
가 정의되지 않은 경우 기본 vhost 처리가 비활성화됩니다.
10.4.2. 가상 호스트 정책 생성
vhost 정책은 원격 호스트에서 라우터에 연결하는 사용자의 연결 제한 및 리소스 제한을 정의합니다. 각 원격 호스트에 대해 하나의 vhost 정책을 생성해야 합니다.
사전 요구 사항
라우터에 대해 vhost 정책을 활성화해야 합니다. 자세한 내용은 10.4.1절. “vhost 정책 활성화”의 내용을 참조하십시오.
절차
vhost
섹션을 추가하고 메시징 끝점에 대한 연결 및 메시지 크기 제한을 정의합니다.연결 제한은 vhost에 연결된 모든 사용자에게 적용됩니다. 이러한 제한은 vhost에 동시에 연결할 수 있는 사용자 수를 제어합니다.
vhost { hostname: "example.com" aliases: "example.org, example.net" maxConnections: 10000 maxMessageSize: 500000 maxConnectionsPerUser: 100 maxConnectionsPerHost: 100 allowUnknownUser: true ... }
hostname
vhost( messaging 끝점)의 리터럴 호스트 이름 또는 vhost 호스트 이름과 일치하는 패턴입니다. 이 vhost 정책은 사용자가 지정하는 호스트 이름으로 전달되는 모든 클라이언트 연결에 적용됩니다. 이 이름은 고유해야 합니다. 호스트 이름당 하나의 vhost 정책만 사용할 수 있습니다.
enableVhostNamePatterns
가true
로 설정된 경우 와일드카드를 사용하여 호스트 이름의 범위와 일치하는 패턴을 지정할 수 있습니다. 자세한 내용은 10.4.6절. “vhost 정책 호스트 이름 패턴 일치 규칙”의 내용을 참조하십시오.별칭
라우터에서 이 vhost의 설정을 사용하도록 지시하는 대체 리터럴 호스트 이름 또는 패턴입니다. 들어오는 연결과 일치하는 별칭 호스트 이름은 vhost 섹션에 정의된 설정을 사용합니다. 다중 테넌트 구성에서 vhost 별칭에 대한 연결은 테넌트 네임스페이스의 기본 vhost 호스트 이름을 사용합니다. 이 예에서 연결이 vhost
example.org
로 이동되면 기본 vhost 호스트 이름example.com
의 설정이 적용되고example.com
은 테넌트 네임스페이스가 됩니다. 모든 vhosts의 vhost 호스트이름
및별칭
설정은 고유해야 합니다.enableVhostNamePatterns
가true
로 설정된 경우 와일드카드를 사용하여 호스트 이름 별칭 범위와 일치하는 패턴을 지정할 수 있습니다. 자세한 내용은 10.4.6절. “vhost 정책 호스트 이름 패턴 일치 규칙”의 내용을 참조하십시오.maxConnections
- 이 vhost에 허용되는 최대 동시 클라이언트 연결의 최대 수입니다. 기본값은 65535입니다.
maxMessageSize
-
이 vhost에 연결할 수 있는 AMQP 메시지 전송의 최대 크기(바이트)입니다. 이 제한은 정책
maxMessageSize
값을 재정의하고 vhost 사용자 그룹 설정으로 덮어쓸 수 있습니다. 값이0
이면 이 제한이 비활성화됩니다. maxConnectionsPerUser
- 모든 사용자에 대해 허용되는 최대 동시 클라이언트 연결 수입니다. 기본값은 65535입니다.
maxConnectionsPerHost
- 모든 원격 호스트(클라이언트가 연결되는 호스트)에 대해 허용되는 최대 동시 클라이언트 연결 수입니다. 기본값은 65535입니다.
allowUnknownUser
-
알 수 없는 사용자(정의된 사용자 그룹의 멤버가 아닌 사용자)가 vhost에 연결할 수 있는지 여부입니다. 알 수 없는 사용자는
$default
사용자 그룹에 할당되며$default
설정을 받습니다. 기본값은false
입니다. 즉, 알 수 없는 사용자가 허용되지 않습니다.
추가한 연결 설정 아래에 있는
vhost
섹션에서groups
엔터티를 추가하여 리소스 제한을 정의합니다.사용자 그룹별로 리소스 제한을 정의합니다. 사용자 그룹은 그룹 멤버가 액세스할 수 있는 메시징 리소스를 지정합니다.
이 예제에서는 admin, developers, $default의 세 가지 사용자 그룹을 보여줍니다.
vhost { ... groups: { admin: { users: "admin1, admin2" remoteHosts: "127.0.0.1, ::1" sources: "*" targets: "*" } developers: { users: "dev1, dev2, dev3" remoteHosts: "*" sources: "myqueue1, myqueue2" targets: "myqueue1, myqueue2" } $default: { remoteHosts: "*" allowDynamicSource: true, allowAdminStatusUpdate: true, sources: "myqueue1, myqueue2" targets: "myqueue1, myqueue2" } } }
참고따옴표를 사용하여 문자열 값을 정의합니다.
사용자
- 이 사용자 그룹에 대해 인증된 사용자 목록입니다. 여러 사용자를 분리하려면 쉼표를 사용합니다. 사용자는 하나의 가상호스트 사용자 그룹에만 속할 수 있습니다.
remoteHosts
-
사용자가 연결할 수 있는 원격 호스트 목록입니다. 호스트는 호스트 이름, IP 주소 또는 IP 주소 범위일 수 있습니다. 쉼표를 사용하여 여러 호스트를 구분합니다. 모든 원격 호스트에서 액세스를 허용하려면 와일드카드
*
를 지정합니다. 모든 원격 호스트에서 액세스를 거부하려면 이 속성을 비워 둡니다. maxConnectionsPerUser
-
이 사용자 그룹의 사용자가 생성할 수 있는 최대 연결 수입니다. 이 값을 지정하면 vhost
maxConnectionsPerUser
값을 덮어씁니다. maxConnectionsPerHost
-
허용된 원격 호스트에서 이 사용자 그룹의 사용자가 생성할 수 있는 최대 동시 연결 수입니다. 이 값을 지정하면 vhost
maxConnectionsPerUser
값을 덮어씁니다. maxMessageSize
-
이 그룹의 사용자가 생성한 연결에 허용되는 AMQP 메시지 전송의 최대 크기(바이트)입니다. 이 제한은 policy 및 vhost
maxMessageSize
값을 덮어씁니다. 값이0
이면 이 제한이 비활성화됩니다. allowDynamicSource
-
true
인 경우 이 그룹의 사용자 연결은 수신자를 동적 소스에 연결할 수 있습니다. 이를 통해 임시 주소 또는 임시 큐에 리스너를 생성할 수 있습니다.false
인 경우 동적 소스를 사용할 수 없습니다. allowAdminStatusUpdate
-
true
인 경우 이 그룹의 사용자 연결은 연결의adminStatus
를 수정할 수 있습니다. 이는 발신자 또는 수신자 연결의 종료를 허용합니다.false
인 경우 이 그룹의 사용자는 연결을 종료하지 못하도록 합니다. 라우터 간 연결은 사용자가 종료할 수 없습니다. 정책이 구성되지 않은 경우에도 기본값은true
입니다. allowWaypointLinks
-
true
인 경우 이 그룹의 사용자의 연결은 waypoint 기능을 사용하여 링크를 연결할 수 있습니다. 이를 통해 끝점은 자동 링크를 구성할 필요 없이 끝점(즉, 브로커)으로 작동할 수 있습니다.false
인 경우 waypoint 기능을 사용할 수 없습니다. allowDynamicLinkRoutes
-
true
인 경우 이 그룹의 사용자의 연결은 연결 범위 링크 경로 대상을 동적으로 생성할 수 있습니다. 이를 통해 끝점이 링크 경로를 구성할 필요 없이 링크 경로 대상(즉, 브로커)으로 작동할 수 있습니다.false
인 경우 동적 링크 경로 대상 생성이 허용되지 않습니다. allowFallbackLinks
-
true
인 경우 이 그룹의 사용자의 연결은 폴백 링크 기능을 사용하여 링크를 연결할 수 있습니다. 이를 통해 폴백이 활성화된 주소에 대한 엔드포인트가 대체 대상(및 소스)으로 작동할 수 있습니다.false
인 경우 대체 링크 기능을 사용할 수 없습니다. sources
|sourcePattern
이 그룹의 사용자가 메시지를 수신할 수 있는 AMQP 소스 주소 목록입니다.
소스를
사용하여 하나 이상의 리터럴 주소를 지정합니다. 여러 주소를 지정하려면 쉼표로 구분된 목록을 사용합니다. 이 그룹의 사용자가 모든 주소에서 메시지를 수신하지 못하도록 하려면 이 속성을 비워 둡니다. 특정 사용자와 관련된 주소에 대한 액세스를 허용하려면${user}
토큰을 지정합니다. 자세한 내용은 10.4.5절. “vhost 정책 소스 및 대상 주소를 지정하는 방법”의 내용을 참조하십시오.또는
sourcePattern
을 사용하여 패턴에 해당하는 하나 이상의 주소를 일치시킬 수 있습니다. 패턴은.
또는/
문자로 구분된 일련의 단어입니다. 와일드카드 문자를 사용하여 단어를 나타낼 수 있습니다.*
문자는 정확히 하나의 단어와 일치하며#
문자는 0개 이상의 단어와 일치합니다.여러 주소 범위를 지정하려면 쉼표로 구분된 주소 패턴 목록을 사용합니다. 자세한 내용은 ]을 참조하십시오. 특정 사용자와 관련된 주소 범위에 대한 액세스를 허용하려면
${user}
토큰을 지정합니다. 자세한 내용은 xref:methods-specifying-vhost-policy-source-target-addresses-router-rhel[ 를 참조하십시오.targets
|targetPattern
- 이 그룹의 사용자가 메시지를 보낼 수 있는 AMQP 대상 주소 목록입니다. 여러 AMQP 주소를 지정하고 소스 주소와 동일한 방식으로 사용자 이름 대체 및 주소 패턴을 사용할 수 있습니다.
필요한 경우 고급 사용자 그룹 설정을 vhost 사용자 그룹에 추가합니다.
고급 사용자 그룹 설정을 사용하면 연결의 열린 AMQP 연결, 세션 시작 및 링크 연결 단계에 따라 리소스 제한을 정의할 수 있습니다. 자세한 내용은
qdrouterd.conf
매뉴얼 페이지의 vhost 를 참조하십시오.
10.4.3. JSON 파일로 vhost 정책 생성
라우터 구성 파일을 사용하는 대신 JSON 파일에서 vhost 정책을 구성할 수 있습니다. 동일한 vhost 구성을 공유해야 하는 라우터가 여러 개인 경우 각 라우터에서 액세스할 수 있는 위치에 vhost 구성 JSON 파일을 배치한 다음 해당 JSON 파일에 정의된 vhost 정책을 적용하도록 라우터를 구성할 수 있습니다.
사전 요구 사항
- 라우터에 대해 vhost 정책을 활성화해야 합니다. 자세한 내용은 10.4.1절. “vhost 정책 활성화”의 내용을 참조하십시오.
절차
/etc/qpid-dispatch/qdrouterd.conf
구성 파일에서 vhost 정책 정의 JSON 파일을 저장할 디렉터리를 지정합니다.policy { ... policyDir: /etc/qpid-dispatch-policies }
policyDir
- JSON 형식의 vhost 정책 정의 파일이 있는 디렉터리의 절대 경로입니다. 라우터는 이 디렉터리에 있는 각 JSON 파일에서 모든 vhost 정책을 처리합니다.
vhost 정책 정의 디렉터리에서 각 vhost 정책에 대해 JSON 파일을 생성합니다.
예 10.1. vhost 정책 정의 JSON 파일
[ ["vhost", { "hostname": "example.com", "maxConnections": 10000, "maxConnectionsPerUser": 100, "maxConnectionsPerHost": 100, "allowUnknownUser": true, "groups": { "admin": { "users": ["admin1", "admin2"], "remoteHosts": ["127.0.0.1", "::1"], "sources": "*", "targets": "*" }, "developers": { "users": ["dev1", "dev2", "dev3"], "remoteHosts": "*", "sources": ["myqueue1", "myqueue2"], "targets": ["myqueue1", "myqueue2"] }, "$default": { "remoteHosts": "*", "allowDynamicSource": true, "sources": ["myqueue1", "myqueue2"], "targets": ["myqueue1", "myqueue2"] } } }] ]
이러한 속성에 대한 자세한 내용은 10.4.2절. “가상 호스트 정책 생성” 을 참조하십시오.
10.4.4. 발신 연결에 대한 리소스 제한 설정
라우터가 외부 AMQP 컨테이너(예: 클라이언트 또는 브로커)에 대한 발신 연결을 설정하는 경우 커넥터 vhost 정책을 구성하여 외부 컨테이너에서 라우터에 액세스할 수 있는 리소스를 제한할 수 있습니다.
커넥터 vhost 정책에 정의된 리소스 제한은 외부 AMQP 컨테이너에서 시작하는 링크에 적용됩니다. 커넥터 vhost 정책은 라우터에서 생성하는 링크를 제한하지 않습니다.
커넥터 vhost 정책은 일반
또는 route-container
역할이 있는 커넥터에만 적용할 수 있습니다. 라우터 간
또는 에지
역할이 있는 커넥터에는 커넥터 vhost 정책을 적용할 수 없습니다.
사전 요구 사항
- 라우터에 대해 vhost 정책이 활성화됩니다. 자세한 내용은 10.4.1절. “vhost 정책 활성화”의 내용을 참조하십시오.
절차
/etc/qpid-dispatch/qdrouterd.conf
구성 파일에서$connector
사용자 그룹이 있는vhost
섹션을 추가합니다.vhost { hostname: "my-connector-policy" groups: { $connector: { sources: "*" targets: "*" maxSenders: 5 maxReceivers: 10 allowAnonymousSender: true allowWaypointLinks: true } } }
hostname
- 커넥터 vhost 정책을 식별하는 고유한 이름입니다. 이 이름은 실제 호스트 이름을 나타내지 않으므로 실제 vhost 호스트 이름과 충돌하지 않는 이름을 선택합니다.
$Connector
- 이 vhost 정책을 커넥터 vhost 정책으로 식별합니다. 적용할 수 있는 리소스 제한에 대한 자세한 내용은 10.4.2절. “가상 호스트 정책 생성” 을 참조하십시오.
외부 AMQP 컨테이너에 대한 연결을 설정하는 커넥터에 커넥터 vhost 정책을 적용합니다.
다음 예제에서는 이전 단계에서 구성한 커넥터 vhost 정책을 적용합니다.
connector { host: 192.0.2.10 port: 5672 role: normal policyVhost: my-connector-policy }
10.4.5. vhost 정책 소스 및 대상 주소를 지정하는 방법
vhost에서 여러 주소에 대한 액세스를 허용하거나 거부하려는 경우 각 주소를 개별적으로 지정하지 않고도 여러 주소를 일치시키는 데 사용할 수 있는 여러 가지 방법이 있습니다.
다음 표에서는 vhost 정책에서 여러 소스 및 대상 주소를 지정하는 데 사용할 수 있는 방법을 설명합니다.
to… | 이 작업을 수행합니다. |
---|---|
사용자 그룹의 모든 사용자가 모든 소스 또는 대상 주소에 액세스하도록 허용 |
예 10.2. 모든 주소에서 수신 sources: * |
사용자 그룹의 모든 사용자가 모든 소스 또는 대상 주소에 액세스하지 못하도록 | 값을 지정하지 마십시오. 예 10.3. 모든 주소로 메시지 전송 금지 targets: |
각 사용자에게 특정 리소스에 대한 액세스 허용 |
참고
AMQP 주소 이름 또는 패턴에서는 예 10.4. 사용자별 주소에서 수신 이 정의를 통해 사용자 그룹의 사용자는 다음 규칙 중 하나를 충족하는 모든 주소에서 메시지를 수신할 수 있습니다.
sources: tmp_${user}, temp*, ${user}-home-* 예 10.5. 사용자별 주소 패턴 이 정의를 통해 사용자 그룹의 사용자는 다음 규칙 중 하나를 충족하는 모든 주소에서 메시지를 수신할 수 있습니다.
sourcePattern: tmp.${user}, temp/#, ${user}.home/* 참고
주소 패턴( |
10.4.6. vhost 정책 호스트 이름 패턴 일치 규칙
vhost 정책에서 vhost 호스트 이름은 호스트 이름의 범위를 포함하는 리터럴 호스트 이름 또는 패턴일 수 있습니다.
호스트 이름 패턴은 다음 와일드카드 문자 중 하나 이상인 일련의 단어입니다.
-
*
정확히 한 단어를 나타냅니다. -
0
개
이상의 단어를 나타냅니다.Represents zero or more words.
다음 표는 호스트 이름 패턴의 몇 가지 예를 보여줍니다.
이 패턴은... | matches… | 하지만, 그렇지 않습니다. |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
vhost 호스트 이름 패턴 일치는 다음 우선 순위 규칙을 적용합니다.
정책 패턴 | 우선순위 |
---|---|
정확한 일치 | 높음 |
* | 중간 |
# | 낮음 (LOW) |
AMQ Interconnect는 기존 패턴과 충돌하는 vhost 호스트 이름 패턴을 생성하는 것을 허용하지 않습니다. 여기에는 기존 패턴과 동일하게 줄일 수 있는 패턴이 포함됩니다. 예를 들어 #.com
이 이미 존재하는 경우 #.#.#.com
패턴을 만들 수 없습니다.
10.4.7. vhost 정책 예
이 예제에서는 vhost 정책을 사용하여 메시징 리소스에 대한 액세스 권한을 부여하는 방법을 보여줍니다.
예 10.6. 메시징 끝점의 기본 리소스 제한 정의
이 예에서 vhost 정책은 example.com
호스트에 연결하는 클라이언트에 대한 리소스 제한을 정의합니다.
[ ["vhost", { "hostname": "example.com", 1 "maxConnectionsPerUser": 10, 2 "allowUnknownUser": true, 3 "groups": { "admin": { "users": ["admin1", "admin2"], 4 "remoteHosts": ["127.0.0.1", "::1"], 5 "sources": "*", 6 "targets": "*" 7 }, "$default": { "remoteHosts": "*", 8 "sources": ["news*", "sports*" "chat*"], 9 "targets": "chat*" 10 } } }] ]
- 1
- 이 vhost 정책에 정의된 규칙은
example.com
에 연결하는 모든 사용자에게 적용됩니다. - 2
- 각 사용자는 vhost에 대한 최대 10개의 연결을 열 수 있습니다.
- 3
- 모든 사용자가 이 vhost에 연결할 수 있습니다.
admin
그룹에 속하지 않은 사용자는$default
그룹에 할당됩니다. - 4
admin1
또는admin2
사용자가 vhost에 연결하면admin
사용자 그룹에 할당됩니다.- 5
admin
사용자 그룹의 사용자는 localhost에서 연결해야 합니다. admin 사용자가 다른 호스트에서 연결을 시도하는 경우 연결이 거부됩니다.- 6
- admin 사용자 그룹의 사용자는 모든 주소에서 수신할 수 있습니다.
- 7
- admin 사용자 그룹의 사용자는 모든 주소로 보낼 수 있습니다.
- 8
- 관리자가 아닌 사용자는 모든 호스트에서 연결할 수 있습니다.
- 9
- 관리자 이외의 사용자는
뉴스
,port 또는채팅
접두사로 시작하는 모든 주소에서 메시지를 수신할 수 있습니다. - 10
- 관리자 이외의 사용자는
채팅
접두사로 시작하는 모든 주소로 메시지를 보낼 수 있습니다.
예 10.7. 메모리 사용 제한
고급 vhost 정책 특성을 사용하여 사용자 연결에 사용할 수 있는 시스템 버퍼 메모리 양을 제어할 수 있습니다.
이 예에서, 스톡 거래 사이트는 스테일러를 위한 서비스를 제공합니다. 그러나 사이트는 또한 높은 용량의 자동 데이터 피드를 수락해야합니다. 공급에 필요한 메모리를 소비하지 못하도록 거래 활동이 피드에 필요한 많은 양의 시스템 버퍼 메모리가 소비자보다 피드에 할당됩니다.
이 예에서는 maxSessions
및 maxSessionWindow
특성을 사용하여 각 AMQP 세션에 대한 버퍼 메모리 사용 제한을 설정합니다. 이러한 설정은 AMQP 연결 및 세션 협상으로 직접 전달되며 라우터에 처리 주기가 필요하지 않습니다.
이 예에서는 버퍼 할당과 관련이 없는 vhost 정책 설정이 표시되지 않습니다.
[ ["vhost", { "hostname": "traders.com", 1 "groups": { "traders": { "users": ["trader1", "trader2"], 2 "maxFrameSize": 10000, "maxSessionWindow": 5000000, 3 "maxSessions": 1 4 }, "feeds": { "users": ["nyse-feed", "nasdaq-feed"], 5 "maxFrameSize": 60000, "maxSessionWindow": 1200000000, 6 "maxSessions": 3 7 } } }] ]