Creazione della pipeline di immagini sicure

Questa pagina spiega come configurare la pipeline di immagini sicure per automatizzare la generazione di immagini container di base.

Panoramica

La pipeline di immagini sicure è uno strumento open source che configura un framework di progetti, risorse e un repository GitHub di Google Cloud che puoi utilizzare per creare e gestire immagini di base personalizzate e sicure. Puoi utilizzare le immagini dei progetti Google Cloud.

L'immagine seguente illustra il framework di risorse create dalla pipeline di immagini sicura:

Pipeline di immagini sicura

Una volta configurata, la pipeline crea le seguenti risorse:

  • Un repository GitHub che ospita il codice sorgente per le immagini container.

  • Tre progetti Google Cloud: progetto di creazione, progetto di gestione temporanea e progetto verificato. Ogni volta che un'immagine viene aggiornata nel repository di immagini, i trigger di Cloud Build nel progetto di build creano, firma ed eseguono il push dell'immagine aggiornata nel repository Artifact Registry del progetto di gestione temporanea. Quando l'immagine nel progetto di gestione temporanea viene verificata manualmente, la pipeline ne esegue il push al progetto verificato.

Costi

La pipeline di immagini sicure utilizza i seguenti prodotti Google Cloud.

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

Autorizzazioni IAM richieste

L'utente che configura la pipeline per le immagini sicure richiede i ruoli Identity and Access Management roles/organization.admin e roles/billing.admin per l'organizzazione Google Cloud. Per istruzioni sulla concessione dei ruoli IAM, consulta Concessione, modifica e revoca dell'accesso.

Configurazione della pipeline di immagini sicura

Il repository GitHub della pipeline delle immagini sicure contiene lo script per automatizzare la generazione di immagini di base.

Per configurare la pipeline delle immagini sicura:

  1. Clona il repository GitHub della pipeline delle immagini sicure sulla tua macchina locale:

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. Vai alla directory secure-image-pipeline:

    cd secure-image-pipeline/
    
  3. Copia env.sh.tmpl in env.sh:

    cp env.sh.tmpl env.sh
    
  4. Apri env.sh nell'editor che preferisci.

  5. Modifica i seguenti valori:

    • PARENT_ORGANIZATION: inserisci l'ID della tua organizzazione Google Cloud. Lo script della pipeline dell'immagine sicura utilizza questa organizzazione per generare progetti e immagini di base di Google Cloud.
    • BASEIMGFCT_PROJECT: inserisci una stringa utilizzando la quale lo script crea gli ID dei progetti che crea. La stringa deve contenere da 6 a 30 lettere minuscole, cifre o trattini. Deve iniziare con una lettera e non può avere un trattino finale. Ad esempio, se specifichi foo, lo script crea tre progetti con ID foo-builder, foo-stage e foo-verified.
    • BASEIMGFCT_BUCKET: inserisci un nome per un bucket Cloud Storage creato dallo script per archiviare il codice di automazione Terraform. Assicurati che il nome soddisfi i requisiti di denominazione dei bucket.
    • BASEIMGFCT_REGION: inserisci il nome della regione da utilizzare o utilizza il valore predefinito.
    • BILLING_ACCOUNT: inserisci l'account di fatturazione associato all'organizzazione.
    • GITHUB_TOKEN: inserisci il token di accesso personale di GitHub. Lo script utilizza questo token per creare un repository GitHub contenente il codice sorgente per le immagini di base.
  6. Esegui lo script di configurazione:

    ./setup.sh
    
  7. Inserisci le seguenti informazioni sull'account GitHub quando richiesto:

    1. Il nome della tua organizzazione GitHub.

    2. Il tuo indirizzo email GitHub.

    3. Il tuo nome utente GitHub.

    4. Concedi l'autorizzazione allo script per creare un nuovo progetto in cui archiviare immagini di base.

    5. Inserisci "y".

    L'esecuzione di questa operazione richiede alcuni minuti. Al termine, viene visualizzato il messaggio Collega i repository GitHub e premi una chiave per continuare.

  8. Premi un tasto qualsiasi per continuare.

    Lo script apre una nuova finestra del browser della console Google Cloud per collegare il repository GitHub al tuo progetto Google Cloud.

  9. Passa alla finestra del browser della console Google Cloud.

  10. Nel popup Gestisci le installazioni di app GitHub, seleziona il tuo account GitHub.

  11. Fai clic su Aggiungi un altro progetto.

  12. Nel menu a discesa Seleziona un progetto, seleziona il progetto nel formato YOUR_PROJECT_NAME-builder.

  13. Seleziona la casella di controllo per il consenso e fai clic su Avanti.

  14. Nell'elenco dei repository, seleziona il repository denominato baseimgfact-[some number]-containers e fai clic su Connetti (1) repository.

  15. Nella pagina Crea trigger push, fai clic su Salta. Lo script crea automaticamente il trigger push.

  16. Fai clic su Fine.

  17. Torna al terminale.

  18. Premi un tasto qualsiasi per continuare.

