Eseguire la migrazione dalle chiavi dell'account di servizio

Le chiavi degli account di servizio vengono comunemente utilizzate per autenticarsi ai serviziGoogle Cloud . Tuttavia, se non vengono gestiti correttamente, possono costituire anche un rischio per la sicurezza, aumentando la vulnerabilità a minacce come la fuga di credenziali, l'escalation dei privilegi, la divulgazione di informazioni e la non ripudio.

In molti casi, puoi eseguire l'autenticazione con alternative più sicure 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 security posture riducendo l'utilizzo delle chiavi degli 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 degli account di servizio.

Panoramica

La rimozione delle chiavi dell'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 esistono le chiavi dell'account di servizio e se sono in uso.
  • Pianifica: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 eseguire l'autenticazione con alternative più sicure alle chiavi degli account di servizio. Inoltre, puoi creare funzionalità aggiuntive per monitorare continuamente il tuo ambiente e ridurre i rischi futuri.

Valutare l'utilizzo delle chiavi dell'account di servizio

In questa fase, valuta l'ambiente esistente per capire dove esistono le chiavi degli account di servizio e se sono in uso.

Le sezioni seguenti descrivono i dati che puoi raccogliere per comprendere meglio come vengono utilizzate le chiavi dell'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'account di servizio 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. Per un esempio di come combinare le informazioni di queste varie origini nell'intera organizzazione, consulta l'architettura di riferimento di cui è possibile eseguire il deployment 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 esegue il deployment di una pipeline di dati che esegue query su Cloud Asset Inventory per identificare le chiavi degli 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 aiuta a 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 durante la 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? È probabile che tu possa eliminare queste chiavi senza ulteriore valutazione da parte dei proprietari dei carichi di lavoro.
  • Quali chiavi sono associate agli account di servizio per i quali sono disponibili consigli 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. La ricerca di account di servizio con suggerimenti sui ruoli può aiutarti a identificare gli account di servizio con privilegi eccessivi. Dopo aver identificato questi account di servizio, puoi decidere di dare la priorità a questi carichi di lavoro per la migrazione. Puoi anche scegliere di applicare i suggerimenti sui ruoli per promuovere in modo proattivo la riduzione delle autorizzazioni in eccesso.

Questa pipeline di dati viene eseguita ogni giorno e scrive in una tabella BigQuery partizionata in base alla data. 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.

Arricchire i dati sull'utilizzo delle chiavi con un contesto aggiuntivo

Dopo aver raccolto i dati sull'utilizzo delle chiavi, puoi facoltativamente arricchirli con altre origini dati. Ti consigliamo di aggiungere le origini dati che utilizzi già per monitorare la governance e la provenienza delle risorse. A seconda della governance esistente, potresti aggiungere dati aggiuntivi, ad esempio:

  • Informazioni sulla proprietà da un database di gestione della configurazione (CMDB) o un sistema simile.
  • Informazioni di governance configurate nelle etichette dei progetti, ad esempio 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 dell'account di servizio

Prima di poter implementare eventuali modifiche per ridurre l'utilizzo delle chiavi dell'account di servizio, devi determinare quali carichi di lavoro ed ambienti saranno interessati e come verranno applicate queste modifiche. Devi anche comunicare questo piano all'interno della tua attività e assicurarti che i proprietari dei workload lo supportino.

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 tua security posture esistente con l'impegno richiesto dai proprietari dei carichi di lavoro. Le sezioni seguenti descrivono due approcci di esempio: uno che dà la priorità ai miglioramenti della tua postura di sicurezza e uno che dà la priorità alla minimizzazione dell'impegno dei proprietari dei carichi di lavoro. L'approccio effettivo potrebbe variare, ad esempio potresti decidere di selezionare singolarmente i workload che rientrano nell'ambito.

Esempio: tutti i workload attuali vengono valutati per la migrazione

