Le chiavi del service account sono di uso comune per l'autenticazione ai serviziGoogle Cloud . Tuttavia, possono anche diventare un rischio per la sicurezza se non vengono gestiti correttamente, aumentando la vulnerabilità a minacce come la divulgazione delle credenziali, l'escalation dei privilegi, la divulgazione di informazioni e la non ripudiabilità.
In molti casi, puoi autenticarti con alternative più sicure alle chiavi del account di servizio. Questa guida ti aiuta a eseguire la migrazione dall'utilizzo delle chiavi del account di servizio come meccanismo di autenticazione principale all'utilizzo di alternative più sicure, con eccezioni occasionali in cui le chiavi del service account sono davvero necessarie.
Questo documento è destinato agli amministratori della sicurezza che vogliono migliorare la propria security posture riducendo l'utilizzo delle chiavi dei account di servizio a favore di meccanismi di autenticazione più sicuri. Questi amministratori della sicurezza potrebbero essere responsabili della sicurezza dei carichi di lavoro di produzione esistenti, dei flussi di lavoro degli sviluppatori e dei processi interni che utilizzano le chiavi deaccount di serviziont.
Panoramica
La rimozione delle chiavi del account di servizio dai workload esistenti richiede un'attenta pianificazione per evitare interruzioni accidentali. Il seguente piano di migrazione è progettato per consentirti di applicare controlli centralizzati riducendo al minimo le interruzioni per gli sviluppatori.
Questo piano di migrazione include tre fasi:
- Valuta:in questa fase, valuta l'ambiente esistente per capire dove si trovano le chiavi del account di servizio e se sono in uso.
- Pianificazione:in questa fase, decidi quali controlli implementare e comunichi il piano di migrazione agli stakeholder.
- Deployment:in questa fase, inizi a eseguire il refactoring dei carichi di lavoro per l'autenticazione con alternative più sicure alle chiavi dei account di servizio. Inoltre, crei funzionalità aggiuntive per monitorare continuamente il tuo ambiente e mitigare i rischi futuri.
Valutare l'utilizzo delle chiavi del account di servizio
In questa fase, valuti l'ambiente esistente per capire dove si trovano le chiavi dei service account e se sono in uso.
Le sezioni seguenti descrivono i dati che puoi raccogliere per comprendere meglio come vengono utilizzate le chiavi deiaccount di serviziot nella tua organizzazione.
Raccogliere dati sull'utilizzo delle chiavi
Per prima cosa, identifica dove esistono le chiavi dei account di servizio e come vengono utilizzate.
Google Cloud fornisce strumenti per comprendere account di servizioe account. Questi strumenti ti aiutano a determinare quali service account e chiavi sono stati utilizzati di recente per l'autenticazione, quali service account non sono stati utilizzati negli ultimi 90 giorni e quali service account dispongono di ruoli con privilegi eccessivi.
Puoi combinare le informazioni di tutti questi strumenti per avere un quadro più chiaro di come vengono utilizzati i service account e le chiavi nella tua organizzazione. Per un esempio di come combinare le informazioni di queste varie fonti in tutta l'organizzazione, consulta l'architettura di riferimento implementabile su GitHub. Questa architettura di riferimento aggrega i dati di vari strumenti e li esporta regolarmente in una tabella BigQuery per l'analisi.
L'architettura di riferimento implementa una pipeline di dati che esegue query su Cloud Asset Inventory per identificare le chiavi dei account di servizio nella tua organizzazione. La pipeline di dati combina questi dati con quelli relativi all'utilizzo delle chiavi e delle autorizzazioni per l'account associato. La tabella risultante, sa_key_usage, ti aiuta a
rispondere a domande come le seguenti:
- Quante chiavi persistenti sono state create? Questo numero può essere utile come metrica di alto livello per monitorare i progressi durante la migrazione dalle chiavi.
- Quali progetti e service account utilizzano le chiavi? Queste informazioni ti aiutano a identificare i proprietari dei workload che utilizzano le chiavi delaccount di serviziot.
- Quali chiavi non sono attive? Probabilmente puoi eliminare queste chiavi senza ulteriori valutazioni da parte dei proprietari dei carichi di lavoro.
- Quali chiavi sono associate a service account con suggerimenti relativi alle autorizzazioni in eccesso? Se una chiave del account di servizio è associata a un account di servizio con privilegi eccessivi, in particolare uno con ruolo Proprietario, Editor o Visualizzatore, la chiave potrebbe essere particolarmente a rischio. La ricerca di service account con suggerimenti per i ruoli può aiutarti a identificare quali service account hanno privilegi eccessivi. Dopo aver identificato questi service account, potresti decidere di dare la priorità a questi carichi di lavoro per la migrazione. Puoi anche scegliere di applicare i suggerimenti sui ruoli per ridurre in modo proattivo le autorizzazioni in eccesso.
Questa pipeline di dati viene eseguita quotidianamente e scrive in una tabella BigQuery partizionata per data. Puoi utilizzare questa tabella per esaminare service account o chiavi specifici oppure per monitorare l'avanzamento della correzione utilizzando uno strumento di dashboard come Data Studio.
Arricchire i dati sull'utilizzo delle chiavi con un contesto aggiuntivo
Dopo aver raccolto i dati sull'utilizzo delle chiavi, puoi arricchirli facoltativamente con altre origini dati. Ti consigliamo di aggiungere le origini dati che utilizzi già per il monitoraggio della governance e della provenienza delle risorse. A seconda della governance esistente, potresti aggiungere dati aggiuntivi come i seguenti:
- Informazioni sulla proprietà da un database di gestione della configurazione (CMDB) o sistema simile.
- Informazioni di governance configurate nelle etichette del progetto, come il team o il centro di costo responsabile di un progetto.
- Informazioni sull'ambiente relative alle chiavi utilizzate per i carichi di lavoro in ambienti esterni a Google Cloud.
Crea un piano per ridurre l'utilizzo delle chiavi del account di servizio
Prima di poter eseguire il deployment di qualsiasi modifica per ridurre l'utilizzo delle chiavi dell'account di servizio, devi determinare quali carichi di lavoro e ambienti saranno interessati e come applicherai queste modifiche. Devi anche comunicare questo piano alla tua attività e assicurarti che i proprietari dei workload lo supportino.
Le sezioni seguenti introducono argomenti chiave che il tuo piano deve affrontare. Il tuo piano specifico varia in base alle dimensioni della tua organizzazione e ai requisiti specifici dei tuoi carichi di lavoro.
Decidere la responsabilità dei proprietari del carico di lavoro attuale
Sebbene un team di sicurezza centrale possa valutare quali chiavi esistono, una migrazione riuscita richiede l'impegno dei proprietari dei carichi di lavoro. Per le chiavi incluse nell'ambito della migrazione, i proprietari dei carichi di lavoro devono determinare quale dei metodi di autenticazione disponibili funzionerà per il loro caso d'uso, quindi eseguire la migrazione.
Valuta come bilanciare i miglioramenti alla tua postura di sicurezza esistente con l'impegno richiesto ai proprietari dei workload. Le sezioni seguenti descrivono due approcci di esempio: uno che dà la massima priorità ai miglioramenti della tua postura di sicurezza e uno che dà la massima priorità alla riduzione al minimo dell'impegno dei proprietari dei workload. Il tuo approccio effettivo potrebbe variare. Ad esempio, potresti decidere di selezionare individualmente i workload inclusi nell'ambito.
Esempio: tutti i carichi di lavoro attuali vengono valutati per la migrazione
Un approccio possibile consiste nell'applicare i controlli delle chiavi degli account di servizio a tutti i workload esistenti e futuri. che prevede passaggi come i seguenti:
- Collaborare con i proprietari dei workload per valutare l'utilizzo delle chiavi per i workload esistenti.
- Richiedere ai proprietari dei workload di eseguire la migrazione di tutti i workload esistenti con utilizzo delle chiavi, a meno che non sia stata concessa un'eccezione.
- Impedire a tutti i carichi di lavoro futuri di utilizzare le chiavi dei account di servizio, a meno che non sia stata concessa un'eccezione.
Questo approccio dà la priorità ai miglioramenti della tua strategia di sicurezza esistente, ma richiede un maggiore impegno da parte di sviluppatori e proprietari dei carichi di lavoro nel breve termine. Per eseguire correttamente un piano come questo, devi ottenere l'impegno dei proprietari dei workload a partecipare alla revisione e al refactoring dei workload.
Esempio: nessun workload attuale viene valutato per la migrazione
Un altro approccio consiste nel consentire ai carichi di lavoro esistenti un'eccezione automatica per continuare a utilizzare le chiavi dell'account di servizio e applicare i nuovi controlli solo ai carichi di lavoro futuri.
Questo approccio migliora la security posture dei workload futuri e riduce al minimo la responsabilità degli attuali proprietari dei workload. Tuttavia, non migliora la postura di sicurezza dei workload esistenti.
Identificare i risultati rapidi
Nella valutazione, potresti identificare le chiavi che possono essere eliminate in sicurezza senza ulteriori interventi di correzione da parte dei proprietari dei carichi di lavoro. Ad esempio, se una chiave non ha attività per 90 giorni o è correlata a risorse non più attive, potresti rimuoverla in sicurezza senza dover eseguire la migrazione a un meccanismo di autenticazione diverso.
Crea un elenco di chiavi che soddisfano questi criteri. Utilizzerai questo elenco durante la fase di implementazione per eliminare le chiavi non necessarie. Prima di aggiungere una chiave all'elenco, verifica se esistono casi d'uso che richiedono la chiave del account di servizio di rado, ad esempio l'accesso in produzione di emergenza che si basa sulle chiavi del account di servizio.
Pianificare dove applicare le modifiche alle policy dell'organizzazione
Per eseguire la migrazione dalle chiavi del account di servizio, devi
impedire la creazione di nuove chiavi. Durante la fase di deployment, applichi
il vincolo del criterio dell'organizzazione iam.disableServiceAccountKeyCreation
per impedire la creazione di nuove chiavi del account di servizio.
Sebbene questo vincolo non impedisca l'utilizzo delle chiavi esistenti, potrebbe interrompere i workload esistenti che ruotano regolarmente le chiavi. Prima di iniziare la fase di deployment, decidi dove applicarla nella gerarchia delle risorse per ridurre al minimo le interruzioni.
Potresti preferire applicare inizialmente il vincolo a livello di progetto o cartella anziché a livello di organizzazione. Ad esempio, potresti applicare il vincolo alla cartella utilizzata per l'ambiente di sviluppo prima di eseguirne il deployment nelle cartelle di produzione. In alternativa, in un'organizzazione di grandi dimensioni con molti team, potresti applicare il vincolo a una cartella per un singolo team e poi applicarlo ad altre cartelle man mano che le esegui la migrazione.
Puoi utilizzare i criteri dell'organizzazione con i tag per applicare in modo condizionale i criteri dell'organizzazione a livello di progetto o cartella.
Progettare una procedura per le eccezioni
Sebbene l'obiettivo di questa migrazione sia ridurre o eliminare l'utilizzo delle chiavi del account di servizio, esistono alcuni casi d'uso legittimi che richiedono le chiavi del account di servizio. Anche se nessun workload esistente richiede chiavi del account di servizio, è possibile che i workload futuri lo facciano. Pertanto, devi definire una procedura operativa per valutare e approvare le eccezioni per i casi d'uso che richiedono chiavi delaccount di serviziot.
Definisci una procedura per consentire ai proprietari dei carichi di lavoro di richiedere un'eccezione che consenta al loro carico di lavoro di utilizzare le chiavi del account di servizio. Assicurati che i responsabili delle decisioni incaricati di concedere un'eccezione abbiano le conoscenze tecniche per convalidare il caso d'uso, consultare i proprietari dei workload su quali alternative più sicure alle chiavi dei account di servizio potrebbero essere più appropriate e consigliare i proprietari dei workload in merito alle best practice per la gestione delle account di servizio account.
Comunicare ai proprietari dei carichi di lavoro le modifiche imminenti
Dopo aver progettato un piano, devi comunicarlo chiaramente a tutta l'organizzazione e assicurarti che le parti interessate, in particolare i dirigenti, siano disposti a impegnarsi per la migrazione.
Sebbene i dettagli specifici della migrazione varino per la tua organizzazione, ti consigliamo di includere i seguenti argomenti nel tuo piano di comunicazione:
- L'impatto negativo che le chiavi del account di servizio non sicure possono avere sull'organizzazione e le motivazioni che ti spingono a eseguire la migrazione dalle chiavi del service account.
- I nuovi controlli di sicurezza per impedire la creazione di chiavi del account di servizio e in che modo ciò può influire sui processi esistenti.
- Indicazioni per gli sviluppatori per identificare alternative più sicure alle chiavi dei service account.
- La procedura per i team per richiedere un'eccezione per consentire le chiavi del account di servizio, inclusa la frequenza con cui questa eccezione viene rivalutata.
- La tempistica per l'applicazione delle modifiche proposte.
Collabora con i proprietari dei workload per perfezionare il piano e assicurarti che funzioni in tutta l'organizzazione.
Esegui il deployment dei controlli e refactorizza i carichi di lavoro
Dopo aver creato un piano e comunicato ai proprietari dei carichi di lavoro, puoi iniziare la migrazione dalle chiavi delaccount di serviziot.
In questa fase, inizi a eseguire il refactoring dei workload per l'autenticazione con alternative più sicure alle chiavi del account di servizio. Inoltre, crei funzionalità aggiuntive per monitorare continuamente il tuo ambiente e mitigare i rischi futuri.
Le sezioni seguenti descrivono i passaggi che puoi intraprendere per eseguire il refactoring dei workload ed eliminare le chiavi con interruzioni minime. Puoi scegliere di eseguire questi passaggi in qualsiasi ordine, in base alla priorità e all'impegno richiesto per la tua organizzazione.
Applica controlli per interrompere la creazione di nuove chiavi del account di servizio
Per interrompere la creazione di nuove chiavi del account di servizio, applica il vincolo del criterio dell'organizzazione iam.disableServiceAccountKeyCreation.
Tuttavia, prima di applicare questo vincolo, devi aggiungere tag a tutti i progetti o le cartelle che saranno esentati dalla policy. Potresti consentire eccezioni per i workload esistenti che non possono essere migrati dalle chiavi del service account o per i nuovi workload che hanno un motivo legittimo per l'autenticazione solo con le chiavi deaccount di serviziont.
Dopo aver aggiunto tag a progetti e cartelle esenti, puoi impostare un'organizzazione
policy con tag per applicare il
vincolo iam.disableServiceAccountKeyCreation per progetti e cartelle non esenti.
Per impedire la creazione di chiavi del account di servizio in tutti i progetti e le cartelle non esenti, procedi nel seguente modo:
-
Assicurati di disporre del ruolo Tag Administrator (
roles/resourcemanager.tagAdmin) e del ruolo Amministratore policy dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni. -
A livello di organizzazione, crea una chiave tag e un valore tag che utilizzerai per definire se una risorsa deve essere esentata dalla policy dell'organizzazione. Ti consigliamo di creare un tag con la chiave
disableServiceAccountKeyCreatione i valorienforcedenot_enforced.Per scoprire come creare chiavi e valori dei tag, consulta Creazione e definizione di un nuovo tag.
-
Allega il tag
disableServiceAccountKeyCreationall'organizzazione e imposta il valore suenforced. Tutte le risorse dell'organizzazione ereditano questo valore del tag, a meno che non venga sovrascritto con un valore diverso.Per scoprire come collegare i tag alle risorse, consulta Collegare i tag alle risorse.
-
Per ogni progetto o cartella che vuoi esentare dalla policy dell'organizzazione, associa il
tag
disableServiceAccountKeyCreatione imposta il relativo valore sunot_enforced. L'impostazione di un valore tag per un progetto o una cartella in questo modo sostituisce il valore tag ereditato dall'organizzazione. -
Crea un criterio dell'organizzazione che impedisca la creazione di chiavi del account di servizio per tutte le risorse, ad eccezione di quelle esenti. Queste norme devono prevedere le seguenti regole:
-
Configura il vincolo
iam.disableServiceAccountKeyCreationin modo che non venga applicato a nessuna risorsa con il tagdisableServiceAccountKeyCreation: not_enforced. La condizione in questa regola dovrebbe essere simile alla seguente:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')" -
Configura il vincolo
iam.disableServiceAccountKeyCreationin modo che venga applicato a tutte le altre risorse.
-
Correggere i workload esistenti
Per ogni workload che utilizza le chiavi dell'account di servizio, collabora con i proprietari del workload per scegliere e implementare un metodo di autenticazione alternativo.
Quando accedi ai servizi Google Cloud utilizzando Google Cloud CLI, le librerie client Cloud, gli strumenti che supportano le Credenziali predefinite dell'applicazione (ADC) come Terraform o le richieste REST, utilizza il seguente diagramma per scegliere un metodo di autenticazione:
Questo diagramma ti guida attraverso le seguenti domande:
-
Stai eseguendo il codice in un ambiente di sviluppo per un singolo utente, ad esempio la tua workstation, Cloud Shell o un'interfaccia desktop virtuale?
- In caso affermativo, vai alla domanda 4.
- In caso contrario, vai alla domanda 2.
- Stai eseguendo il codice in Google Cloud?
- In caso affermativo, vai alla domanda 3.
- In caso contrario, vai alla domanda 5.
- Esegui container in Google Kubernetes Engine?
- In caso affermativo, utilizza Workload Identity Federation for GKE per collegare i service account ai pod Kubernetes.
- In caso contrario, collega un service account alla risorsa.
-
Il tuo caso d'uso richiede un account di servizio?
Ad esempio, vuoi configurare l'autenticazione e l'autorizzazione in modo coerente per la tua applicazione in tutti gli ambienti.
- In caso contrario, esegui l'autenticazione con le credenziali utente.
- In caso affermativo, simula l'identità di un account di servizio con le credenziali utente.
-
Il tuo workload esegue l'autenticazione con un provider di identità esterno che supporta la
federazione delle identità per i workload?
- In caso affermativo, configura la federazione delle identità per i workload per consentire alle applicazioni in esecuzione on-premise o su altri cloud provider di utilizzare un account di servizio.
- In caso contrario, crea una account di servizio account.
In alcuni casi, potresti non essere in grado di utilizzare altri metodi di autenticazione diversi dalle chiavi dell'account di servizio. Esempi di casi in cui una chiave del account di servizio potrebbe essere la tua unica opzione fattibile includono:
- Stai utilizzando prodotti commerciali standard (COTS) o applicazioni software-as-a-service (SaaS) che ti chiedono di inserire una chiave del service accountGoogle Cloud direttamente nella sua interfaccia utente.
- Il tuo workload viene eseguito al di fuori di Google Cloud e non è autenticato con un provider di identità che può supportare la federazione delle identità dei workload.
Nei casi in cui devi continuare a utilizzare le chiavi del account di servizio, assicurati di seguire le best practice per la gestione delle account di servizio account.
Potresti anche decidere di non correggere determinati carichi di lavoro perché ritieni che il rischio di continuare a utilizzare le chiavi degli account di servizio non giustifichi il costo del passaggio a un metodo di autenticazione diverso.
Eliminare le chiavi non necessarie
Se hai la certezza che una chiave del account di servizio non sia necessaria, devi eliminarla. Le chiavi non necessarie includono:
Chiavi senza utilizzo recente o chiavi correlate a risorse inutilizzate, che hai identificato nella sezione Identifica risultati rapidi di questa pagina.
Chiavi per i workload di cui è stata eseguita la migrazione ad altri metodi di autenticazione.
Dopo aver eliminato tutte le chiavi degli account di servizio in un progetto, assicurati che il vincolo
iam.disableServiceAccountKeyCreationvenga applicato a quel progetto. Se il progetto era precedentemente esente da questo vincolo, rimuovi il tag che consentiva l'esenzione.
Per eliminare le chiavi in modo sicuro, ti consigliamo di disattivarle prima di eliminarle. L'eliminazione è irreversibile, ma la disattivazione ti consente di riattivare rapidamente la chiave se identifichi problemi imprevisti. Dopo aver disattivato la chiave, attendi finché non sei sicuro che la rimozione definitiva della chiave non causi problemi, poi elimina la chiave. Se, dopo aver disattivato la chiave, identifichi problemi imprevisti, riattiva la chiave, risolvi i problemi e ripeti la procedura finché non puoi eliminare la chiave in modo sicuro.
Utilizzare i controlli integrati per rispondere alle chiavi compromesse
Google Cloud offre strumenti e servizi per aiutarti a rilevare e rispondere alle chiavi deiaccount di serviziot compromesse. Valuta la possibilità di utilizzare i seguenti meccanismi per rispondere alle chiavi delaccount di serviziot trapelate:
- Il vincolo Risposta esposizione chiave service account consente di disattivare automaticamente le chiavi esposte rilevate da Google Cloud .
Miglioramenti continui alla gestione dei account di servizio
Ove possibile, implementa le best practice per la gestione delle account di servizio di servizio. Il miglioramento dei processi di gestione delle chiavi può contribuire a ridurre il rischio di eventuali chiavi del account di servizio rimanenti nella tua organizzazione.
Passaggi successivi
- Best practice per l'utilizzo dei service account
- Best practice per la gestione delle chiavi degli account di servizio
- Costruire un processo collaborativo di gestione degli incidenti