Come proteggere un ActiveMQ?

13

Qualcuno ha esperienza con la protezione / protezione di ActiveMQ? Check list o guide sarebbero i benvenuti.

    
posta AaronS 09.10.2011 - 09:39
fonte

2 risposte

11

Nella mia opzione è necessario pensare ad almeno due fattori durante l'implementazione dei servizi di messaggio. Questi sono autenticazione e autorizzazione.

Autenticazione broker

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.

Autorizzazione broker

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.

Autorizzazione a livello di messaggio

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:

  • Compilare la tua classe in un file JAR
  • Inserisci il JAR nella cartella lib di ApacheMQ
  • Aggiungi un elemento messageAuthorizationPolicy appropriato alla tua configurazione
  • Riavvia ActiveMQ
risposta data 12.10.2011 - 17:40
fonte
2

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.

    
risposta data 19.09.2017 - 15:40
fonte

Leggi altre domande sui tag