Password del database sicura memorizzata in una variabile env

12

Ho bisogno di memorizzare da qualche parte la mia password DB sul mio ambiente di produzione per accedere al DB. Al momento il sistema prod viene distribuito nel cloud, così è il DB. La password, il nome utente e alcune altre informazioni sensibili sono memorizzate come variabili di ambiente in testo normale sul sistema di produzione.

Guardando un po 'in giro ho visto che la maggior parte delle soluzioni consisteva nel limitare l'accesso a questi tipi di dati sensibili (memorizzandoli su un file con accesso concesso solo all'amministratore del sistema) e all'accesso a il DB stesso (limitando l'accesso solo agli IP fissi).
Sfortunatamente nessuno di questi è possibile in questo caso per alcuni motivi: il servizio che ospita il sistema NON ci consente di avere un IP (quindi non posso impostare il DB per essere accessibile solo da un IP) e le credenziali del DB devono rimanere in una variabile di ambiente per motivi di implementazione.

D'altra parte, il DB in realtà non contiene dati sensibili e, più in generale, al momento siamo principalmente preoccupati di non avere persone interne che attraversano il DB di produzione e causano danni, piuttosto che attacchi di hacker esterni.

Quindi la mia domanda è: quale sarebbe una "soluzione abbastanza sicura" in questo caso?

Sarebbe una soluzione sicura per crittografare la password per il DB e quindi memorizzare la chiave di decrittazione su un file di configurazione caricato su GitHub crittografato con questa procedura (anche se sembra un po 'obsoleta)

Ho pensato che fosse un argomento abbastanza diretto e popolare, ma a quanto pare ho sbagliato, dal momento che sembra che non ci siano molte risposte tipo "TODO-list".

    
posta bncc 06.03.2015 - 11:42
fonte

2 risposte

6

Supponendo di eseguire il server Web come proprio utente, solo root e quell'utente possono leggere la Variabile d'ambiente del sistema operativo †. A meno che non utilizzi AIX di 30 anni o qualcosa del genere. Persino Windows protegge envvars.

Se si criptano i valori, come si intende proteggere la chiave ‡? La chiave potrebbe essere letta anche dall'utente o root.

Se memorizzi i valori in un file, come è più sicuro di un envvar? Non lo è. Un envvar è più sicuro in quanto non inserirai accidentalmente le password nel controllo del codice sorgente.

† Questo non si applica alle opzioni della riga di comando!
‡ Stai per acquistare un HSM, ecco come. L'HSM può ancora essere usato da root o utente

    
risposta data 07.03.2015 - 00:27
fonte
3

Si desidera disporre di un metodo per archiviare e distribuire informazioni segrete in modo sicuro. Una possibile soluzione sarebbe Vault: link

Non sono sicuro di cosa intendi quando dici "e le credenziali del DB devono rimanere in una variabile di ambiente per motivi di distribuzione", ma potresti voler riconsiderare questa ipotesi. Se si scopre che questo è effettivamente il caso, è comunque possibile utilizzare qualcosa come Vault per caricare la password del DB nella variabile di ambiente in fase di runtime, in modo che non risulti mai non crittografata su disco. Ma sicuramente considera di non archiviarlo in una variabile ambientale o almeno non globale.

    
risposta data 06.06.2015 - 02:25
fonte

Leggi altre domande sui tag