Gestione e memorizzazione di molte chiavi SSH nel cloud

13

Ho un pool di server cloud (~ 50) che hanno bisogno di parlare con molti altri server cloud remoti (~ 4000) usando SSH. Ogni server remoto ha la sua chiave SSH, quindi abbiamo bisogno di un posto dove archiviare tutte le chiavi SSH di questi server remoti in modo sicuro. Come dovremmo archiviare queste chiavi senza salvarle dappertutto?

Qual è il modo migliore per archiviare in modo sicuro molte chiavi SSH in un unico posto e fare in modo che i nostri server le richiedano in fase di esecuzione?

    
posta iCode 04.02.2014 - 05:18
fonte

4 risposte

18

Devi fare distinzioni importanti: ci sono chiavi pubbliche e chiavi private . Quando "memorizzati in modo sicuro", richiedono diverse nozioni di "sicuro".

Ogni server SSH possiede una coppia di chiavi pubblica / privata. Ogni server dovrebbe generare la propria coppia di chiavi e la chiave privata dovrebbe mai lasciare il server stesso. La chiave pubblica è pubblica , il che significa che tutti possono apprenderla. Quando ti connetti al server, questa è una delle prime cose che ti dice il server: la sua chiave pubblica. urla su tutta la rete. Quando si tratta di chiavi pubbliche SSH e della loro archiviazione, la domanda è veramente quella di integrità : un determinato client SSH deve ricordare le chiavi pubbliche di tutti i server di cui vuole parlare a (il file $HOME/.ssh/known_hosts con i soliti client Linux SSH); l'utente malintenzionato potrebbe voler includere una chiave pubblica falsa, al fine di eseguire un server falso.

Ogni client SSH può possedere una coppia di chiavi pubblica / privata: tale coppia di chiavi verrà utilizzata per l'autenticazione del client da parte del server. Se si utilizza l'autenticazione client basata su password, i client non dispongono di tali coppie di chiavi. Se si utilizza l'autenticazione client basata su chiave, ogni server deve conoscere le chiavi pubbliche di "client autorizzati" (il $HOME/.ssh/authorized_keys per implementazioni SSH Linux).

Nel tuo caso, hai 50 client SSH che parlano con 4000 server SSH. Pertanto, utilizzando il normale modello SSH, dovresti assicurarti che:

  • Ciascuno dei 50 client conosce una copia delle chiavi pubbliche per tutti i 4000 server.
  • Se si utilizza l'autenticazione client basata su chiave, ciascuno dei 4000 server deve conoscere una copia delle 50 chiavi pubbliche del client.

Dati questi dati, i file rilevanti saranno ingombranti e la gestione delle chiavi sarà un problema (se si aggiunge un nuovo client, la chiave pubblica del nuovo client deve essere importata in 4000 server, con integrità protetta). Public-Key Infrastructure sono stati inventati per risolvere questo problema. Un'istanza "ufficiale" OpenSSH non sa come utilizzare i certificati X.509; tuttavia, esiste una versione modificata (vedere anche quella domanda precedente ). Con una base di codice SSH compatibile con X.509, puoi eseguire la tua Autorità di certificazione (ad esempio, l'open source EJBCA ) e rilascia certificati per client e server. In questo modo, il client ei server SSH si scambieranno reciprocamente i loro certificati quando necessario, in modo dinamico. Ogni macchina dovrà solo memorizzare la propria chiave privata e il proprio certificato e anche "conoscere" il certificato della CA (nel "trust store" pertinente). L'aggiunta di un nuovo client o di un nuovo server al mix sta semplicemente emettendo un certificato e il problema di gestione è risolto (o, piuttosto, spostato intorno : ora hai un PKI da gestire).

    
risposta data 04.02.2014 - 15:59
fonte
3

Questo è un lavoro per un software di gestione della configurazione come Puppet, Chef, ecc. È stato creato per gestire esattamente questo tipo di problemi. Ti consiglio vivamente di utilizzare il software di gestione della configurazione se disponi di così tanti server.

    
risposta data 04.02.2014 - 09:01
fonte
3

Per quanto riguarda la parte relativa alla memorizzazione sicura delle chiavi, un'opzione è quella di memorizzare le chiavi private in un HSM (modulo di sicurezza hardware). Ci sono alcuni ben noti fornitori che offrono questi, ma ci sono alternative. Vedi ad esempio Cryptostick .

Il vantaggio dell'utilizzo di un HSM è che le chiavi private possono essere utilizzate solo mentre il dispositivo hardware è presente nel sistema e non è possibile copiare le chiavi private altrove.

Questo tipo di soluzione richiederebbe anche un adeguato controllo e gestione delle chiavi SSH autorizzate sui server SSH. Altrimenti nulla impedirebbe a un intruso di generare e posizionare il proprio set di chiavi nel server SSH.

Gestire quelle chiavi comunque è un problema. Ci sono prodotti commerciali là fuori per la gestione delle chiavi SSH ma non sono a conoscenza di alcuna buona soluzione open source.

Come ha detto Thomas, un'opzione si sta spostando su un approccio basato su PKI, tuttavia ciò richiederebbe l'aggiornamento di tutti i tuoi client e server SSH.

Disclaimer: lavoro per un'azienda che vende un prodotto commerciale di gestione delle chiavi SSH.

    
risposta data 08.02.2014 - 19:00
fonte
-3

Considerate alcuni software di gestione delle chiavi ssh in grado di memorizzare e gestire dinamicamente (cambiare) le chiavi ssh, questo è direttamente analogo a un sistema di gestione delle password.

Tuttavia queste soluzioni hanno un costo!

    
risposta data 25.01.2016 - 16:28
fonte

Leggi altre domande sui tag