【问题标题】:ActiveMQ 5.15.9 SecurityActiveMQ 5.15.9 安全性
【发布时间】:2020-01-08 01:37:33
【问题描述】:

我目前正在使用部署在我们的测试服务器上的 ActiveMQ 5.15.9。 我必须实施某种安全措施,以便任何人都无法访问里面的队列。 到目前为止,我所做的是将以下内容添加到activemq.xml

<plugins>
    <simpleAuthenticationPlugin anonymousAccessAllowed ="false">
        <users>
            <authenticationUser
                username="admin"
                password="pass"
                groups="admins,publishers,consumers" />
        </users>
    </simpleAuthenticationPlugin>
    <authorizationPlugin>
        <map>
            <authorizationMap>
                <authorizationEntries>
                    <authorizationEntry topic =">" write="producers" read="consumers" admin="admins" />         
                    <authorizationEntry queue ="TEST.Q" write="producers" read="consumers" admin="admins" />
                </authorizationEntries>
            </authorizationMap>
        </map>
    </authorizationPlugin>
</plugins>

在我的 C# 中,这是访问队列的方式:

private static void SendNewMessageQueue(string text)
{
    string queueName = "TEST";
    Console.WriteLine($"Adding message to queue topic: {queueName}");
    string brokerUri = $"activemq:tcp://localhost:61616";  // Default port
    NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);
    using (IConnection connection = factory.CreateConnection("admin","pass"))
    {
        connection.Start();
        using (ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
            using (IDestination dest = session.GetQueue(queueName))
                using (IMessageProducer producer = session.CreateProducer(dest))
                {
                    producer.DeliveryMode = MsgDeliveryMode.NonPersistent;
                    producer.Send(session.CreateTextMessage(text));
                    Console.WriteLine($"Sent {text} messages");
                }
    }
}

但是当我尝试运行我的代码时,出现以下错误:

User admin is not authorized to write to: queue://TEST

我需要这个,以便我可以将此 MQ 公开到 Internet 并通过仅允许拥有凭据的消费者/发布者来保护它。

【问题讨论】:

    标签: java c# activemq


    【解决方案1】:

    您已为名为 TEST.Q 的队列配置了安全性,但您尝试使用名为 TEST 的队列,但该队列并不相同,因此您收到此错误。如果您想在测试前缀下公开所有队列,那么它看起来更像:

         <authorizationEntry queue ="TEST.>" write="producers" read="consumers" admin="admins" />
    

    有一些安全配置文档here,了解wildcard 语法也会有所帮助。

    正如您所提到的,通过互联网公开经纪人并非易事,因此请谨慎行事。

    【讨论】:

    • 我试过你的建议队列 ="TEST.>" 但仍然是同样的错误。我也试过 queue =">" 仍然是同样的错误。
    • 如果您仍然尝试单独为 TEST 下标,这就是问题所在,您需要匹配目标的路径,在本例中为 TEST。
    • 我如何知道队列的完整路径?
    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 2011-10-04
    • 2021-11-22
    • 1970-01-01
    • 2014-09-13
    • 2010-09-30
    • 2017-04-29
    相关资源
    最近更新 更多