Memorizzazione delle credenziali del database per multi server, ambiente multi db

3

Qual è la procedura migliore per archiviare le credenziali del database per un ambiente di ridimensionamento automatico, ma richiede anche la possibilità di aggiornare le informazioni del database?

Ad esempio, ho un sito di ridimensionamento automatico su AWS. Al momento esiste un solo database, ma ad un certo punto verranno aggiunte nuove istanze di database (o per la condivisione dei dati o readonlys)

Sto cercando di capire il modo migliore per archiviare le credenziali del database in modo da renderle facilmente aggiornabili. Anche se ho menzionato AWS qui idealmente mi piacerebbe qualcosa che sia indipendente dalla piattaforma, se possibile.

Ovviamente è sbagliato memorizzare le credenziali del database nel controllo del codice sorgente, quindi le mie considerazioni iniziali sono le seguenti (ma anche questo sembra sbagliato)

Utilizza lo stesso nome utente e password su tutti i server di database (potrebbero esserci ancora utenti diversi a seconda che si tratti di un DB di scrittura o readonly, ma tutti gli utenti si troveranno nei server che ne hanno bisogno). Quindi in qualche modo memorizzarli in modo sicuro su un'immagine del server web. Anche se ho letto anche alcuni post che sostengono che anche le variabili d'ambiente non dovrebbero essere utilizzate, chiedendo come fare.

Un file di configurazione separato potrebbe potenzialmente vivere nel controllo del codice sorgente che descrive semplicemente gli indirizzi e i nomi dei server del database anche se penso che questo dovrebbe essere segreto. Sorge quindi il problema di ottenere facilmente un elenco aggiornato dei server di database per tutti i server Web.

Il problema che sto affrontando è come aggiornare x il numero di server con i dettagli dei database y in modo sicuro quando x e y possono entrambi cambiare. in teoria sarebbe più stabile di x se x fosse scalato automaticamente. Ma allo stesso tempo, quando cambia, avrebbe un impatto maggiore.

Molto probabilmente sarà su una macchina Linux (Ubuntu). Tuttavia, non ho elencato un linguaggio di scripting specifico in quanto sarebbe bello se esistessero soluzioni che possono essere utilizzate più ampiamente

Grazie

    
posta TommyBs 04.10.2017 - 11:42
fonte

1 risposta

1

Non è proprio una risposta alle migliori pratiche, ma il tuo caso d'uso assomiglia molto al problema comune affrontato in gestione della configurazione . Applicazioni di gestione della configurazione come Chef o Puppet fornire i mezzi per impostare e configurare in modo efficiente il software su sistemi cluster.

Di solito si imposta un sistema principale che installa e configura tutti gli altri sistemi come server di applicazioni e istanze di database. Il master aggiorna le configurazioni ogni n minuti in base a regole come:

  1. Quando il numero di server delle applicazioni aumenta, distribuire un file di configurazione contenente tutte le credenziali del database e avviarlo.
  2. Quando il numero delle istanze del database diminuisce, aggiornare tutti i file di configurazione dei server applicazioni e riavviarli uno per uno.
  3. Quando aumenta il numero di istanze del database, ottieni le credenziali per le nuove istanze dal servizio cloud, aggiorna tutti i file di configurazione dei server applicazioni e riavviale uno per uno.

Si potrebbe anche considerare di avere l'applicazione di gestione della configurazione per fornire i propri database. In questo caso si potrebbe arrivare fino a generare password casuali ogni volta che è necessario un nuovo database, gli utenti del database generati automaticamente e le credenziali pubblicate su tutti i server delle applicazioni. A rigor di termini, nessun essere umano dovrebbe più entrare in contatto con queste password del database!

Infine, poniamo alcune considerazioni sulla sicurezza:

  • Ovviamente il sistema principale è un obiettivo prezioso e dovrebbe essere protetto in modo ragionevole. Per esempio. dovrebbe essere posizionato in una MZ (zona militarizzata) con un accesso alla rete strongmente regolato.
  • Il traffico tra il master e gli altri sistemi viene solitamente crittografato per impedire la fuga di credenziali e altre informazioni sensibili.
risposta data 04.10.2017 - 21:31
fonte

Leggi altre domande sui tag