Le chiavi dell'account di servizio vengono comunemente utilizzate per l'autenticazione servizi Google Cloud. Tuttavia, possono anche diventare un rischio per la sicurezza se non gestite correttamente, il che aumenta la tua vulnerabilità a minacce come le credenziali fuga di dati, escalation dei privilegi, divulgazione di informazioni e non ripudio.
In molti casi, puoi autenticarti con un metodo più sicuro alternative alle chiavi degli account di servizio. Questa guida ti aiuta a eseguire la migrazione dall'utilizzo delle chiavi dell'account di servizio come meccanismo di autenticazione principale all'utilizzo di alternative più sicure, con eccezioni occasionali in cui le chiavi dell'account di servizio sono effettivamente necessarie.
Questo documento è rivolto agli amministratori della sicurezza che vogliono migliorare la propria postura di sicurezza riducendo l'utilizzo delle chiavi degli account di servizio a favore di meccanismi di autenticazione più sicuri. Questi amministratori della sicurezza potrebbero responsabile della sicurezza dei carichi di lavoro di produzione esistenti, flussi di lavoro e processi interni che usano chiavi degli account di servizio.
Panoramica
La rimozione delle chiavi degli account di servizio dai carichi di lavoro 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 prevede tre fasi:
- Valutazione: in questa fase, valuti il tuo ambiente esistente per comprendere dove esistono le chiavi dell'account di servizio e se le chiavi sono in uso.
- Pianificare: in questa fase, sei tu a decidere di quali controlli eseguire il deployment e comunicare il piano di migrazione agli stakeholder.
- Deployment: in questa fase inizi a eseguire il refactoring dei carichi di lavoro per eseguire l'autenticazione con alternative più sicure alle chiavi degli account di servizio. Inoltre, crei funzionalità aggiuntive per monitorare continuamente l'ambiente e e rischi futuri.
Valutare l'utilizzo delle chiavi dell'account di servizio
In questa fase, valuterai l'ambiente esistente per capire dove si trovano dell'account e se le chiavi sono in uso.
Le seguenti sezioni descrivono i dati che puoi raccogliere per comprendere meglio come vengono usate le chiavi degli account di servizio nella tua organizzazione.
Raccogliere dati sull'utilizzo delle chiavi
Innanzitutto, identifica dove esistono le chiavi degli account di servizio e come vengono utilizzate.
Google Cloud fornisce strumenti per comprendere l'utilizzo degli account di servizio. Questi strumenti ti aiutano a determinare quali account di servizio e chiavi sono stati utilizzati di recente per l'autenticazione, quali account di servizio non sono stati utilizzati negli ultimi 90 giorni e quali account di servizio hanno ruoli eccessivamente privilegiati.
Puoi combinare le informazioni di tutti questi strumenti per avere un quadro migliore di come vengono utilizzati gli account di servizio e le chiavi nella tua organizzazione. Ad esempio, di come combinare le informazioni provenienti da queste varie fonti in tutto puoi vedere l'architettura di riferimento di cui è possibile eseguire il deployment GitHub. Questa architettura di riferimento aggrega dati da vari strumenti e li esporta regolarmente in una tabella BigQuery per l'analisi.
L'architettura di riferimento esegue il deployment di una pipeline di dati che esegue query su Cloud Asset Inventory per identificare le chiavi dell'account di servizio nella tua organizzazione. La pipeline di dati combina poi questi dati con quelli relativi all'utilizzo delle chiavi e delle autorizzazioni per l'account associato. La tabella risultante, sa_key_usage
, ti consente
rispondere a domande come le seguenti:
- Quante chiavi permanenti sono state create? Questo numero può essere utile come metrica di alto livello per monitorare l'avanzamento della migrazione dalle chiavi.
- Quali progetti e account di servizio utilizzano le chiavi? Queste informazioni ti aiutano a identificare i proprietari dei carichi di lavoro che utilizzano le chiavi degli account di servizio.
- Quali chiavi sono inattive? Probabilmente puoi eliminare queste chiavi senza da parte dei proprietari dei carichi di lavoro.
- Quali chiavi sono associate agli account di servizio che hanno suggerimenti sulle autorizzazioni in eccesso? Se una chiave dell'account di servizio è associata a un account di servizio con privilegi eccessivi, in particolare con un ruolo Proprietario, Editor o visualizzatore, la chiave potrebbe essere particolarmente rischiosa. Ricerca del servizio in corso... gli account con consigli sui ruoli possono aiutarti identificare gli account di servizio con privilegi eccessivi. Dopo aver identificato per questi account di servizio, potresti decidere di assegnare la priorità a questi carichi di lavoro migrazione. Puoi anche scegliere di applicare i suggerimenti sui ruoli ridurre in modo proattivo le autorizzazioni in eccesso.
Questa pipeline di dati viene eseguita ogni giorno e scrive in una data partizionata Tabella BigQuery. Puoi utilizzare questa tabella per esaminare account di servizio o chiavi specifici o per monitorare l'avanzamento della correzione utilizzando uno strumento dashboard come Looker Studio.
Arricchisci i dati sull'utilizzo delle chiavi con ulteriore contesto
Dopo aver creato il set di dati sull'utilizzo della chiave, puoi facoltativamente estenderlo con origini dati aggiuntive. Ti consigliamo di aggiungere le origini dati che utilizzi già per monitorare la governance e la provenienza delle risorse. A seconda della configurazione attuale governance, potresti aggiungere altri dati come i seguenti:
- Informazioni sulla proprietà da un database di gestione della configurazione (CMDB) o un sistema simile.
- Informazioni di governance configurate nelle etichette del progetto, ad esempio il team o un centro di costo responsabile di un progetto.
- Informazioni sull'ambiente delle chiavi utilizzate per i carichi di lavoro in ambienti esterni a Google Cloud.
Crea un piano per ridurre l'utilizzo delle chiavi dell'account di servizio
Prima di poter eseguire il deployment delle modifiche al fine di ridurre l'utilizzo delle chiavi dell'account di servizio, è necessario per determinare quali carichi di lavoro e ambienti saranno interessati e in che modo applicare le modifiche in modo forzato. Devi inoltre comunicare questo piano e assicurarsi che i proprietari dei carichi di lavoro supportino il piano.
Le sezioni seguenti illustrano gli argomenti chiave che il tuo piano deve affrontare. Il tuo piano specifico varierà in base alle dimensioni della tua organizzazione e ai requisiti specifici dei tuoi carichi di lavoro.
Decidere la responsabilità dei proprietari attuali dei carichi di lavoro
Sebbene un team di sicurezza centrale possa valutare quali chiavi esistono, una migrazione di successo richiede l'impegno dei proprietari dei carichi di lavoro. Per le chiavi nell'ambito della migrazione, i proprietari dei carichi di lavoro devono determinare quale dei metodi di autenticazione disponibili funziona per il loro caso d'uso, quindi eseguire la migrazione.
Valuta come bilanciare i miglioramenti alla security posture esistente con l'impegno richiesto dai proprietari dei carichi di lavoro. Le seguenti sezioni descrivono due approcci di esempio: uno che dà la massima priorità ai miglioramenti alla sicurezza e che dà la massima priorità a ridurre al minimo lo sforzo del carico di lavoro proprietari. L'approccio effettivo potrebbe variare, ad esempio potresti decidere di selezionare singolarmente i carichi di lavoro che rientrano nell'ambito.
Esempio: tutti i carichi di lavoro attuali vengono valutati per la migrazione
Un possibile approccio è applicare i controlli delle chiavi degli account di servizio a tutti carichi di lavoro esistenti e futuri. Ciò comporta passaggi come i seguenti:
- Collaborare con i proprietari dei carichi di lavoro per valutare il loro utilizzo delle chiavi per gli account esistenti carichi di lavoro con scale out impegnativi.
- Richiedendo che i proprietari dei carichi di lavoro eseguano la migrazione di tutti i carichi di lavoro esistenti con l'utilizzo delle chiavi, a meno che non sia stata concessa un'eccezione.
- Impedire a tutti i carichi di lavoro futuri di utilizzare le chiavi degli account di servizio, a meno che non sia stata concessa un'eccezione.
Questo approccio dà la priorità ai miglioramenti alla security posture esistente, ma richiede un maggiore impegno da parte di sviluppatori e proprietari dei carichi di lavoro nel breve periodo. A eseguire correttamente un piano come questo, devi avere un impegno dal carico di lavoro per la revisione e il refactoring dei carichi di lavoro.
Esempio: nessun carico di lavoro attuale viene valutato per la migrazione
Un altro approccio è consentire ai carichi di lavoro esistenti un'eccezione automatica continuare a utilizzare le chiavi degli account di servizio e applicare nuovi controlli solo in futuro carichi di lavoro con scale out impegnativi.
Questo approccio migliora la postura di sicurezza dei carichi di lavoro futuri e riduce al minimo la responsabilità degli attuali proprietari dei carichi di lavoro. Tuttavia, non migliora la postura di sicurezza dei carichi di lavoro esistenti.
Identifica 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 essere in grado di rimuoverla in sicurezza senza dover eseguire la migrazione a un altro meccanismo di autenticazione.
Crea un elenco di chiavi che soddisfano questi criteri. Utilizzerai questo elenco durante fase di deployment per eliminare le chiavi non necessarie. Prima di aggiungere una chiave all'elenco, verificare se ci sono casi d'uso che richiedono della chiave dell'account di servizio raramente, ad esempio l'accesso in produzione di emergenza che si basa e gestire le chiavi account di servizioo.
Pianificare dove applicare le modifiche ai criteri dell'organizzazione
Per eseguire correttamente la migrazione dall'utilizzo delle chiavi degli account di servizio, devi
impedire la creazione di nuove chiavi. Durante la fase di deployment, applichi
iam.disableServiceAccountKeyCreation
vincolo dei criteri dell'organizzazione per impedire la creazione di un nuovo account di servizio
chiave.
Anche se questo vincolo non impedisce l'utilizzo delle chiavi esistenti, potrebbe interrompere i carichi di lavoro esistenti che ruotano regolarmente le chiavi. Prima di iniziare la fase di implementazione, decidi dove applicarla nella gerarchia delle risorse per ridurre al minimo le interruzioni.
Ti consigliamo di applicare inizialmente il vincolo a livello di progetto o cartella anziché a livello di organizzazione. Ad esempio, puoi applicare vincolo sulla cartella utilizzata per l'ambiente di sviluppo prima del deployment nelle cartelle di produzione. Oppure, in una grande organizzazione con molti team, il vincolo su una cartella per un singolo team, quindi per le cartelle aggiuntive quando ne esegui la migrazione.
Puoi utilizzare i criteri dell'organizzazione con tag per applicare i criteri dell'organizzazione in modo condizionale a livello di progetto o cartella.
Progettare un processo di eccezione
Sebbene l'obiettivo di questa migrazione sia ridurre o eliminare l'account di servizio utilizzo della chiave, esistono alcuni casi d'uso legittimi che richiedono un account di servizio chiave. Anche se nessun carico di lavoro esistente richiede chiavi dell'account di servizio, è possibile che i carichi di lavoro futuri lo richiedano. È quindi necessario definire un processo operativo valutare e approvare le eccezioni per i casi d'uso che richiedono chiavi degli account di servizio.
Definisci un processo per consentire ai proprietari dei carichi di lavoro di richiedere un'eccezione che consenta ai loro per utilizzare le chiavi degli account di servizio. Assicurati che i responsabili decisionali incaricati di concedere un'eccezione dispongano delle conoscenze tecniche per convalidare il caso d'uso, consulta i proprietari dei carichi di lavoro su quale delle alternative più sicure alle chiavi dei service account potrebbe essere più appropriata e consiglia ai proprietari dei carichi di lavoro le best practice per la gestione delle chiavi dei service account.
Comunica le modifiche imminenti ai proprietari dei carichi di lavoro
Dopo aver progettato un piano, devi comunicarlo chiaramente all'interno della tua organizzazione e assicurarti che le parti interessate, in particolare i responsabili senior, siano disposte a impegnarsi per la migrazione.
Anche se i dettagli specifici della migrazione possono variare per la tua organizzazione, prendi in considerazione includere i seguenti argomenti nel tuo piano di comunicazione:
- L'impatto negativo che le chiavi dei service account non sicure possono avere sull'organizzazione e le motivazioni che ti spingono a eseguire la migrazione dalle chiavi dei service account.
- I nuovi controlli di sicurezza per impedire la creazione di chiavi dell'account di servizio e in che modo questo può influire sui processi esistenti.
- Indicazioni per gli sviluppatori nell'identificazione di alternative più sicure al servizio chiavi dell'account.
- La procedura per consentire ai team di richiedere un'eccezione per le chiavi del service account, incluso la frequenza con cui questa eccezione viene rivalutata.
- La tempistica per l'applicazione delle modifiche proposte.
Collabora con i proprietari dei carichi di lavoro per perfezionare il piano e assicurarti che funzioni in tutti dell'organizzazione.
Esegui il deployment dei controlli e ristruttura i carichi di lavoro
Dopo aver creato un piano e averlo comunicato ai proprietari dei carichi di lavoro, puoi iniziare a eseguire la migrazione dalle chiavi dell'account di servizio.
In questa fase, inizi a eseguire il refactoring dei carichi di lavoro per autenticarli con alternative più sicure alle chiavi dell'account di servizio. Crei anche funzionalità aggiuntive per di monitorare costantemente il tuo ambiente e mitigare i rischi futuri.
Le sezioni seguenti descrivono i passaggi che puoi eseguire per eseguire il refactoring dei carichi di lavoro e ed eliminare le chiavi con interruzioni minime. Puoi scegliere di svolgere questi passaggi in qualsiasi ordine, in base alla priorità e allo sforzo richiesti per la tua organizzazione.
Applica i controlli per interrompere la creazione di nuove chiavi dell'account di servizio
Per interrompere la creazione di nuove chiavi dell'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 esenti dal criterio. Potresti consentire delle eccezioni per i carichi di lavoro esistenti che non sono in grado di eseguire la migrazione dalle chiavi dell'account di servizio o per i nuovi carichi di lavoro che hanno un motivo legittimo per autenticarsi solo con le chiavi dell'account di servizio.
Dopo aver aggiunto i tag ai progetti e alle cartelle esenti, puoi impostare un regolamento dell'organizzazione con tag per applicare il vincolo iam.disableServiceAccountKeyCreation
ai progetti e alle cartelle non esenti.
Per impedire la creazione di chiavi degli account di servizio in tutti i progetti non esenti e cartelle, procedi nel seguente modo:
- Assicurati di disporre dei ruoli IAM necessari per gestire i tag e gestire i criteri dell'organizzazione a livello di organizzazione.
-
A livello di organizzazione, crea una chiave e un valore del tag che utilizzerai per definire se un progetto o una cartella deve essere esente dal criterio dell'organizzazione. Consigliamo di creare un tag con la chiave
disableServiceAccountKeyCreation
e i valorienforced
enot_enforced
.Per informazioni su come creare chiavi e valori dei tag, consulta la sezione Creazione e definizione di un nuovo tag.
-
Collega il tag
disableServiceAccountKeyCreation
all'organizzazione e impostane il valore suenforced
. Tutti i progetti o le cartelle dell'organizzazione ereditano questo valore del tag, a meno che non venga sovrascritto con un valore del tag diverso.Per scoprire come associare i tag alle risorse, consulta Associare i tag alle risorse.
-
Per ogni progetto o cartella che vuoi escludere dal criterio dell'organizzazione, allega
disableServiceAccountKeyCreation
e imposta il valore sunot_enforced
. Impostare un valore del tag per un progetto o una cartella in questo modo sostituisce il valore del tag ereditato dall'organizzazione. -
Crea un criterio dell'organizzazione che impedisce la creazione di chiavi degli account di servizio per tutti di risorse, tranne quelle esenti. Questo criterio deve avere le seguenti regole:
-
Configura il vincolo
iam.disableServiceAccountKeyCreation
in modo che non sia applicato a tutte le risorse con il tagdisableServiceAccountKeyCreation: not_enforced
. La condizione in questa regola dovrebbe essere la seguente:resource.matchTag(\"ORGANIZATION_ID/disableServiceAccountKeyCreation\", \"not_enforced\")
-
Configura il vincolo
iam.disableServiceAccountKeyCreation
da applicare in modo forzato tutte le altre risorse.
Per scoprire come creare criteri dell'organizzazione con condizioni dei tag, consulta l'articolo sull'impostazione di criterio dell'organizzazione con tag.
-
Correggere i carichi di lavoro esistenti
Collabora con il carico di lavoro per ogni carico di lavoro che utilizza le chiavi dell'account di servizio proprietari di scegliere e implementare un metodo di autenticazione alternativo.
Quando accedi ai servizi Google Cloud utilizzando Google Cloud CLI, le librerie client di Cloud, che supportano Credenziali predefinite dell'applicazione (ADC) come Terraform o richieste REST, utilizza il seguente diagramma per aiutarti a scegliere :
Questo diagramma illustra le seguenti domande:
-
Stai eseguendo il codice in un ambiente di sviluppo per utente singolo, ad esempio la tua workstation,
Cloud Shell o un'interfaccia desktop virtuale?
- In caso affermativo, passa alla domanda 4.
- In caso contrario, passa alla domanda 2.
- Esegui codice in Google Cloud?
- In caso affermativo, vai alla domanda 3.
- In caso contrario, vai alla domanda 5.
- Esegui container in Google Kubernetes Engine o GKE Enterprise?
- In caso affermativo, utilizza la federazione delle identità per i carichi di lavoro per GKE per collegare gli account di servizio ai pod Kubernetes.
- In caso contrario, collega un account di servizio alla risorsa.
-
Il tuo caso d'uso richiede un account di servizio?
Ad esempio, se vuoi configurare l'autenticazione e l'autorizzazione in modo coerente per applicazioni in tutti gli ambienti.
- In caso contrario, utilizzare le credenziali utente.
- Se sì, rappresentare un account di servizio con credenziali utente.
-
Il tuo carico di lavoro si autentica con un provider di identità esterno che supporta la federazione delle identità per i carichi di lavoro?
- In caso affermativo, configura la federazione delle identità per i carichi di lavoro per consentire alle applicazioni in esecuzione on-premise o su altri provider cloud di utilizzare un account di servizio.
- In caso contrario, crea una chiave dell'account di servizio.
In alcuni casi, potresti non essere in grado di utilizzare metodi di autenticazione diversi da e gestire le chiavi account di servizioo. Esempi di casi in cui una chiave dell'account di servizio potrebbe essere l'unica sono le seguenti:
- Utilizzi prodotti commerciali standard (COTS) o applicazioni software-as-a-service (SaaS) che ti chiedono di inserire una chiave dell'account di servizio Google Cloud direttamente nella relativa interfaccia utente.
- Il tuo carico di lavoro viene eseguito al di fuori di Google Cloud e non è autenticato con un provider di identità in grado di supportare la federazione delle identità di carico di lavoro.
Se devi continuare a utilizzare le chiavi degli account di servizio, assicurati di seguire le best practice per la gestione delle chiavi degli account di servizio.
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.
Elimina le chiavi non necessarie
Se hai la certezza che una chiave dell'account di servizio non sia necessaria, eliminala la chiave. Le chiavi non necessarie includono:
Chiavi senza utilizzo recente o chiavi correlate a risorse inutilizzate, che che hai identificato nella sezione Identifica i risultati rapidamente del su questa pagina.
Chiavi per i carichi di lavoro di cui è stata eseguita la migrazione ad altri metodi di autenticazione.
Dopo aver eliminato tutte le chiavi dell'account di servizio in un progetto, assicurati che il vincolo
iam.disableServiceAccountKeyCreation
sia applicato per quel progetto. Se in precedenza il progetto era esente da questo vincolo, rimuovi il tag che ha consentito l'esenzione.
Per eliminare le chiavi in sicurezza, 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 disabilitato la chiave, attendi di verificare che la rimozione definitiva della chiave non causi problemi. quindi elimina la chiave. Se, dopo aver disabilitato la chiave, identifichi se si verificano problemi imprevisti, riattivare la chiave, risolvere i problemi e ripetere finché non riesci a eliminare la chiave in modo sicuro.
Utilizzare i controlli integrati per rispondere alle chiavi divulgate
Google Cloud offre diversi strumenti e servizi per aiutarti a rilevare e rispondere alle chiavi dell'account di servizio trapelate. Prova a usare i seguenti meccanismi per aiutarti a rispondere alle chiavi degli account di servizio divulgate:
- Abilita il rilevamento di anomalie di Security Command Center per eseguire la scansione del pubblico
i repository per le chiavi. Questa scansione crea un valore
account_has_leaked_credentials
per capire se vengono rilevate chiavi divulgate. - Esamina la protezione dal cryptomining di Security Command Center programma e di soddisfare i requisiti tecnici prerequisiti per l'idoneità. L'abuso del mining di criptovalute è un exploit comune se le credenziali vengono divulgate.
- Configura i Contatti necessari in modo che il team di sicurezza riceva notifiche di sicurezza da Google Cloud, inclusi gli abusi derivanti da chiavi compromesse. Assicurati che l'indirizzo email sia monitorato e non si basi su singoli utenti come singolo punto di errore.
Per scoprire di più sulla gestione degli incidenti, consulta Creare un processo collaborativo di gestione degli incidenti.
Miglioramenti continui alla gestione degli account di servizio
Ove possibile, implementa le best practice per la gestione delle chiavi degli account di servizio. Migliorare le procedure di gestione delle chiavi può contribuire a mitigare il rischio di eventuali chiavi di service account rimanenti nella tua organizzazione.
Passaggi successivi
- Best practice per l'utilizzo degli account di servizio
- Best practice per la gestione delle chiavi degli account di servizio
- Gestione delle credenziali Google Cloud compromesse