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.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>
上記の設定に基づいて、
producer
ロールのメンバーにはアドレス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
のconsume
パーミッションが割り当てられています。
5.3.2.1.3. すべてのアドレスでの完全なアクセスの設定
以下の手順では、すべてのアドレスおよび関連するキューへの完全アクセスを設定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <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. 複数のセキュリティー設定の設定
以下の手順の例は、一致するアドレスセットに複数のセキュリティー設定を個別に設定する方法を示しています。ここでは、このセクションの上記の例とは対照的で、すべて のアドレスに 全 アクセスを付与する方法を説明します。
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <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 で始まるアドレスにバインドされたキューからメッセージを消費できます。
(オプション) 異なるセキュリティー設定をアドレスのより限定的なセットに適用するには、別の
<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.#
に一致するアドレスの場合には、createDurableQueue
、deleteDurableQueue
、createNonDurableQueue
、deleteNonDurableQueue
はファイルの最初のsecurity-setting
要素から継承され ません。たとえば、globalqueues.europe.orders.plastics
アドレスの場合には、存在するパーミッションは、ロールeurope-users
のsend
とconsume
のみです。したがって、ある
security-setting
ブロックで指定されたパーミッションは、別のブロックに継承されないため、これらのアクセス許可を指定しないだけで、より詳細なsecurity-setting
ブロックのパーミッションを効果的に拒否できます。
5.3.2.1.5. ユーザーでのキューの設定
キューが自動的に作成されると、キューには接続クライアントのユーザー名が割り当てられます。このユーザー名は、キューのメタデータとして含まれます。名前は JMX および AMQ Broker 管理コンソールで公開されます。
以下の手順では、ブローカー設定で手動で定義したキューにユーザー名を追加する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 指定のキューに、
ユーザー
キーを追加します。値を割り当てます。以下に例を示します。<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 とその属性およびメソッドにマッピングする方法を示しています。
前提条件
- ユーザーとロールを定義した。詳細は、「基本的なユーザーとパスワード認証の設定」 を参照してください。
手順
-
<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
の MBean 属性を照合検索します。 -
一致する MBean 属性に対する
view
、update
、またはamq
ロールへのアクセスは、ロールを追加するlist*
、get*
、set*
、is*
、および*
アクセスメソッドによって制御されます。method = "*"
(ワイルドカード) 構文は、設定にリストされていない他の前メソッドをすべて指定する方法として使用されます。設定の各アクセスメソッドが MBean メソッド呼び出しに変換されます。 -
呼び出された MBean メソッドは、設定に記載されているメソッドと照合されます。たとえば、ドメインが
org.apache.activemq.artemis
の MBean でlistMessages
というメソッドを呼び出すと、ブローカーはlist
メソッドの設定で定義されたロールと、アクセスの照合を行います。 MBean の完全なメソッド名を使用してアクセスを設定することもできます。以下に例を示します。
<access method="listMessages" roles="view,update,amq"/>
-
この場合、ドメイン名が
ブローカーを起動または再起動します。
-
Linux の場合:
<broker_instance_dir>/bin/artemis run
Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
MBean プロパティーに一致する
key
属性を追加して、ドメイン内の特定の MBean を照合することもできます。
-
Linux の場合:
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
要素を設定する方法を示しています。
手順
-
<broker_instance_dir>/etc/management.xml
設定ファイルを開きます。 allowlist
要素を検索し、設定を編集します。<allowlist> <entry domain="hawtio"/> </allowlist>
この例では、ドメインが
hawtio
の MBean が、認証なしでアクセスできます。MBean プロパティーに一致させるために<entry domain="hawtio" key="type=*"/>
形式のワイルドカードエントリーを使用することもできます。ブローカーを起動または再起動します。
-
Linux の場合:
<broker_instance_dir>/bin/artemis run
-
Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
-
Linux の場合:
5.3.2.2.2. broker.xml
ファイルでロールベースのアクセス制御を設定する
管理操作に対するロールベースのアクセス制御は、management.xml
ファイルの代わりに、broker.xml
ファイルで設定することもできます。broker.xml
ファイル内のパーミッションの更新を有効にするために、ブローカーを再起動する必要はありません。
broker.xml
ファイルでは、管理操作の view
または edit
パーミッションを付与できます。view
または edit
パーミッションを持つロールで使用できる特定の管理操作は、事前定義された正規表現によって制御されます。view
パーミッションを持つロールからは、正規表現に一致するすべての操作にアクセスできます。その他のすべての操作には、edit
パーミッションが必要です。
前提条件
- ユーザーとロールを定義した。詳細は、「基本的なユーザーとパスワード認証の設定」 を参照してください。
手順
ブローカーがこのファイル内のデフォルトの RBAC 設定を使用しないようにするために、
management.xml
ファイルからauthorisation
要素の設定を削除します。-
<broker_instance_dir>/etc/management.xml
ファイルを編集します。 -
ファイルから
authorisation
要素の設定を削除します。 -
<broker_instance_dir>/etc/management.xml
ファイルを編集します。
-
ブローカー JVM に環境変数を追加して、ブローカーが
broker.xml
ファイル内の RBAC 設定を使用するように設定します。-
<broker_instance_dir>/etc/artemis.profile
ファイルを開きます。 Java システム引数の
JAVA_ARGS list
に次の引数を追加します。-Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder
-
artemis.profile
ファイルを保存します。
-
-
管理操作に対する RBAC を設定するために、
<broker_instance_dir>/etc/broker.xml
ファイルを開きます。 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>
-
<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. 接続およびキュー制限の設定
以下の手順の例は、ユーザーが作成できる接続およびキューの数を制限する方法を示しています。
-
<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
で、制限がないことを意味します。セッション数を制限する場合は、AMQ Core Protocol JMS クライアントからブローカーへの接続ごとに 2 つのセッションが作成されることを考慮してください。 max-queues
-
一致したユーザーが作成できるキューの数を定義します。デフォルトは
-1
で、制限がないことを意味します。
ブローカー設定の address-setting
要素に指定できる match
文字列とは異なり、resource-limit-settings
で指定した match
文字列はワイルドカード構文を使用することは できません。代わりに、match 文字列は、リソース制限の設定が適用される特定のユーザーを定義します。