Qualcuno ha esperienza con la protezione / protezione di ActiveMQ? Check list o guide sarebbero i benvenuti.
Nella mia opzione è necessario pensare ad almeno due fattori durante l'implementazione dei servizi di messaggio. Questi sono autenticazione e autorizzazione.
L'autenticazione è il processo per assicurarsi che l'integrità dell'entità sia intatta. Di solito questo viene fatto fornendo una password. ActiveMQ supporta JAAS e ha anche un'API che supporta plug-in di autenticazione personalizzati.
Il modo più semplice per implementare questo è configurare il file xml del broker per consentire solo agli utenti autenticati. Esempio che potrebbe essere inserito sotto il tag <plugin>
nel tuo xml:
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="password"
groups="admins,publishers,consumers"/>
</users>
</simpleAuthenticationPlugin>
I gruppi forniti saranno utili per l'autorizzazione dell'utente. Molto utile quando è necessario consentire solo alcuni servizi ad alcuni gruppi di utenti. Utilizzare il metodo createConnection (username, password) per la procedura di autenticazione.
L'autorizzazione consiste nel consentire a un'entità l'accesso a una risorsa protetta. Spesso implementato con l'aiuto di ACL . Il seguente esempio di XML fornirà l'autorizzazione su una destinazione:
<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>
Tieni presente che > wild card fornisce lo schema di autorizzazione in modo ricorsivo a qualsiasi cosa sotto quel percorso.
A volte può essere utile aggiungere un'autorizzazione a livello di messaggio anziché a livello di connessione. Questo viene fatto creando una classe java MessageAuthorizationPolicy costringendoti così ad implementare il metodo booleano isAllowedToConsume (ConnectionContextcontext, Message message) . Qui puoi implementare i tuoi critici di autorizzazione.
Per utilizzare correttamente la politica di autorizzazione è necessario installarla e configurarla nella configurazione di ActiveMQ. In linea di massima viene effettuata tramite questi passaggi:
La risposta di Chris Dale è praticamente azzeccata, tranne che per un piccolo dettaglio: se usi solo la <simpleAuthenticactionPlugin>
come suggerito, e prova ad usare la console web e poi prova a sfogliare una coda (vai alla pagina della coda - > fai clic su Sfoglia), causerà un errore a causa dell'utente "sistema":
Stopping vm://localhost#0 because Failed with SecurityException: User name [system] or password is invalid.
Come menzionato su Blog di Phillip , per farlo funzionare correttamente dovrà aggiungi anche un utente "sistema" e modifica il tag "activemq.password" all'interno di "credentials.properties".
Quindi, all'interno di <users />
dovresti aggiungere un utente di "sistema":
<authenticationUser username="system" password="password" groups="admins,publishers,consumers"/>
E poi "credentials.properties" dovrà essere modificato per abbinare la password scelta:
activemq.password=password
Sto postando questo qui perché la risposta è stata sorprendentemente difficile da trovare.