7.2. 宛先のセキュリティー保護

メッセージングサーバーへのリモート接続のセキュリティーを保護する他に、特定の宛先のセキュリティーを設定することもできます。この設定をする場合は、security-setting 設定要素を使用してセキュリティー制約を追加します。JBoss EAP メッセージングには、以下の管理 CLI コマンドの出力のような security-setting がデフォルトで設定されています。

/subsystem=messaging-activemq/server=default:read-resource(recursive=true)
{
    "outcome" => "success",
    "result" => {
        ....
        "security-setting" => {"#" => {"role" => {"guest" => {
            "consume" => true,
            "create-durable-queue" => false,
            "create-non-durable-queue" => true,
            "delete-durable-queue" => false,
            "delete-non-durable-queue" => true,
            "manage" => false,
            "send" => true
        }}}}
    }
}

security-setting オプションでは、name フィールドにワイルドカードを使用して、セキュリティー制約を適用する宛先を指定できます。# 1 つでアドレスが任意であることを表します。セキュリティー制約でのワイルドカードの使用に関する詳細は、「アドレスのロールベースのセキュリティー」を参照してください。

7.2.1. アドレスのロールベースのセキュリティー

JBoss EAP メッセージングでは、アドレスに基づいてキューにセキュリティーを適用する、柔軟なロールベースのセキュリティーモデルを採用しています。

コア JBoss EAP メッセージングサーバーは、主にアドレスにバインドされたキューのセットで構成されます。メッセージをアドレスに送信すると、サーバーはまずそのアドレスにバインドされたキューのセットをルックアップし、そのメッセージをバインドされたキューに転送します。

JBoss EAP メッセージングには、アドレスに基づいてキューに適用できる一連のパーミッションがあります。アドレスの文字列の完全一致を使用することができます。または、ワイルドカード文字 #* を使ったワイルドカード一致を使用することも可能です。ワイルドカード構文の使用方法の詳細は、「アドレス設定」を参照してください。

security-setting ごとに複数のロールを作成できます。またロールに適用できるパーミッション設定は 7 つあります。利用可能なパーミッションの全リストは次のとおりです。

  • create-durable-queue は、一致するアドレスの永続キューの作成をロールに許可します。
  • delete-durable-queue は、一致するアドレスの永続キューの削除をロールに許可します。
  • create-non-durable-queue は、一致するアドレスの非永続キューの作成をロールに許可します。
  • delete-non-durable-queue は、一致するアドレスの非永続キューの削除をロールに許可します。
  • Send は、一致するアドレスへのメッセージの送信をロールに許可します。
  • consume は、一致するアドレスにバインドされたキューからのメッセージの消費をロールに許可します。
  • manage は、管理アドレスに管理メッセージを送信して管理操作を起動することをロールに許可します。
ロールベースのセキュリティーの設定

security-setting にロールベースのセキュリティーを使用するには、最初に security-setting を作成する必要があります。たとえば、次のように news.europe.#security-setting を作成します。これは news.europe.frnews.europe.tech.uk などの news.europe. から始まる宛先に適用されます。

/subsystem=messaging-activemq/server=default/security-setting=news.europe.#:add()
{"outcome" => "success"}

次に、作成した security-setting にロールを追加し、そのロールのパーミッションを宣言します。以下の例では、dev ロールが作成され、キューからの消費とキューへの送信のパーミッションが付与されます。また非永続キューの作成と削除も同様です。デフォルトは false であるため、オンにするパーミッションのみを JBoss EAP に指示する必要があります。

/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=dev:add(consume=true,delete-non-durable-queue=true,create-non-durable-queue=true,send=true)
{"outcome" => "success"}

パーミッションの使用方法を詳しく説明すると、以下の例では admin ロールを作成し、manage パーミッションをオンにして管理メッセージを送信できるようにします。永続的なキューの作成と削除を行うためのパーミッションもオンにします。

/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=admin:add(manage=true,create-durable-queue=true,delete-durable-queue=true)
{"outcome" => "success"}

security-setting の設定を確認するには、管理 CLI を使用します。recursive=true オプションを使用して、パーミッションの全体表示を指定することを忘れないでください。

