> But can users be created (and deleted) on-demand? I'm not exactly sure what you mean by "on-demand," but users can be created administratively on a running broker via management. This can be done via the "artemis user" command, the web console, Jolokia, etc. You'll need to use the PropertiesLoginModule [1] with the JAAS security manager [2] (i.e. the default configuration) or the "Basic" security manager [3].
You could also likely accomplish this via LDAP [4]. > And is there a practical limit? There is no arbitrarily imposed limit so any limit will be based on the resources available to the broker. My recommendation would be to test and see. > An alternative solution would be to use some kind of proxy between the broker and the consumer which allows access to certain queues only. Does something like this exist? I'm not aware of anything like this, and I would be surprised if it existed as it would add needless complexity on top of something that could already be accomplished via the broker directly or via LDAP. Justin [1] https://activemq.apache.org/components/artemis/documentation/latest/security.html#propertiesloginmodule [2] https://activemq.apache.org/components/artemis/documentation/latest/security.html#jaas-security-manager [3] https://activemq.apache.org/components/artemis/documentation/latest/security.html#basic-security-manager [4] https://activemq.apache.org/components/artemis/documentation/latest/security.html#ldaploginmodule On Thu, Apr 28, 2022 at 7:59 AM Thorsten Meinl <thorsten.me...@knime.com> wrote: > We have a more complicated scenario where we use Artemis and are > currently struggling with some security-related problems. Let me try to > sketch our setup: > > - Several producers put work items into queues in Artemis. Every > producer uses a dedicated queue, e.g. "jobs.123" where 123 is the > unique producer name. > - We create consumers on-demand for every producer, i.e. for producer > "123" there is a consumer "123" that is consuming from queu "jobs.123". > - The consumers are started in containers and get the access > credentials for Artemis passed as environment variables. All consumers > share the same credentials and therefore have access to all queues. > - Now comes the crucial part: the consumers essentially allow for > arbitrary code execution. This is not an issue per se because they are > restricted to the container. But a carefully crafted work item allows > you to read the container's environment variables, create a consumer > and read *any* message including work items which are not supposed to > be read by the current consumer. E.g. the rogue consumer "123" can then > read messages addressed to consumer "456". This compromises > confidentiality. > > Now we are looking for solutions to this problem. We have to ensure > that consumer XYZ can only read messages addressed to it (i.e. > "jobs.XYZ") and nothing else. I guess this would be possible by > creating dedicated Artemis users for each consumer and setting > permissions accordingly. But can users be created (and deleted) on- > demand? And is there a practical limit? We would need hundreds if not > thousands of Artemis users. > > An alternative solution would be to use some kind of proxy between the > broker and the consumer which allows access to certain queues only. > Does something like this exist? > > Are there any other solutions that may think of? > > I know it's a very generic question but maybe some of you have ideas > that they can share. > > Thanks, > > Thorsten > > -- > Dr.-Ing. Thorsten Meinl > KNIME AG > Hardturmstrasse 66 > 8005 Zurich, Switzerland > >