Credenziali utente per l'accesso alle risorse di rete

2

Sono in procinto di configurare l'infrastruttura per i microservizi utilizzando RabbitMQ come broker di messaggi per la nostra azienda. Sto cercando di capire il modo migliore per gestire la sicurezza del sistema. Questo sistema verrà utilizzato solo (per ora) sulla nostra rete interna. Utilizziamo Active Directory per mantenere gli utenti nel dominio.

Ho configurato RabbitMQ per utilizzare LDAP su TLS per autenticare gli utenti utilizzando i nostri server Active Directory. A un certo punto dovrò inviare le credenziali di un utente a RabbitMQ. Pianifico sull'utilizzo di .NET NetworkCredential per archiviare le credenziali. RabbitMQ non può utilizzare il token WindowsIdentity, quindi sarà necessario inviare credenziali effettive (nome utente e password anziché un token) al server RabbitMQ.

In primo luogo, capisco che NetworkCredential non è a prova di proiettile ma è meglio di niente.

Alcuni colleghi hanno espresso la preoccupazione che archiviamo credenziali utente personali nella memoria delle applicazioni. Quando non si utilizza RabbitMQ, non è stato necessario memorizzare esplicitamente le credenziali a lungo termine. Potremmo semplicemente autenticare l'utente e andare avanti (lasciando che il garbage collector pulisca la password inserita dall'utente).

Sostengono che preferirebbero avere un'identità power user con le autorizzazioni necessarie per connettersi a RabbitMQ. Quindi non memorizzeremo le credenziali personali e utilizzeremo invece la sicurezza transitiva tramite l'identità "Utente dell'applicazione".

La mia domanda è qual è la pratica standard per questa situazione? Il mio pensiero è che la memorizzazione di un'identità utente potente in un'applicazione è problematica. Se le credenziali dell'utente esperto, che saranno necessariamente distribuite a tutti gli utenti in qualche modo (anche se occultate nel codice), sono state compromesse, le conseguenze sarebbero peggiori rispetto a quando le credenziali di un singolo utente sono state compromesse.

Per quanto riguarda il controllo delle autorizzazioni nel sistema, mi sembra che l'utilizzo delle credenziali effettive di una persona sia preferibile a un'identità power user. Non ho modo di bloccare le persone se un individuo ha accesso alle credenziali dell'utente esperto.

Mi mancano alcuni strumenti o risorse che gestiscono questa situazione?

    
posta Michael Harris 22.05.2017 - 23:05
fonte

1 risposta

1

Il plugin di autenticazione Kerberos che abbiamo trovato per RabbitMQ è immaturo e non viene mantenuto per quanto ne sappiamo. L'unica vera opzione era per noi di inviare le credenziali dell'utente a RabbitMQ tramite una connessione TLS. Archiviamo le credenziali nell'app in un oggetto NetworkCredential secondo necessità, che crittografa la password in memoria rendendo molto più difficile l'accesso a.

Gli utenti delle applicazioni e le credenziali dell'utente esperto sono valide solo quando è possibile controllare l'accesso a tali credenziali. Cioè, dovrebbero essere usati solo in contesti limitati, come all'interno di un'applicazione web sicura o di un servizio che controlla da solo l'accesso a funzioni specifiche che gli utenti possono eseguire. L'app, che vive su un server, può utilizzare l'account con privilegi elevati, senza esporre le credenziali a un utente.

Se condividi le credenziali dell'utente energetico con utenti comuni, ad esempio tramite un'app desktop, in modo che l'utente possa intraprendere azioni che l'utente esperto può fare, allora devi presumere che l'utente abbia quelle credenziali ora, indipendentemente da quanto bene oscura quelle credenziali all'interno dell'app. È un'idea migliore usare la propria identità dell'utente per sicurezza ogni volta che è possibile. Ciò consente di revocare le autorizzazioni da un utente se necessario. Permette anche di tracciare e registrare chi sta facendo cosa nel sistema.

    
risposta data 19.03.2018 - 21:36
fonte

Leggi altre domande sui tag