Un possibile approccio è applicare i controlli delle chiavi degli account di servizio per tutti i workload esistenti e futuri. Questo processo prevede i seguenti passaggi:

  • Collaborazione con i proprietari dei carichi di lavoro per valutare il loro utilizzo principale per i carichi di lavoro esistenti.
  • Richiedere ai proprietari di eseguire la migrazione di tutti i carichi di lavoro esistenti con utilizzo della chiave, 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 della tua strategia di sicurezza esistente, ma richiede un maggiore impegno da parte degli sviluppatori e dei proprietari dei carichi di lavoro a breve termine. Per eseguire correttamente un piano come questo, devi avere l'impegno dei proprietari dei carichi di lavoro a partecipare alla revisione e al 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 per continuare a utilizzare le chiavi dell'account di servizio e applicare nuovi controlli solo ai carichi di lavoro futuri.

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 dover eseguire ulteriori operazioni 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 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 dell'account di servizio di rado, ad esempio l'accesso di emergenza in produzione che si basa su chiavi dell'account di servizio.

Pianificare dove applicare le modifiche alle norme dell'organizzazione

Per eseguire la migrazione dall'utilizzo delle chiavi dell'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 dell'account di servizio.

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 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 prima applicare il vincolo a una cartella per un singolo team e poi applicarlo a cartelle aggiuntive durante 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 una procedura per le eccezioni

Sebbene lo scopo di questa migrazione sia ridurre o eliminare l'utilizzo delle chiavi degli account di servizio, esistono alcuni casi d'uso legittimi che richiedono le chiavi degli account di servizio. Anche se nessun carico di lavoro esistente richiede chiavi dell'account di servizio, è possibile che i carichi di lavoro futuri lo richiedano. Di conseguenza, devi definire una procedura operativa per valutare e approvare le eccezioni per i casi d'uso che richiedono chiavi del account di servizio.

Definisci una procedura per consentire ai proprietari dei carichi di lavoro di richiedere un'eccezione che consenta al loro caricamento di lavoro di utilizzare le chiavi dell'account di servizio. Assicurati che i responsabili delle decisioni 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 account di servizio potrebbe essere più appropriata e consiglia ai proprietari dei carichi di lavoro le best practice per la gestione account di servizio account.

Comunicare 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 gli stakeholder, in particolare i responsabili senior, siano disposti a impegnarsi per la migrazione.

Sebbene i dettagli specifici della migrazione variano in base all'organizzazione, ti consigliamo di includere i seguenti argomenti nel piano di comunicazione:

  • L'impatto negativo che le chiavi dei account di servizio 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 sulle procedure esistenti.
  • Indicazioni per gli sviluppatori per identificare alternative più sicure alle chiavi degli account di servizio.
  • La procedura per consentire ai team di richiedere un'eccezione per le chiavi del account di servizio, 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 tutta la tua organizzazione.

Esegui il deployment dei controlli e ristruttura i carichi di lavoro

Dopo aver creato un piano e averlo comunicato ai proprietari dei workload, 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. Inoltre, puoi creare funzionalità aggiuntive per monitorare continuamente il tuo ambiente e ridurre i rischi futuri.

Le sezioni seguenti descrivono i passaggi che puoi eseguire per eseguire il refactoring dei carichi di lavoro 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 dell'account di servizio in tutte le cartelle e i progetti non esenti, segui questi passaggi:

  1. Assicurati di disporre del ruolo Amministratore tag (roles/resourcemanager.tagAdmin) e del ruolo Amministratore criteri organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere i ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
  2. A livello di organizzazione, crea una chiave e un valore del tag che utilizzerai per definire se una risorsa deve essere esente dai criteri dell'organizzazione. Ti consigliamo di creare un tag con la chiave disableServiceAccountKeyCreation e i valori enforced e not_enforced.

    Per scoprire come creare chiavi e valori dei tag, consulta Creare e definire un nuovo tag.

  3. Collega il tag disableServiceAccountKeyCreation all'organizzazione e impostane il valore su enforced. Tutte le risorse 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.

  4. Per ogni progetto o cartella che vuoi esentare dai criteri dell'organizzazione, allega il tag disableServiceAccountKeyCreation e imposta il relativo valore su not_enforced. Impostare un valore del tag per un progetto o una cartella in questo modo sostituisce il valore del tag ereditato dall'organizzazione.
  5. Crea un criterio dell'organizzazione che impedisca la creazione di chiavi degli account di servizio per tutte le risorse, ad eccezione di quelle esenti. Queste norme devono avere le seguenti regole:

    • Configura il vincolo iam.disableServiceAccountKeyCreation in modo che non venga applicato alle risorse con il tag disableServiceAccountKeyCreation: not_enforced. La condizione in questa regola dovrebbe avere il seguente aspetto:

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
      
    • Configura il vincolo iam.disableServiceAccountKeyCreation da applicare su tutte le altre risorse.

