第29章 セキュリティ

本章では、HornetQ でセキュリティがどのように動作するかについてとセキュリティの設定方法について説明します。
パフォーマンス上の理由から、セキュリティはキャッシュされ、定期的に検証されます。この期間を変更するには、プロパティ security-invalidation-interval (ミリ秒単位) を設定します。デフォルト値は 10000 ms です。

警告

セキュリティは、本番稼働システムのセキュリティが適切に設定された後に高くなるようデフォルトで有効になります。JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml ファイルで、明示的に security-enabled プロパティを false に設定することによりセキュリティを完全に無効にできます。本番稼働環境にこの方法を使用することは強く推奨されません。

29.1. アドレスに対するロールベースセキュリティ

HornetQ には、アドレスに基づいてセキュリティをキューに適用する柔軟なロールベースセキュリティモデルが含まれます。
7章コアの使用 で説明されたように、HornetQ コアは主にアドレスにバインドされたキューのセットから構成されます。メッセージはアドレスに送信され、サーバーはそのアドレスにバインドされたキューのセットをルックアップします。次に、サーバーはメッセージをキューのこれらのセットにルーティングします。
HornetQ では、アドレスに基づいてキューに対してパーミッションセットを定義できます。アドレスの完全一致を使用したり、ワイルドカード文字 '#' と '*' を使用してワイルドカード一致を使用したりできます。
アドレスに一致するキューセットに対して 7 つの異なるパーミッションを割り当てることができます。これらのパーミッションは以下のとおりです。
createDurableQueue
このパーミッションでは、ユーザーが、一致するアドレスに基づいて耐性キューを作成できます。
deleteDurableQueue
このパーミッションでは、ユーザーが、一致するアドレスに基づいて耐性キューを削除できます。
createNonDurableQueue
このパーミッションでは、ユーザーが、一致するアドレスに基づいて非耐性キューを作成できます。
deleteNonDurableQueue
このパーミッションでは、ユーザーが、一致するアドレスに基づいて非耐性キューを削除できます。
send
このパーミッションでは、ユーザーが、一致するアドレスにメッセージを送信できます。
consume
このパーミッションでは、ユーザーが、一致するアドレスにバインドされたキューからメッセージを消費できます。
manage
このパーミッションでは、管理メッセージを管理アドレスに送信することにより、ユーザーが管理操作を呼び出すことができます。
各パーミッションに対して、そのパーミッションが付与されたロールのリストが指定されます。ユーザーがこれらいずれかのロールを持つ場合、ユーザーには、アドレスセットに対するこのパーミッションが付与されます。
セキュリティブロック例は JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml で記述されています。
<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>
'#' 文字は、"任意の単語シーケンス" を示します。単語は '.' 文字で区切られます。ワイルドカード構文の完全な説明については、11章HornetQ ワイルドカード構文について を参照をしてください。上記のセキュリティブロックは、文字列 "globalqueues.europe." で始まる任意のアドレスに適用されます。
admin ロールを持つユーザーのみが文字列 "globalqueues.europe." で始まるアドレスにバインドされた耐性キューを作成または削除できます。
ロール adminguest、または europe-users を持つユーザーは、文字列"globalqueues.europe." で始まるアドレスにバインドされた一時キューを作成または削除できます。
ロール admin または europe-users を持つユーザーは、メッセージをこれらのアドレスに送信したり、文字列 "globalqueues.europe." で始まるアドレスにバインドされたキューからメッセージを消費したりできます。
ユーザーと、ユーザーが持つロール間のマッピングは、セキュリティマネージャーによって処理されます。HornetQ には、ディスクでファイルからユーザークレデンシャルを読み取るユーザーマネージャーが同梱され、JAAS または JBoss Enterprise Application Platform セキュリティをプラグインとして使用できます。
セキュリティマネージャーの設定の詳細については、「セキュリティーマネージャーの変更」 を参照してください。
各 XML ファイルには、ゼロ以上の security-setting 要素が含まれることがあります。複数の一致がアドレスセットに適用される場合は、より具体的な一致が実行されます。
<security-setting match="globalqueues.europe.orders.#">
   <permission type="send" roles="europe-users"/>
   <permission type="consume" roles="europe-users"/>
</security-setting>
この security-setting ブロックでは、一致 'globalqueues.europe.orders.#' は以前の一致 'globalqueues.europe.#' よりもより具体的です。したがって、'globalqueues.europe.orders.#' に一致する任意のアドレスは、最後の security-setting ブロックからのみセキュリティ設定を取得します。
設定は前のブロックから継承されないことに注意してください。すべての設定は、より具体的な一致ブロックから取得されます。したがって、アドレス 'globalqueues.europe.orders.plastics' の場合、存在するパーミッションはロール europe-users に対する sendconsume だけです。パーミッション createDurableQueuedeleteDurableQueuecreateNonDurableQueuedeleteNonDurableQueue は他の security-setting ブロックから継承されません。
パーミッションを継承しないことにより、より具体的な security-setting ブロックでパーミッションを効果的に拒否できます (パーミッションを指定しません)。これ以外の場合は、アドレスのサブグループでパーミッションを拒否できません。