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 ポリシーは、リモートホストからルーターに接続するユーザーの接続制限およびリソース制限を定義します。リモートホストごとに 1 つの vhost ポリシーを作成する必要があります。
前提条件
ルーターに対して vhost ポリシーを有効にする必要があります。詳細は、「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 (メッセージングエンドポイント) のリテラルホスト名または vhost ホスト名に一致するパターンのリテラルホスト名。この vhost ポリシーは、指定したホスト名に転送されるクライアント接続に適用されます。この名前は一意でなければなりません。ホスト名ごとに 1 つの vhost ポリシーのみを指定できます。
enableVhostNamePatterns
がtrue
に設定されている場合、ワイルドカードを使用してホスト名の範囲に一致するパターンを指定できます。詳細は、「vhost ポリシーホスト名パターン一致ルール」 を参照してください。aliases
この vhost の設定を使用するようにルーターに指示する代替のリテラルホスト名またはパターン受信接続に一致するエイリアスホスト名には、vhost セクションで定義された設定が使用されます。マルチテナント設定では、vhost エイリアスへの接続はテナント namespace のベース vhost ホスト名を使用します。この例では、接続が vhost
example.org
に表示される場合、ベース vhost ホスト名example.com
の設定が適用され、example.com
がテナントの名前空間になります。すべての vhosts のhostname
とaliases
の設定は一意でなければなりません。enableVhostNamePatterns
がtrue
に設定されている場合、ワイルドカードを使用してホスト名エイリアスの範囲に一致するパターンを指定できます。詳細は、「vhost ポリシーホスト名パターン一致ルール」 を参照してください。maxConnections
- この vhost で許可されている同時クライアント接続のグローバル最大数デフォルトは 65535 です。
maxMessageSize
-
この vhost へのコネクションに対して許可される AMQP メッセージ転送の最大サイズ (バイト単位)。この制限は、ポリシーの
maxMessageSize
値を上書きし、vhost ユーザーグループの設定で上書きされる可能性があります。値が0
の場合は、この制限が無効になります。 maxConnectionsPerUser
- すべてのユーザーが許容される同時クライアント接続の最大数。デフォルトは 65535 です。
maxConnectionsPerHost
- すべてのリモートホスト (クライアントが接続しているホスト) に対して許可される同時クライアント接続の最大数。デフォルトは 65535 です。
allowUnknownUser
-
不明なユーザー (定義されたユーザーグループのメンバーであるユーザー) が vhost への接続を許可するかどうか。不明なユーザーは、
$default
ユーザーグループに割り当てられ、$default
設定を受け取ります。デフォルトはfalse
で、不明なユーザーには許可されないことを意味します。
vhost
セクションで、追加した接続設定の下に、group
エンティティーを追加して、リソース制限を定義します。ユーザーグループでリソース制限を定義します。ユーザーグループは、グループのメンバーがアクセス可能なメッセージングリソースを指定します。
以下の例は、admin、developer、および $default の 3 つのユーザーグループを示しています。
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" } } }
注記引用符を使用して文字列値を定義します。
users
- このユーザーグループに認証されたユーザーの一覧。複数のユーザーを分離する場合はコンマで区切ります。ユーザーは 1 つの vhost ユーザーグループにしか属することができません。
remoteHosts
-
ユーザーが接続できるリモートホストの一覧。ホストには、ホスト名、IP アドレス、または IP アドレス範囲を指定できます。複数のホストを分離する場合はコンマで区切ります。すべてのリモートホストからアクセスを許可するには、ワイルドカード
*
を指定します。すべてのリモートホストからアクセスを拒否するには、この属性を空白のままにします。 maxConnectionsPerUser
-
このユーザーグループでユーザーが作成できる接続の最大数。この値が指定されている場合には、vhost
maxConnectionsPerUser
の値が上書きされます。 maxConnectionsPerHost
-
許可されたリモートホストからこのユーザーグループのユーザーによって作成できる同時接続の最大数。この値が指定されている場合には、vhost
maxConnectionsPerUser
の値が上書きされます。 maxMessageSize
-
このグループのユーザーが作成したコネクションに許可される AMQP メッセージ転送の最大サイズ (バイト単位)。この制限により、ポリシーと vhost
maxMessageSize
の値が上書きされます。値が0
の場合は、この制限が無効になります。 allowDynamicSource
-
true
の場合、このグループのユーザーからの接続は受信側を動的ソースに割り当てることができます。これにより、リスナーが一時的なアドレスまたは一時キューに作成できるようになります。false
の場合、動的ソースの使用は許可されません。 allowAdminStatusUpdate
-
true
の場合、このグループのユーザーからの接続は、接続のadminStatus
を変更することが許可されます。これにより、送信者またはレシーバー接続の終了が許可されます。false
の場合、このグループのユーザーは、接続を終了できなくなります。ルーター間接続はどのユーザーでも終了できません。ポリシーが設定されていない場合でも、デフォルトはtrue
になります。 allowWaypointLinks
-
true
の場合、このグループ内のユーザーからの接続は、ポイントポイント機能を使ってリンクを割り当てることができます。これにより、エンドポイントが自動リンクを設定する必要なく、ポイント (ブローカー) として機能できるようになります。false
の場合は、ポイント機能の使用が許可されません。 allowDynamicLinkRoutes
-
true
の場合、このグループのユーザーからの接続は、接続スコープのリンクルートの宛先を動的に作成できます。これにより、エンドポイントはリンクルートの設定を必要とせずに、リンクルートの宛先 (ブローカー) として機能できます。false
の場合、動的リンクルートの宛先の作成は許可されません。 allowFallbackLinks
-
true
の場合、このグループのユーザーからの接続は、フォールバックリンク機能を使用してリンクを割り当てることができます。これにより、エンドポイントはフォールバックが有効にされているアドレスのフォールバック宛先 (およびソース) として動作します。false
の場合は、フォールバックリンク機能の使用は許可されません。 sources
|sourcePattern
このグループのユーザーがメッセージを受信する AMQP ソースアドレスのリスト。
sources
を使用して、1 つ以上のリテラルアドレスを指定します。複数のアドレスを指定するには、コンマ区切りリストを使用します。このグループのユーザーが任意のアドレスからメッセージを受信しないようにするには、この属性を空白のままにしておきます。特定のユーザー固有のアドレスへのアクセスを許可するには、${user}
トークンを指定します。詳細は、「vhost ポリシーのソースおよびターゲットアドレスを指定する方法」 を参照してください。または、
sourcePattern
を使用して、パターンに対応する 1 つ以上のアドレスと一致させることもできます。パターンは、.
または/
のいずれかで区切られた単語シーケンスです。ワイルドカード文字を使用して単語を表すことができます。*
文字は 1 つの単語にマッチし、#
文字はゼロ以上の単語のシーケンスと一致します。複数のアドレス範囲を指定するには、アドレスパターンのコンマ区切りリストを使用します。詳細は、を参照してください。特定のユーザーに固有の範囲へのアクセスを許可するには、
${user}
トークンを指定します。詳細は、xref:methods-specifying-vhost-policy-source-target-addresses-router-rhel[ を参照してください。targets
|targetPattern
- このグループのユーザーがメッセージを送信できる AMQP ターゲットアドレスのリスト。複数の AMQP アドレスを指定し、ユーザー名の置換とアドレスパターンをソースアドレスと同じように使用できます。
必要な場合は、vhost ユーザーグループに高度なユーザーグループ設定を追加します。
高度なユーザーグループ設定では、AMQP コネクションのオープン、セッション開始、および接続のリンクアタッチフェーズに基づいて、リソース制限を定義できます。詳細は、man ページの
qdrouterd.conf
で vhost を参照してください。
10.4.3. JSON ファイルとしての vhost ポリシーの作成
ルーター設定ファイルを使用する代わりに、JSON ファイルで vhost ポリシーを設定できます。同じ vhost 設定を共有する必要がある複数のルーターがある場合には、各ルーターがアクセスできる場所に vhost 設定 JSON ファイルを配置することができ、これらの JSON ファイルで定義されている vhost ポリシーを適用するようにルーターを設定することができます。
前提条件
- ルーターに対して vhost ポリシーを有効にする必要があります。詳細は、「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"] } } }] ]
これらの属性についての詳細は、「vhost ポリシーの作成」 を参照してください。
10.4.4. 送信接続のリソース制限の設定
ルーターが外部 AMQP コンテナーへの発信接続を確立する場合 (クライアントやブローカーなど)、外部コンテナーがコネクター vhost ポリシーを設定して、ルーターでアクセスできるリソースを制限することができます。
コネクター vhost ポリシーに定義されているリソース制限は、外部 AMQP コンテナーによって開始されるリンクに適用されます。コネクター vhost ポリシーはルーターが作成するリンクを制限しません。
コネクター vhost ポリシーは、normal
のロールまたは route-container
ロールを持つコネクターにのみ適用できます。コネクター vhost ポリシーを、inter-router
ロールまたは edge
ロールを持つコネクターに適用することはできません。
前提条件
- ルーターに対して vhost ポリシーを有効にします。詳細は、「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 ポリシーとして特定します。適用することのできるリソース制限の詳細は、「vhost ポリシーの作成」 を参照してください。
コネクター vhost ポリシーを外部 AMQP コンテナーへの接続を確立するコネクターに適用します。
以下の例では、前のステップで設定したコネクター vhost ポリシーを適用します。
connector { host: 192.0.2.10 port: 5672 role: normal policyVhost: my-connector-policy }
10.4.5. vhost ポリシーのソースおよびターゲットアドレスを指定する方法
vhost で複数のアドレスへのアクセスを許可または拒否する場合は、各アドレスを個別に指定せずに複数のアドレスに一致する方法が複数あります。
以下の表には、vhost ポリシーを使用して複数のソースおよびターゲットアドレスを指定するのに使用できるメソッドをまとめています。
以下を行う場合 | 以下を行います |
---|---|
ユーザーグループ内のすべてのユーザーがすべてのソースまたはターゲットアドレスにアクセスできるようにする |
例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 ポリシーでは、ホスト名の範囲をカバーするリテラルホスト名またはパターンのいずれかを使用することができます。
ホスト名パターンとは、以下のワイルドカード文字が 1 つ以上ある単語シーケンスになります。
-
*
1 つの単語を表します。 -
#
ゼロ以上の単語を表します。
以下の表には、ホスト名パターンの例を紹介しています。
このパターン | 以下に一致 | 以下には不一致 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
vhost ホスト名パターンの一致は、以下の優先順位ルールを適用します。
ポリシーパターン | 優先度 |
---|---|
完全一致 | 高 |
* | 中 |
# | 低 |
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
ユーザーグループのユーザーは、ローカルホストから接続する必要があります。admin ユーザーが他のホストから接続を試みると、接続は拒否されます。- 6
- admin ユーザーグループのユーザーは、任意のアドレスから受信できます。
- 7
- admin ユーザーグループのユーザーは任意のアドレスに送信できます。
- 8
- 管理者以外のユーザーは、どのホストからでも接続できるようになります。
- 9
- 管理者以外のユーザーは、
news
、sports
、またはchat
接頭辞で始まるアドレスからメッセージを受信できます。 - 10
- 管理者以外のユーザーは、
chat
接頭辞で始まる任意のアドレスにメッセージを送信できます。
例10.7 メモリー消費の制限
高度な vhost ポリシー属性を使用することで、ユーザー接続が消費できるシステムバッファーメモリーを制御することができます。
この例では、株式取引サイトで株式取引先責任者のサービスを提供します。ただし、サイトは high-capacity も受け入れる必要があり、株式エクスチェンジから自動データフィードも受け付ける必要があります。受信側がフィードに必要なメモリーを消費しないようにするため、通信者よりも新しいシステムバッファーメモリーはすべてフィードに割り当てられます。
この例では、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 } } }] ]
- 1
- この vhost ポリシーで定義されたルールは、
traders.com
へ接続するすべてのユーザーに適用されます。 - 2
traders
グループには、trader1
、trader2
で定義されるその他のユーザーが含まれます。- 3
- 最大 5,000 のデータ量として、各セッションで 5,000 のデータを処理できるようになります。
- 4
- 接続ごとに 1 つのセッションのみが許可されます。
- 5
feeds
グループには 2 人のユーザーが含まれます。- 6
- 大概の 1,200,000,000 バイトのデータは各セッションでフライトになります。
- 7
- 接続ごとに最大 3 つのセッションが許可されます。