web-dev-qa-db-ja.com

ActiveMQを保護する方法は?

ActiveMQのセキュリティ保護/強化の経験はありますか?チェックリストやガイドを歓迎します。

13
AaronS

私のオプションでは、メッセージサービスを実装する場合、少なくとも2つの要素を考慮する必要があります。これらは認証と承認です。

ブローカー認証

認証は、エンティティの完全性が損なわれていないことを確認するプロセスです。通常、これはパスワードを指定することによって行われます。 ActiveMQは [〜#〜] jaas [〜#〜] をサポートし、カスタムビルドの認証プラグインをサポートするAPIも備えています。

これを実装する最も簡単な方法は、ブローカーのxmlファイルを構成して、認証されたユーザーのみを許可することです。 xmlの<plugin>タグの下に配置できる例:

<simpleAuthenticationPlugin>
    <users>
        <authenticationUser username="admin" password="password"
        groups="admins,publishers,consumers"/>
    </users>
</simpleAuthenticationPlugin>

提供されるグループは、ユーザーの承認に役立ちます。一部のサービスを一部のユーザーグループにのみ許可する必要がある場合に非常に役立ちます。認証手順にはcreateConnection(username、password)メソッドを使用します。

ブローカーの承認

承認とは、エンティティが保護されたリソースにアクセスできるようにすることです。 [〜#〜] acl [〜#〜] を使用して実装されることがよくあります。次のサンプルXMLは、宛先で承認を提供します。

<authorizationPlugin>
    <map>
        <authorizationMap>
            <authorizationEntries>
                <authorizationEntry topic=">"
                    read="admins" write="admins"admin="admins" />
                <authorizationEntry topic="YourTopic.>"
                    read="consumers" write="publishers"
                    admin="publishers" />
                <authorizationEntry topic="YourTopic.Stats"
                    read="guests" />
            </authorizationEntries>
        </authorizationMap>
    </map>
</authorizationPlugin>

>ワイルドカードは、そのパスの下にあるものすべてに再帰的に認証スキームを提供することに注意してください。

メッセージレベルの認証

接続レベルではなくメッセージレベルで認証を追加すると便利な場合があります。これは、JavaクラスMessageAuthorizationPolicyを作成することによって行われ、メソッドを実装することを強制します)boolean isAllowedToConsume(ConnectionContextcontext、Message message)。ここでは、独自の認証クリテリを実装できます。

許可ポリシーを有効に活用するには、それをActiveMQセットアップにインストールして構成する必要があります。基本的には、次の手順で行われます。

  • クラスをJARファイルにコンパイルします
  • JARをApacheMQのlibフォルダーに配置します。
  • 適切なmessageAuthorizationPolicy要素を構成に追加します
  • ActiveMQを再起動します
11
Chris Dale

Chris Daleの回答 は、細かい点を除いて、ほとんど問題ありません。単に<simpleAuthenticactionPlugin>提案されているように、Webコンソールを使用してキューを参照してみてください(キューページに移動->参照をクリックしてください)。 "system"ユーザーが原因でエラーが発生します。

Stopping vm://localhost#0 because Failed with SecurityException: User name [system] or password is invalid.

Phillip's Blog で述べたように、正しく機能させるには、「システム」ユーザーも追加し、「credentials.properties」内の「activemq.password」タグを編集する必要があります。

したがって、<users />「システム」ユーザーを追加する必要があります:

<authenticationUser username="system" password="password" groups="admins,publishers,consumers"/>

次に、選択したパスワードに一致するように、「credentials.properties」を変更する必要があります。

activemq.password=password

答えを見つけるのが意外に難しいので、ここに投稿します。

3
Haroldo_OK