L'esecuzione dello script richiede alcuni minuti.

Risorse create dalla pipeline di immagini sicura

Quando lo script di configurazione completa l'esecuzione, crea le seguenti risorse:

GitHub:

  • Un repository denominato baseimgfct-[some number]-containers che contiene il codice sorgente utilizzato per creare immagini container. Lo script setup nasconde questo repository con Dockerfile semplici, uno per ciascuna delle distribuzioni Linux più diffuse.
  • Chiavi di deployment: chiavi di deployment separate per l'accesso in scrittura per il repository.

Progetti Google Cloud:

  • Un progetto Google Cloud denominato YOUR_PROJECT_NAME-builder che contiene le risorse per creare ed eseguire il push di un'immagine nel progetto di gestione temporanea ogni volta che il codice sorgente viene aggiornato nel repository GitHub.

    Questo progetto contiene i trigger di Cloud Build che richiamano le build quando viene eseguita una richiesta di pull o un'unione nel ramo principale in baseimgfct-[some number]-containers. Viene creata una richiesta di pull e inviata le immagini al progetto di gestione temporanea. Un'unione crea ed esegue il push delle immagini al progetto verificato.

    Autorizzazioni IAM per YOUR_PROJECT_NAME-builder: ti consigliamo di concedere l'accesso a questo progetto solo ai membri del team che dovrebbero apportare modifiche alla pipeline. Per istruzioni su come concedere l'accesso ai progetti, consulta Concessione, modifica e revoca dell'accesso.

  • Un progetto Google Cloud denominato YOUR_PROJECT_NAME-stage che viene utilizzato per archiviare le immagini per una revisione manuale prima che le immagini vengano rilasciate nel progetto verificato. Questo progetto contiene le seguenti risorse:

    • Un repository Docker di Artifact Registry che contiene le immagini container create.
    • Cloud Functions per ogni immagine nel progetto, che attiva una rigenerazione dell'immagine ogni volta che viene rilevata una nuova correzione per una vulnerabilità nota.
    • Argomenti Pub/Sub utilizzati per eseguire le funzioni Cloud Functions.
    • Un'istanza del server coupon eseguito come deployment Cloud Run. Il server Voucher controlla l'immagine con un elenco di requisiti dei criteri di sicurezza. Puoi utilizzare i requisiti dei criteri predefiniti forniti con la pipeline o specificare un criterio di sicurezza personalizzato. Una volta superati i controlli di sicurezza, il server Voucher crea un'attestazione per l'immagine utilizzando Autorizzazione binaria. Questa immagine attestata, chiamata anche immagine firmata, viene quindi inviata al progetto verificato.

    Autorizzazioni IAM per YOUR_PROJECT_NAME-stage: ti consigliamo di concedere l'accesso per questo progetto solo agli sviluppatori autorizzati a leggere le immagini temporanee da Artifact Registry. Per istruzioni su come concedere l'accesso ai progetti, consulta Concessione, modifica e revoca dell'accesso.

  • Un progetto Google Cloud denominato YOUR_PROJECT_NAME-verified. Questo progetto contiene le immagini finali firmate che sono state esaminate manualmente.

Che cosa succede dopo?