A differenza degli utenti normali, i service account non hanno password. Gli account di servizio utilizzano invece coppie di chiavi ECDSA per l'autenticazione. Poiché la chiave privata della coppia di chiave RSA consente di eseguire l'autenticazione come account di servizio, l'accesso alla chiave privata è simile alla conoscenza della password di un utente. La chiave privata è nota come chiave del account di servizio. Le chiavi dei service account comportano un rischio per la sicurezza se non vengono gestite con attenzione.
Le principali minacce relative alle chiavi del account di servizio sono le seguenti:
Perdita di credenziali: le chiavi dei service account potrebbero finire inavvertitamente in posizioni in cui non dovrebbero essere archiviate. Un malintenzionato può utilizzare una chiave account di servizio compromessa per autenticarsi e ottenere l'accesso al tuo ambiente.
Escalation dei privilegi: se un malintenzionato ottiene l'accesso a una chiave account di servizio protetta in modo inadeguato, potrebbe essere in grado di utilizzarla per eseguire l'escalation dei propri privilegi.
Divulgazione di informazioni: le chiavi del service account potrebbero divulgare inavvertitamente dati riservati.
Non ripudio: eseguendo l'autenticazione utilizzando una chiave del account di servizio e consentendo al account di servizio di eseguire operazioni per suo conto, un malintenzionato potrebbe nascondere la propria identità e le proprie azioni.
Questa pagina presenta le best practice per la gestione, l'utilizzo e la protezione delle chiavi degli account di servizio.
Proteggiti dalla compromissione delle credenziali
Come un nome utente e una password, le chiavi del account di servizio sono una forma di credenziali. Se un utente può accedere a una chiave del account di servizio valida, può utilizzarla per autenticarsi e accedere alle risorse a cui ha accesso il rispettivo account di servizio.
Gli utenti malintenzionati potrebbero trovare le chiavi dell'account di servizio più preziose di una password compromessa. Ad esempio, è improbabile che il tentativo di accesso con una password compromessa vada a buon fine se l'account utente è stato configurato per utilizzare la verifica in due passaggi e le verifiche dell'accesso. Al contrario, l'autenticazione con una chiave del account di servizio compromessa probabilmente andrà a buon fine, in quanto i service account non sono soggetti ad alcuna verifica di accesso aggiuntiva.
Gli utenti malintenzionati potrebbero cercare le chiavi del account di servizio nei seguenti modi:
- Repository di codice sorgente di progetti open source.
- Dump pubblici di dati di servizi compromessi.
Oltre alle posizioni pubbliche, gli utenti malintenzionati potrebbero cercare le chiavi dei account di servizio in posizioni private che hanno compromesso. Ecco alcuni esempi:
- Caselle di posta elettronica
- Condivisioni file
- Spazio di archiviazione dei backup
- Directory del file system temporanee
Un modo efficace per ridurre il rischio di divulgazione delle chiavi del account di servizio è ridurre il numero di chiavi in circolazione e scoraggiare la creazione di nuove chiavi. Le sezioni seguenti descrivono come limitare il numero di chiavi del service account in circolazione e quali altre misure possono aiutarti a limitare il rischio di perdita dei service account.
Evita di lasciare le chiavi del account di servizio in posizioni temporanee
Quando crei una chiave del account di servizio, spostala immediatamente nella posizione in cui vuoi memorizzarla. Assicurati di non lasciare accidentalmente una copia nella cartella dei download o nel cestino del computer.
Non trasferire le chiavi account di servizio tra gli utenti
Quando esegui il deployment di un'applicazione che richiede una chiave del account di servizio, potresti non avere l'autorizzazione per creare autonomamente una chiave del account di servizio. Potresti invece dover chiedere a un'altra persona di creare una chiave del account di servizio per te.
Non inviare chiavi del account di servizio ai repository di codice sorgente
Le chiavi del service account sono credenziali e devono essere protette da accessi non autorizzati. Se invii una chiave dell'account di servizio a un repository di codice sorgente, aumenta il rischio che la chiave diventi accessibile a utenti non autorizzati e malintenzionati:
Gli utenti malintenzionati potrebbero cercare chiavi divulgate nel codice sorgente dei repository di codice sorgente pubblici.
In futuro, potresti decidere di trasformare un repository di codice sorgente privato in pubblico senza prima controllare la presenza di chiavi.
Altri membri del team potrebbero archiviare copie del codice sorgente sulla propria workstation.
Quando lavori su codice che utilizza una chiave del account di servizio, memorizza sempre la chiave del service account separatamente dal codice sorgente per ridurre il rischio di inviarla accidentalmente al repository di origine. In molti casi, puoi ridurre ulteriormente questo rischio non utilizzando affatto le chiavi dei account di servizio durante lo sviluppo e utilizzando invece le tue credenziali personali.
Non incorporare le chiavi del account di servizio nei file binari del programma
Le chiavi del service account sono stringhe che corrispondono a un determinato pattern e possono essere identificate anche se incorporate in altri file o binari. Se un malintenzionato ha accesso al file binario, può estrarre tutte le chiaviaccount di serviziot incorporate nel file binario.
I binari del programma per le applicazioni lato server potrebbero essere ospitati in repository di artefatti o copiati nelle workstation degli sviluppatori a scopo di debug. Mantenere le chiavi del account di servizio separate dai file binari del programma contribuisce a garantire che un utente che può accedere al file binario non ottenga implicitamente l'accesso alle credenziali del account di servizio.
- Per le applicazioni lato client come strumenti, programmi desktop o app mobile, non utilizzare account di servizio.
- Per le applicazioni lato server, non incorporare le chiavi dell'account di servizio nel file binario. Tieni invece le chiavi separate dal file binario dell'applicazione.
Ruota le chiavi del account di servizio per ridurre il rischio per la sicurezza causato da chiavi compromesse
Anche se puoi ridurre la probabilità di divulgare accidentalmente una chiave di servizio, può essere difficile eliminare completamente il rischio.
La rotazione delle chiavi è il processo di sostituzione delle chiavi esistenti con nuove chiavi e successiva invalidazione delle chiavi sostituite. Ti consigliamo di ruotare regolarmente tutte le chiavi che gestisci, incluse quelle del account di servizio.
La rotazione delle chiavi del account di servizio può contribuire a ridurre il rischio rappresentato da chiavi compromesse o rubate. Se una chiave viene divulgata, gli utenti malintenzionati potrebbero impiegare giorni o settimane per scoprirla. Se ruoti regolarmente le chiavi del account di servizio, è più probabile che le chiavi trapelate non siano valide quando una persona malintenzionata le ottiene.
Per ruotare una chiave dell'account di servizio senza tempi di inattività, completa i seguenti passaggi:
Crea una seconda coppia di chiavi per il account di servizio:
gdcloud iam service-accounts keys create NEW_KEY_FILE \ --project=PROJECT \ --iam-account=NAME \ --ca-cert-path=CA_CERTIFICATE_PATHAggiorna il workload o il secret di Kubernetes con il nuovo file della chiave privata (
NEW_KEY_FILE).Attiva un riavvio graduale del carico di lavoro o attendi che l'applicazione ricarichi a caldo la chiave aggiornata.
Verifica che il workload esegua l'autenticazione correttamente con la nuova credenziale.
Elimina la vecchia chiave pubblica dal account di servizio utilizzando l'ID chiave:
gdcloud iam service-accounts keys delete OLD_KEY_ID \ --project=PROJECT \ --iam-account=NAME
Utilizzare le scadenze per far scadere automaticamente le chiavi
Per impostazione predefinita, le chiavi account di servizio che crei hanno una data di scadenza di un anno e rimangono valide finché non le elimini. Puoi anche impostare una data di scadenza personalizzata. L'impostazione di un tempo di scadenza per le chiavi del account di servizio può limitare il rischio per la sicurezza riducendo la durata delle credenziali permanenti. Tuttavia, l'impostazione di date di scadenza comporta altri rischi. Ad esempio, l'impostazione di una data di scadenza può causare errori nei workload quando le chiavi scadono.
Utilizza i tempi di scadenza quando hai bisogno di un accesso temporaneo a un sistema che richiede una chiave del account di servizio. Ad esempio, utilizza i tempi di scadenza quando esegui le seguenti operazioni:
- Sviluppo di codice in un ambiente non di produzione per un'applicazione che può autenticarsi solo con le chiavi del account di servizio.
- Utilizzo di uno strumento di terze parti che può eseguire l'autenticazione solo con le chiavi del account di servizio.
Evita di utilizzare tempi di scadenza per questi scenari:
- Workload di produzione. In produzione, una chiave del account di servizio scaduta potrebbe causare un'interruzione accidentale. Utilizza invece chiavi che non scadono e gestisci il loro ciclo di vita con rotazione della chiave.
- Workload non di produzione che richiedono l'accesso permanente, ad esempio una pipeline di integrazione continua (CI).
- Sistemi di rotazione delle chiavi che impediscono l'utilizzo di una chiave dopo un periodo di tempo specificato.
Per limitare la validità delle chiavi del account di servizio, puoi configurare una data di scadenza per le chiavi appena create nel tuo progetto o nella tua organizzazione. L'ora di scadenza non si applica alle chiavi esistenti.
Disporre di una procedura consolidata per la rotazione delle chiavi del account di servizio ti aiuta anche ad agire rapidamente se sospetti che una chiave delaccount di serviziot sia stata compromessa.
Utilizza una chiave dedicata per ogni macchina che esegue un'applicazione
Per aiutarti a restringere il campo delle potenziali fonti di attività sospetta, crea
chiavi individuali per ogni copia dell'applicazione. In questo modo, puoi utilizzare il campo serviceAccountKeyName che molti servizi aggiungono ai record dell'audit log per distinguere la macchina da cui ha avuto origine un'attività.