検索

10.4. メッセージングエンドポイントの接続およびリソース制限の設定

download PDF

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 ポリシーの有効化」 を参照してください。

手順

  1. 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 ポリシーのみを指定できます。

    enableVhostNamePatternstrue に設定されている場合、ワイルドカードを使用してホスト名の範囲に一致するパターンを指定できます。詳細は、「vhost ポリシーホスト名パターン一致ルール」 を参照してください。

    aliases

    この vhost の設定を使用するようにルーターに指示する代替のリテラルホスト名またはパターン受信接続に一致するエイリアスホスト名には、vhost セクションで定義された設定が使用されます。マルチテナント設定では、vhost エイリアスへの接続はテナント namespace のベース vhost ホスト名を使用します。この例では、接続が vhost example.org に表示される場合、ベース vhost ホスト名 example.com の設定が適用され、example.com がテナントの名前空間になります。すべての vhosts の hostnamealiases の設定は一意でなければなりません。

    enableVhostNamePatternstrue に設定されている場合、ワイルドカードを使用してホスト名エイリアスの範囲に一致するパターンを指定できます。詳細は、「vhost ポリシーホスト名パターン一致ルール」 を参照してください。

    maxConnections
    この vhost で許可されている同時クライアント接続のグローバル最大数デフォルトは 65535 です。
    maxMessageSize
    この vhost へのコネクションに対して許可される AMQP メッセージ転送の最大サイズ (バイト単位)。この制限は、ポリシーの maxMessageSize 値を上書きし、vhost ユーザーグループの設定で上書きされる可能性があります。値が 0 の場合は、この制限が無効になります。
    maxConnectionsPerUser
    すべてのユーザーが許容される同時クライアント接続の最大数。デフォルトは 65535 です。
    maxConnectionsPerHost
    すべてのリモートホスト (クライアントが接続しているホスト) に対して許可される同時クライアント接続の最大数。デフォルトは 65535 です。
    allowUnknownUser
    不明なユーザー (定義されたユーザーグループのメンバーであるユーザー) が vhost への接続を許可するかどうか。不明なユーザーは、$default ユーザーグループに割り当てられ、$default 設定を受け取ります。デフォルトは false で、不明なユーザーには許可されないことを意味します。
  2. 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 アドレスを指定し、ユーザー名の置換とアドレスパターンをソースアドレスと同じように使用できます。
  3. 必要な場合は、vhost ユーザーグループに高度なユーザーグループ設定を追加します。

    高度なユーザーグループ設定では、AMQP コネクションのオープン、セッション開始、および接続のリンクアタッチフェーズに基づいて、リソース制限を定義できます。詳細は、man ページの qdrouterd.confvhost を参照してください。

10.4.3. JSON ファイルとしての vhost ポリシーの作成

ルーター設定ファイルを使用する代わりに、JSON ファイルで vhost ポリシーを設定できます。同じ vhost 設定を共有する必要がある複数のルーターがある場合には、各ルーターがアクセスできる場所に vhost 設定 JSON ファイルを配置することができ、これらの JSON ファイルで定義されている vhost ポリシーを適用するようにルーターを設定することができます。

前提条件

手順

  1. /etc/qpid-dispatch/qdrouterd.conf 設定ファイルで、vhost ポリシー定義 JSON ファイルを保存するディレクトリーを指定します。

    policy {
        ...
        policyDir: /etc/qpid-dispatch-policies
    }
    policyDir
    JSON 形式の vhost ポリシー定義ファイルを保持するディレクトリーへの絶対パス。ルーターは、このディレクトリーにある各 JSON ファイルで、すべての vhost ポリシーを処理します。
  2. 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 ロールを持つコネクターに適用することはできません。

前提条件

手順

  1. /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 ポリシーの作成」 を参照してください。
  2. コネクター 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:

各ユーザーに固有の一部のリソースへのアクセスを許可

${user} ユーザー名の置換トークンを使用します。このトークンを sourcetargetsourcePattern、および targetPattern で使用できます。

注記

AMQP アドレス名またはパターンで ${user} トークンを一度に指定できます。アドレスに複数のトークンがある場合は、左端のトークンのみが置き換えられます。

例10.4 ユーザー固有のアドレスから受信

この定義では、ユーザーグループのユーザーは、以下のいずれかのルールを満たすアドレスからメッセージを受信できます。

  • 接頭辞 tmp_ で開始し、ユーザー名で終わる
  • 接頭辞 temp で始まり、その後に追加の文字が続きます。
  • ユーザー名で始まり、-home- で始まり、追加の文字で終わります。
sources: tmp_${user}, temp*, ${user}-home-*

例10.5 ユーザー固有のアドレスパターン

この定義では、ユーザーグループのユーザーは、以下のいずれかのルールを満たすアドレスからメッセージを受信できます。

  • 接頭辞 tmp で開始し、ユーザー名で終わる
  • 接頭辞 temp で始まりゼロまたはそれ以上の文字が続きます。
  • ユーザー名で始まり、その後に home が続き、追加の文字が 1 つ以上終了されます。
sourcePattern: tmp.${user}, temp/#, ${user}.home/*
注記

アドレスパターン (sourcePattern または targetPattern) では、ユーザー名置換トークンはパターンの最初のトークンまたは最後のトークンのいずれかである必要があります。トークンは、コンマ区切りのフィールド内でのみ含まれる必要があります。つまり、リテラルテキスト接頭辞または接尾辞で連結できません。

10.4.6. vhost ポリシーホスト名パターン一致ルール

vhost ポリシーでは、ホスト名の範囲をカバーするリテラルホスト名またはパターンのいずれかを使用することができます。

ホスト名パターンとは、以下のワイルドカード文字が 1 つ以上ある単語シーケンスになります。

  • * 1 つの単語を表します。
  • # ゼロ以上の単語を表します。

以下の表には、ホスト名パターンの例を紹介しています。

このパターン以下に一致​以下には不一致

*.example.com

www.example.com

example.comsrv2.www.example.com

#.example.com

example.comwww.example.coma.b.c.d.example.com

myhost.com

www.*.test.example.com

www.a.test.example.com

www.test.example.comwww.a.b.c.test.example.com

www.#.test.example.com

www.test.example.comwww.a.test.example.comwww.a.b.c.test.example.com

test.example.com

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
管理者以外のユーザーは、newssports、または 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 グループには、trader1trader2 で定義されるその他のユーザーが含まれます。
3
最大 5,000 のデータ量として、各セッションで 5,000 のデータを処理できるようになります。
4
接続ごとに 1 つのセッションのみが許可されます。
5
feeds グループには 2 人のユーザーが含まれます。
6
大概の 1,200,000,000 バイトのデータは各セッションでフライトになります。
7
接続ごとに最大 3 つのセッションが許可されます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.