I miei EDB sono separati da:
Carichiamo tutte le chiavi con un suffisso speciale su ogni nuova istanza di EC2 mentre la bootstrap e quindi rimuoviamo tutte le chiavi che non sono state utilizzate da nessuna delle ricette in run_list alla fine delle prime esecuzioni di chef-client (che sarà proprio quando inizia l'istanza.)
Tutti i file vengono caricati come proprietario e gruppo "root" e con autorizzazioni di sola lettura.
Ogni ricetta che utilizza un EDB, genera il nome EDB e il nome del file chiave al momento dell'esecuzione della ricetta concatenando "edb_" + l'ambiente dei nodi + nome specifico ricetta / elemento + ".key" e quindi cerca la chiave con questo nome . (Se non esiste, viene generata un'eccezione per impostazione predefinita.)
Pertanto, per il nostro server couchdb, che esegue un ruolo chiamato "couch", per ottenere le credenziali che stiamo utilizzando per gli utenti amministratori nell'ambiente di sviluppo, la ricetta cerca una chiave denominata "edb_dev_couch.key"
Quindi cerca un data bag chiamato "edb_dev" per un elemento chiamato "couch_credentials".
Per la gestione delle chiavi, sto attualmente utilizzando il semplice approccio di:
- carica tutte le chiavi EDB tramite lo script bootstrap e aggiungi '_x' ai nomi delle chiavi
- Chiedi a ogni ricetta che utilizza un EDB di cercare nella directory keys la chiave di cui ha bisogno.
- se la chiave esiste con un suffisso '_x', rinominare la chiave per rimuovere il suffisso '_x'.
- aggiungi una ricetta alla fine di ogni run_list che cancella tutte le chiavi con un suffisso '_x'
Si spera che questo limiti il tempo in cui le chiavi al di fuori dell'ambito di un singolo nodo sono suscettibili fino a quando la macchina non è stata avviata e ha avuto la prima esecuzione di chef_client.
Questo è il nostro primo giro di test su come proteggere le chiavi, ma finora soddisfa le nostre attuali esigenze poiché impedisce a un server di sviluppo root di accedere immediatamente a qualsiasi altra credenziale del server archiviata in un EDB.
Per continuare ad avere una ricetta alla fine di ogni elenco esecuzioni, utilizzo un processo exec coltello che si assicura che questa ricetta delete_keys sia esattamente l'ultima ricetta su ogni nodo.