Kubernetes Secrets Management

Kubernetes Secrets Management
L'ambiente Kubernetes, come molti altri sistemi di elaborazione, richiede l'uso di dati sensibili. I segreti si riferiscono ai dati sensibili di un gruppo (come password, chiavi SSH e token di sicurezza). Esamineremo le capacità di Kubernetes e di altri sistemi di gestione segreta in questo post e come creare e gestire i segreti nel tuo ambiente Kubernetes.

Cosa sono i segreti in Kubernetes?

Un segreto è un pezzo di informazioni private come una password, la chiave o il token. Tali informazioni possono anche essere disposte in un'immagine del contenitore o in una specifica POD. Se impieghi un segreto, non devi includere dati segreti nel codice dell'applicazione.

Poiché i segreti possono essere installati indipendentemente dai pod che li usano, potrebbe esserci molto meno minaccia del segreto (e delle sue informazioni) scoperte nel flusso di lavoro della generazione, dell'esame e del cambiamento dei pod. Kubernetes e le app che eseguono il tuo cluster utilizzano anche segreti e tecniche per prendere precauzioni maggiori, tra cui l'escavo di scrivere informazioni riservate a memoria non volatile.

Tipi di segreti

Kubernetes fornisce molti tipi integrati per alcuni scenari di uso comune. Le validazioni realizzate e le restrizioni applicate attraverso Kubernetes differiscono tra quelle categorie.

Segreti opachi

Il tipo segreto predefinito viene utilizzato quando non esiste un file di configurazione segreto. Quando si crea un segreto di Kubectl, utilizzare il sottocomando generico per specificare questo tipo.

Segreti token dell'account di servizio

Questo segreto memorizza un token con un account di servizio. È necessario impostare i kubernetes.IO/Service-Account.Annotazione del nome a un nome dell'account del servizio corrente durante l'uso di questo tipo segreto.

Docker Config Secrets

Questo tipo è per la conservazione di un serializzato /.file dockercfg. È il formato tradizionale per la configurazione della riga di comando Docker. Innanzitutto, verifica che il campo dei dati segreti abbia a.Key Dockercfg, e il suo valore è il contenuto di A /.file dockercfg codificato in formato base64 quando si utilizza questo tipo segreto.

Segreto di autenticazione di base

Questo tipo viene utilizzato per archiviare le credenziali di autenticazione fondamentali. Quando si utilizza questo tipo segreto, una delle due chiavi (nome utente e password) deve essere presente nel campo dei dati del segreto:

I valori di questi tasti sono entrambe stringhe codificate di base64. È possibile utilizzare StringData per la generazione segreta se si desidera fornire un contenuto di testo chiaro.

Segreti di autenticazione SSH

Questo viene utilizzato per gestire i dati di autenticazione di SSH. Le credenziali SSH devono essere accettate come coppia di valore chiave SSH-PrivateKey al di fuori del soggetto di dati (o stringdata) mentre applicano questo tipo segreto.

Segreti TLS

Kubernetes ha un tipo segreto incorporato Kubernetes.IO/TLS che può archiviare un certificato e la chiave corrispondente, che è comunemente utilizzata per TLS. Queste informazioni vengono utilizzate con la terminazione TLS. Ma potrebbe inoltre essere impiegato con attività diverse o senza indugio attraverso un carico di lavoro. Quando impongono questo tipo di segreto, il TLS.Chiave e TLS.Le chiavi CRT devono essere fornite nell'area dei dati (o StringData) della configurazione segreta, anche se il server API ora non esamina più i valori per ogni chiave.

Bootstrap Token Secrets

Questa forma di segreto può essere creata andando a bootstrap.Kubernetes.io/token e scelta il tipo segreto. Questo tipo di segreto mira a immagazzinare token. Questi token vengono utilizzati principalmente durante la procedura di bootstrap del nodo. Tiene traccia dei token di firma per configurazioni ben note.

Un token secret bootstrap viene spesso creato sotto lo spazio dei nomi del sistema kube e chiamato bootstrap-token-token-id>, dove token-id> è una stringa a sei caratteri che rappresenta l'ID token.

Come creare un segreto in Kubernetes?

Un segreto può essere utilizzato per contenere le credenziali dell'utente. I pod utilizzano queste credenziali per accedere a un database. Un ID (nome utente) più password, ad esempio, creare una stringa di connessione del database. Puoi salvare il nome utente in./nome utente.txt e la password in./parola d'ordine.txt sul tuo PC locale.

$ echo -n 'Alex'> ./nome utente.TXT
$ echo -n '01trfg02'> ./parola d'ordine.TXT

Il pezzo di codice seguente mostra come è possibile creare un segreto con il comando Crea.

$ kubectl crea segreti segreti segreti-mbps \
--dal file =./nome utente.TXT \
--dal file =./parola d'ordine.TXT

Di seguito, il segreto (denominato segreto-MBPS) viene creato correttamente di seguito.

Come accennato in precedenza, il parametro -n nei comandi garantisce che non esiste un carattere di linea extra alla fine del contenuto nei file di output. Ciò è significativo perché il carattere di linea extra è codificato quando Kubectl legge un file e lo converte in una stringa di base64.

Come modificare un segreto?

Il seguente comando viene utilizzato per apportare modifiche in un segreto esistente:

$ kubectl Modifica segreti segreti-mbps

Ciò aprirà l'editor con la configurazione predefinita. Ti permetterà di regolare i valori segreti codificati del campo di dati64:

Come verificare se esiste un segreto?

Per verificare un segreto, digita il comando Get Secret.

$ kubectl ottieni segreti

Lo screenshot allegato mostra i dettagli del segreto specificato.

Come decodificare il segreto?

Per decodificare il segreto, è possibile utilizzare il comando di seguito.

$ kubectl Get Secret -Mbps -o jsonpath = '.dati'

Di seguito puoi vedere lo screenshot di output.

Ora puoi decodificare i dati della password come segue:

$ echo 'mwyyzdflmmu2n2rm' | Base64 -Decodifica

Ecco il risultato.

Puoi usare il comando (come puoi vedere di seguito) se vuoi non archiviare un valore codificato segreto nella cronologia delle shell:

$ kubectl Get Secret -Mbps -o jsonpath = '.dati.password '| Base64 -Decode

Questo comando produrrà gli stessi risultati del precedente.

Come eliminare il segreto?

Per eliminare il segreto, è possibile utilizzare il comando elimina e menzionare il nome accurato del segreto.

$ kubectl Elimina segreto MBPS segreto

Qui puoi osservare che il segreto specificato viene eliminato con successo.

Conclusione:

I segreti sono identità digitali che consentono agli utenti di verificare le proprie identità e accedere agli account, alle app e ai servizi privilegiati autenticando le loro identità. Abbiamo menzionato in dettaglio Kubernetes Secrets Management in questo articolo.