/subsystem=messaging-activemq/server=default:read-children-resources(child-type=security-setting,recursive=true)
{
    "outcome" => "success",
    "result" => {
        "#" => {"role" => {"guest" => {
            "consume" => true,
            "create-durable-queue" => false,
            "create-non-durable-queue" => true,
            "delete-durable-queue" => false,
            "delete-non-durable-queue" => true,
            "manage" => false,
            "send" => true
        }}},
        "news.europe.#" => {"role" => {
            "dev" => {
                "consume" => true,
                "create-durable-queue" => false,
                "create-non-durable-queue" => true,
                "delete-durable-queue" => false,
                "delete-non-durable-queue" => true,
                "manage" => false,
                "send" => true
            },
            "admin" => {
                "consume" => false,
                "create-durable-queue" => true,
                "create-non-durable-queue" => false,
                "delete-durable-queue" => true,
                "delete-non-durable-queue" => false,
                "manage" => true,
                "send" => false
            }
        }}
    }

上記の例では、文字列 news.europe. から始まるアドレスのパーミッションはすべて、管理 CLI で表示されます。要約すると、admin ロールを持つユーザーのみが永続キューの作成または削除を行うことができます。また、dev ロールを持つユーザーのみが非永続キューの作成または削除を行うことができます。さらに、dev ロールを持つユーザーは、メッセージを送信または消費できますが、admin ユーザーはできません。ただし、manage パーミッションが true に設定されているため、管理メッセージは送信できます。

アドレスのセットに複数の一致が当てはまる場合は、より限定的な一致が優先されます。たとえば、news.europe.tech.uk.# アドレスは news.europe.tech.# よりも限定的です。パーミッションは継承されないため、指定しないだけで、より限定的な security-setting ブロックのパーミッションを効果的に拒否することができます。それ以外の方法では、アドレスのサブグループのパーミッションを拒否することはできません。

ユーザーと、ユーザーが持つロールのマッピングは、セキュリティーマネージャーが管理します。JBoss EAP には、ディスク上のファイルからユーザーの認証情報を読み取るユーザーマネージャーが含まれています。ユーザーマネージャーは JAAS または JBoss EAP セキュリティーにプラグインすることもできます。

セキュリティーマネージャーの設定の詳細は、JBoss EAP 『セキュリティーアーキテクチャー』ガイドを参照してください。

7.2.1.1. レガシーセキュリティーサブシステムを使用した非認証クライアントのゲストロールの許可

認証されていないクライアントを JBoss EAP に自動許可させる必要がある場合、guest ロールでは以下の 2 つの変更を行います。

  1. 新しい module-optionother セキュリティードメインに追加します。新しいオプションの unauthenticatedIdentity は、認証されていないクライアントに guest アクセスを許可するよう JBoss EAP に指示します。これは管理 CLI を使用して実施することを推奨します。

    /subsystem=security/security-domain=other/authentication=classic/login-module=RealmDirect:map-put(name=module-options,key=unauthenticatedIdentity,value=guest)
    {
       "outcome" => "success",
       "response-headers" => {
           "operation-requires-reload" => true,
           "process-state" => "reload-required"
       }
    }

    コマンドを発行した後にサーバーのリロードが必要なことに注意してください。以下の管理 CLI コマンドを使用すると新しいオプションを確認できます。

    /subsystem=security/security-domain=other/authentication=classic/login-module=RealmDirect:read-resource()
    {
        "outcome" => "success",
        "result" => {
            "code" => "RealmDirect",
            "flag" => "required",
            "module" => undefined,
            "module-options" => {
                "password-stacking" => "useFirstPass",
                "unauthenticatedIdentity" => "guest"
            }
        }
    }

    またサーバー設定ファイルは、コマンドの実行後に以下のようになります。

    <subsystem xmlns="urn:jboss:domain:security:2.0">
      <security-domains>
        <security-domain name="other" cache-type="default">
           <authentication>
             ...
             <login-module code="RealmDirect" flag="required">
                ...
                <module-option name="unauthenticatedIdentity" value="guest"/>
                ...
             </login-module>
             ...
           </authentication>
        </security-domain>
      ...
      </security-domains>
    </subsystem>
  2. # 文字を削除し、application-roles.properties ファイルの以下の行をコメント解除します。ファイルは EAP_HOME/standalone/configuration/ または EAP_HOME/domain/configuration/ のいずれかにあります。これは、スタンドアロンサーバー、ドメインコントローラーのいずれを使用しているかに応じて異なります。

    #guest=guest

これで、リモートクライアントは認証せずにサーバーにアクセスできるようになりました。guest ロールに関連するパーミッションが付与されます。