Correggere i carichi di lavoro esistenti

Per ogni carico di lavoro che utilizza chiavi dell'account di servizio, collabora con i relativi proprietari per scegliere e implementare un metodo di autenticazione alternativo.

Quando accedi ai servizi Google Cloud utilizzando Google Cloud CLI, le librerie client di 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:

Struttura decisionale per la scelta del metodo di autenticazione in base al caso d'uso

Questo diagramma ti guida attraverso le seguenti domande:

  1. Esegui il codice in un ambiente di sviluppo monoutente, ad esempio la tua workstation, Cloud Shell o un'interfaccia desktop virtuale?
    1. In caso affermativo, vai alla domanda 4.
    2. In caso contrario, vai alla domanda 2.
  2. Esegui codice in Google Cloud?
    1. In caso affermativo, vai alla domanda 3.
    2. In caso contrario, vai alla domanda 5.
  3. Esegui container in Google Kubernetes Engine?
    1. In caso affermativo, utilizza Workload Identity Federation for GKE per collegare gli account di servizio ai pod Kubernetes.
    2. In caso contrario, collega un account di servizio alla risorsa.
  4. 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.

    1. In caso contrario, esegui l'autenticazione con le credenziali utente.
    2. In caso affermativo, assumi l'identità di un account di servizio con le credenziali utente.
  5. Il tuo carico di lavoro si autentica con un provider di identità esterno che supporta la federazione delle identità per i workload?
    1. 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.
    2. In caso contrario, crea una chiave dell'account di servizio.

In alcuni casi, potresti non essere in grado di utilizzare metodi di autenticazione diversi dalle chiavi dell'account di servizio. Di seguito sono riportati alcuni esempi in cui una chiave dell'account di servizio potrebbe essere l'unica opzione possibile:

  • Utilizzi prodotti commerciali standard (COTS) o applicazioni software-as-a-service (SaaS) che ti chiedono di inserire una chiave dell'account di servizioGoogle Cloud direttamente nell'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 workload.

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 non è necessaria una chiave dell'account di servizio, devi eliminarla. Le chiavi non necessarie includono:

  • Chiave senza utilizzo recente o chiavi correlate a risorse inutilizzate, che hai identificato nella sezione Identificare i risultati rapidi di 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 il progetto era precedentemente esente da questo vincolo, rimuovi il tag che consentiva 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 disattivato la chiave, aspetta di essere certo che la rimozione definitiva della chiave non causerà problemi, quindi eliminala. Se, dopo aver disattivato la chiave, identifichi problemi inaspettati, riattiva la chiave, risolvi i problemi e poi ripeti la procedura finché non puoi eliminare la chiave in sicurezza.

Utilizzare i controlli integrati per rispondere alle chiavi trapelate

Google Cloud offre strumenti e servizi per aiutarti a rilevare e rispondere alle chiavi di account di servizio trapelate. Valuta la possibilità di utilizzare i seguenti meccanismi per aiutarti a rispondere alle chiavi dell'account di servizio trapelate:

Per scoprire altre best practice per la gestione delle credenziali compromesse, consulta Gestire le credenziali compromesse Google Cloud.

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 account di servizio rimanenti nella tua organizzazione.

Passaggi successivi