5.3. クライアントの承認


5.3.1. クライアント承認方法

アドレスおよびキューの作成および削除、およびメッセージの送受信などのブローカーで操作を実行するためのクライアントを承認するには、以下の方法を使用できます。

ユーザーおよびロールベースの承認
認証されたユーザーおよびロールのブローカーセキュリティー設定を設定します。
クライアントを認証するように LDAP を設定
認証と承認の両方を処理するよう Lightweight Directory Access Protocol (LDAP) ログインモジュールを設定します。LDAP ログインモジュールは、中央の X.500 ディレクトリーサーバーに保存されているユーザーデータに対して受信認証情報をチェックし、ユーザーロールに基づいてパーミッションを設定します。
クライアントを認証するように Kerberos を設定する
Java Authentication and Authorization Service (JAAS) Krb5LoginModule ログインモジュールを設定して、Kerberos 認証ユーザーを AMQ Broker ロールにマップする PropertiesLoginModule または LDAPLoginModule ログインモジュールに認証情報を渡します。

5.3.2. ユーザーおよびロールベースの承認の設定

5.3.2.1. パーミッションの設定

パーミッションは、broker.xml 設定ファイルの <security-setting> 要素でキュー (アドレスに基づく) に対して定義されます。設定ファイルの <security-settings> 要素に <security-setting> のインスタンスを複数定義できます。アドレス完全一致を指定するか、数字記号 (#) およびアスタリスク (*) ワイルドカード文字を使用したワイルドカードの一致を定義できます。

アドレスに一致するキューのセットに異なるパーミッションを指定できます。これらのパーミッションを以下の表に示します。

表5.2 キューのパーミッション
ユーザーによるアクセス許可以下のパラメーター...

アドレスの作成

createAddress

アドレスの削除

deleteAddress

一致するアドレスの永続キューの作成

createDurableQueue

一致するアドレスの永続キューの削除

deleteDurableQueue

一致するアドレスの非永続キューの作成

createNonDurableQueue

一致するアドレスの非永続キューの削除

deleteNonDurableQueue

一致するアドレスへのメッセージの送信

send

一致するアドレスにバインドされたキューからのメッセージの消費

consume

管理アドレスに管理メッセージを送信して管理操作を呼び出します。

manage

一致するアドレスにバインドされるキューの参照

browse

一部の管理操作に対する読み取り専用アクセス権の付与

view

view パーミッションでアクセスが許可されない変更管理操作へのアクセス

edit

パーミッションごとに、パーミッションを付与されたロールのリストを指定します。指定のユーザーにロールがある場合は、そのアドレスセットのパーミッションが付与されます。

次のセクションでは、パーミッションの設定例を示します。

5.3.2.1.1. 単一アドレス向けメッセージ実稼働の設定

以下の手順では、単一のアドレスに対してメッセージの実稼働パーミッションを設定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <security-settings> 要素内に単一の <security-setting> 要素を追加します。match キーには、アドレスを指定します。以下に例を示します。

    <security-settings>
        <security-setting match="my.destination">
            <permission type="send" roles="producer"/>
        </security-setting>
    </security-settings>

    上記の設定に基づいて、producer ロールのメンバーにはアドレス my.destination送信 パーミッションが割り当てられています。

5.3.2.1.2. 単一アドレスのメッセージ消費の設定

以下の手順では、単一のアドレスに対してメッセージ消費パーミッションを設定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <security-settings> 要素内に単一の <security-setting> 要素を追加します。match キーには、アドレスを指定します。以下に例を示します。

    <security-settings>
        <security-setting match="my.destination">
            <permission type="consume" roles="consumer"/>
        </security-setting>
    </security-settings>

    上記の設定に基づいて、consumer ロールのメンバーには、アドレス my.destinationconsume パーミッションが割り当てられています。

5.3.2.1.3. すべてのアドレスでの完全なアクセスの設定

以下の手順では、すべてのアドレスおよび関連するキューへの完全アクセスを設定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <security-settings> 要素内に単一の <security-setting> 要素を追加します。match キーの場合は、 アドレスへのアクセスを設定するには、番号記号 (#) ワイルドカード文字を指定します。以下に例を示します。

    <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 ロールのメンバーに、全パーミッションが付与されます。これは、すべてのユーザーに guest ロールを割り当てるように匿名認証を設定する開発のシナリオで役に立ちます。

関連情報

5.3.2.1.4. 複数のセキュリティー設定の設定

以下の手順の例は、一致するアドレスセットに複数のセキュリティー設定を個別に設定する方法を示しています。ここでは、このセクションの上記の例とは対照的で、すべて のアドレスに アクセスを付与する方法を説明します。

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <security-settings> 要素内に単一の <security-setting> 要素を追加します。match キーの場合は、一致するアドレス セット に設定を適用する番号記号 (#) ワイルドカード文字を含めます。以下に例を示します。

    <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 で始まるアドレスにバインドされた永続キューを作成したり、削除したりできます。
    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 で始まるアドレスにバインドされたキューからメッセージを消費できます。
  3. (オプション) 異なるセキュリティー設定をアドレスのより限定的なセットに適用するには、別の <security-setting> 要素を追加します。match キーには、より具体的なテキスト文字列を指定します。以下に例を示します。

    <security-setting match="globalqueues.europe.orders.#">
       <permission type="send" roles="europe-users"/>
       <permission type="consume" roles="europe-users"/>
    </security-setting>

    2 つ目の security-setting 要素では、globalqueues.europe.orders.# の照合は、最初の security-setting 要素で指定した globalqueues.europe.# 照合に比べると、具体的です。globalqueues.europe.orders.# に一致するアドレスの場合には、createDurableQueuedeleteDurableQueuecreateNonDurableQueuedeleteNonDurableQueue はファイルの最初の security-setting 要素から継承され ません。たとえば、globalqueues.europe.orders.plastics アドレスの場合には、存在するパーミッションは、ロール europe-userssendconsume のみです。

    したがって、ある security-setting ブロックで指定されたパーミッションは、別のブロックに継承されないため、これらのアクセス許可を指定しないだけで、より詳細な security-setting ブロックのパーミッションを効果的に拒否できます。

5.3.2.1.5. ユーザーでのキューの設定

キューが自動的に作成されると、キューには接続クライアントのユーザー名が割り当てられます。このユーザー名は、キューのメタデータとして含まれます。名前は JMX および AMQ Broker 管理コンソールで公開されます。

以下の手順では、ブローカー設定で手動で定義したキューにユーザー名を追加する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 指定のキューに、ユーザー キーを追加します。値を割り当てます。以下に例を示します。

    <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 Enterprise Application Platform(JBoss EAP) のセキュリティーとの統合を提供します。

    カスタム セキュリティーマネージャーの使用方法は、「カスタムセキュリティーマネージャーの指定」 を参照してください。

5.3.2.2. ロールベースのアクセス制御の設定

ロールベースのアクセス制御 (RBAC) は、MBean の属性とメソッドへのアクセスを制限するために使用されます。MBean は、管理操作をサポートするために、AMQ Broker が管理 API を公開する際に使用する手段です。

次のいずれかの方法を使用して、MBean へのアクセスを制限できます。

  • management.xml ファイルで authorisation 要素を設定します。これがデフォルトの方法です。
  • broker.xml ファイルでセキュリティー設定を設定します。

broker.xml ファイルでセキュリティー設定を変更した後は、management.xml ファイルを更新する場合とは異なり、ブローカーを再起動する必要はありません。

5.3.2.2.1. management.xml ファイルでロールベースのアクセス制御を設定する

管理操作に対するロールベースのアクセス制御を設定するデフォルトの方法は、management.xml ファイルで authorization 要素を設定することです。

以下の手順の例は、ロールを特定の MBean とその属性およびメソッドにマッピングする方法を示しています。

前提条件

手順

  1. <broker_instance_dir>/etc/management.xml 設定ファイルを開きます。
  2. 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 の MBean 属性を照合検索します。
    • 一致する MBean 属性に対する viewupdate、または amq ロールへのアクセスは、ロールを追加する list*get*set*is*、および * アクセスメソッドによって制御されます。method = "*"(ワイルドカード) 構文は、設定にリストされていない他の前メソッドをすべて指定する方法として使用されます。設定の各アクセスメソッドが MBean メソッド呼び出しに変換されます。
    • 呼び出された MBean メソッドは、設定に記載されているメソッドと照合されます。たとえば、ドメインが org.apache.activemq.artemis の MBean で listMessages というメソッドを呼び出すと、ブローカーは list メソッドの設定で定義されたロールと、アクセスの照合を行います。
    • MBean の完全なメソッド名を使用してアクセスを設定することもできます。以下に例を示します。

      <access method="listMessages" roles="view,update,amq"/>
  3. ブローカーを起動または再起動します。

    • Linux の場合: <broker_instance_dir>/bin/artemis run
    • Windows の場合: <broker_instance_dir>\bin\artemis-service.exe start

      MBean プロパティーに一致する key 属性を追加して、ドメイン内の特定の MBean を照合することもできます。

5.3.2.2.1.1. ロールベースのアクセスの例

このセクションでは、ロールベースのアクセス制御を適用する以下の例を説明します。

以下の例は、key 属性を使用して、指定したドメインのすべてのキューにロールをマッピングする方法を示しています。

<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>

以下の例は、key 属性を使用して、特定の名前付きキューにロールをマッピングする方法を示しています。この例では、名前付きキューは exampleQueue です。

<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>

以下の例は、指定した接頭辞が含まれるすべてのキューにロールをマップする方法を示しています。この例では、アスタリスク (*) のワイルドカード演算子を使用して、接頭辞 example で始まるすべてのキュー名を照合します。

<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 要素を含めることができます。ただし、同じドメイン内に複数の一致がある可能性があります。

たとえば、以下のように設定された 2 つ <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 という名前のキューは、両方のワイルドカードキーの式にマッチします。したがって、ブローカーは、最初の match 要素で指定されたロール、または 2 番目の match 要素で指定されたロールなど、キューにマップするロールのセットを決定するための優先順位付けスキームを必要とします。

同じドメインに複数の一致がある場合、ブローカーはロールのマッピング時に以下の優先順位スキームを使用します。

  • 完全一致がワイルドカードの一致よりも優先される
  • ワイルドカードのより長い一致が、より短いワイルドカード一致よりも優先されます。

この例では、長いワイルドカード式が example.sub.queue のキュー名と一致するため、ブローカーは 2 番目の <match> 要素に設定された role-mapping を適用します。

注記

default-access 要素は、role-access または whitelist 設定で処理されないすべてのメソッド呼び出しをすべて受け入れる要素です。default-access 要素および role-access 要素には、match 要素と同じセマンティクスがあります。

5.3.2.2.1.2. allowlist 要素の設定

allowlist は、ユーザー認証を必要としない事前承認済みのドメインまたは MBean のセットです。認証を省略する必要のあるドメインのリストまたは MBean のリスト、またはその両方を指定できます。たとえば、allowlist を使用して、AMQ Broker 管理コンソールの実行に必要な MBean を指定できます。

以下の手順の例は、allowlist 要素を設定する方法を示しています。

手順

  1. <broker_instance_dir>/etc/management.xml 設定ファイルを開きます。
  2. allowlist 要素を検索し、設定を編集します。

    <allowlist>
       <entry domain="hawtio"/>
    </allowlist>

    この例では、ドメインが hawtio の MBean が、認証なしでアクセスできます。MBean プロパティーに一致させるために <entry domain="hawtio" key="type=*"/> 形式のワイルドカードエントリーを使用することもできます。

  3. ブローカーを起動または再起動します。

    • Linux の場合: <broker_instance_dir>/bin/artemis run
    • Windows の場合: <broker_instance_dir>\bin\artemis-service.exe start
5.3.2.2.2. broker.xml ファイルでロールベースのアクセス制御を設定する

管理操作に対するロールベースのアクセス制御は、management.xml ファイルの代わりに、broker.xml ファイルで設定することもできます。broker.xml ファイル内のパーミッションの更新を有効にするために、ブローカーを再起動する必要はありません。

broker.xml ファイルでは、管理操作の view または edit パーミッションを付与できます。view または edit パーミッションを持つロールで使用できる特定の管理操作は、事前定義された正規表現によって制御されます。view パーミッションを持つロールからは、正規表現に一致するすべての操作にアクセスできます。その他のすべての操作には、edit パーミッションが必要です。

前提条件

手順

  1. ブローカーがこのファイル内のデフォルトの RBAC 設定を使用しないようにするために、management.xml ファイルから authorisation 要素の設定を削除します。

    1. <broker_instance_dir>/etc/management.xml ファイルを編集します。
    2. ファイルから authorisation 要素の設定を削除します。
    3. <broker_instance_dir>/etc/management.xml ファイルを編集します。
  2. ブローカー JVM に環境変数を追加して、ブローカーが broker.xml ファイル内の RBAC 設定を使用するように設定します。

    1. <broker_instance_dir>/etc/artemis.profile ファイルを開きます。
    2. Java システム引数の JAVA_ARGS list に次の引数を追加します。

      -Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder

    3. artemis.profile ファイルを保存します。
  3. 管理操作に対する RBAC を設定するために、<broker_instance_dir>/etc/broker.xml ファイルを開きます。
  4. security-settings 要素を検索し、管理操作用の security-setting 要素を追加します。

    管理操作のアドレス一致の形式は次のとおりです。

    <_management-rbac-prefix_>.<_resource type_>.<_resource name_>.<_operation_>

    management-rbac-prefix パラメーターのデフォルト値は mops です。

    次の RBAC 設定の例では、アドレス一致内の番号記号 (#) により、admin ロールにすべての MBean に対する view および edit パーミッションが付与されます。

    <security-settings>
      ..
      <security-setting match="mops.#">
       <permission type="view" roles="admin"/>
       <permission type="edit" roles="admin"/>
      </security-setting>
      ..
    </security-setting>
  5. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。

管理操作に対するロールベースのアクセス制御のその他の例

次の例では、manager ロールに、アドレス activemq.management に対する view および edit パーミッションを付与します。操作の位置にアスタリスク (*) を指定することで、すべての操作へのアクセスが許可されます。

<security-setting match="mops.address.activemq.management.*">
   <permission type="view" roles="manager"/>
</security-setting>

次の例では、空のロールリストを使用しています。これにより、すべてのユーザーに対して、ブローカー MBean を使用した指定の操作 (forceFailover) を実行するパーミッションを拒否します。

<security-setting match="mops.broker.forceFailover">
   <permission type="edit" roles=""/>
</security-setting>

5.3.2.3. リソース制限の設定

承認や認証に関連する通常のセキュリティー設定以外に、特定のユーザーが実行できる特定の制限を設定すると便利です。

5.3.2.3.1. 接続およびキュー制限の設定

以下の手順の例は、ユーザーが作成できる接続およびキューの数を制限する方法を示しています。

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 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 クライアントからブローカーへの接続ごとに 2 つのセッションが作成されることを考慮してください。
    max-queues
    一致したユーザーが作成できるキューの数を定義します。デフォルトは -1 で、制限がないことを意味します。
注記

ブローカー設定の address-setting 要素に指定できる match 文字列とは異なり、resource-limit-settings で指定した match 文字列はワイルドカード構文を使用することは できません。代わりに、match 文字列は、リソース制限の設定が適用される特定のユーザーを定義します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.