Microservizi e Cloud sono una cosa. Tutti parlano e scrivono. Personalmente sto pensando molto a questi argomenti: come può essere usato per trarne beneficio? Quali sono le possibili sfide? Come può accelerare lo sviluppo quotidiano? E come gestire tutte le cose? Una domanda che mi dà fastidio da qualche giorno è "Come gestire i segreti in un ambiente Microservice/Cloud?".Come gestire i segreti in un ambiente Microservice/Container/Cloud?
Immagina un'azienda con 150 ingegneri del software e vari team con vari prodotti. Ogni squadra sta creando un software e ogni servizio richiede una quantità di segreti (chiavi API, password, chiavi SSH, qualsiasi cosa). Il modo "vecchio stile" era quello di creare alcuni file di configurazione in un formato ini/yaml/txt e leggerlo da. Le app di 12Factor dicono: esegui per vv.
È possibile impostare vv Env per ogni macchina ei file di configurazione possono essere inseriti anche lì. Questo funziona se hai una mano piena di macchine e la distribuzione è fatta da pochi amministratori di sistema. Una delle regole generali dice: "Non conservare segreti in un repository Git".
Ora arriva il nuovo mondo. Ogni squadra è responsabile dell'applicazione che produce da sé. Devono essere schierati e gestiti dal team. Quindi la nostra azienda si sta spostando in un contenitore e in modalità self-service (ad esempio, Mesos e Marathon o Kubernetes).
Ovviamente, Dockerfiles può impostare anche env vars. E sì, puoi AGGIUNGERE il tuo file di configurazione nel contenitore Docker durante la compilazione. Ma con questo tutti possono accedere ai segreti (ad esempio da altri team). E nessuno sa chi usa questi segreti e fa qualcosa di pericoloso.
Si desidera eseguire la versione dei file Docker. E le applicazioni che vuoi eseguire su Marathon devono essere versionizzate (Git o qualsiasi altra cosa) (e applicate dall'API REST). Quindi dove conservare e gestire tutti i segreti per questi contenitori/app? Perché con framework di schedulazione come Swarm e Machine (per Docker), Mesos e Marathon (utilizzabile anche per Docker) o Kubernetes non sai dove verrà eseguita la tua app. Questo sarà programmato su più macchine. E la maggior parte di questi strumenti non ha autenticazione (di default, naturalmente, questo può essere aggiunto da un proxy Nginx o qualcosa del genere).
Un'idea per gestire i segreti è l'utilizzo di uno strumento come Vault. Ma non ho mai visto il supporto "nativo" in un'app. Lo stesso vale per Blackbox. E non so come la gestione della configurazione possa risolvere questo problema. So che lo chef supporta i databag crittografati, ma non è possibile utilizzare Chef per configurare/costruire i contenitori Docker.
Come gestisci i segreti in un ambiente multi team con diversi ingegneri in un ambiente Microservice/Container/Cloud?
Forse c'è un "modo comunitario" di fare questo o uno standard del settore come farlo? Mi dispiace per una "domanda aperta". C'è una posizione corretta nella rete StackOverflow per discutere qualcosa del genere? O sto solo sbagliato qui? – Andy
Ah, penso di aver perso la foresta per gli alberi su questo. C'è un sacco di rumore su ciò che stai facendo in contrasto con la domanda attuale qui. Hai intenzione di gestire i segreti in microcontainer; potresti pulire la tua domanda quindi è * esplicito *? Un primo accenno lo ha fatto leggere come se fosse basato sull'opinione pubblica. – Makoto
Sono d'accordo con Makoto qui e chiedo a @Andy di chiarire la sua domanda. Così com'è ora, questa domanda è difficile da seguire, ma sospetto che ci sia una buona domanda che ci si nasconde. – Chris