Creazione della pipeline di immagini sicure

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene spiegato 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 che puoi utilizzare per creare e gestire immagini di base personalizzate e sicure. Puoi utilizzare le immagini dei progetti di Google Cloud.

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

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 temporaneo e progetto verificato. Ogni volta che un'immagine viene aggiornata nel repository di immagini, i trigger di Cloud Build nel progetto di build creano, firmano ed eseguono il push dell'immagine aggiornata al repository Artifact Registry nel progetto di gestione temporanea. Quando l'immagine nel progetto di gestione temporanea è verificata manualmente, la pipeline esegue il push dell'immagine al progetto verificato.

Costi

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

Usa il Calcolatore prezzi per generare una stima dei costi basata sull'utilizzo previsto.

Prima di iniziare

Autorizzazioni IAM richieste

L'utente che configura la pipeline di immagini sicure richiede i ruoli roles/organization.admin e roles/billing.admin Identity and Access Management per l'organizzazione Google Cloud. Per istruzioni sulla concessione dei ruoli IAM, consulta la pagina Concedere, modificare e revocare l'accesso.

Configurazione della pipeline immagine sicura

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

Per configurare la pipeline delle immagini sicure:

  1. Clona il repository GitHub della pipeline di 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 desiderato.

  5. Modifica i seguenti valori:

    • PARENT_ORGANIZATION: inserisci l'ID della tua organizzazione Google Cloud. Lo script della pipeline di immagini sicure utilizza questa organizzazione per generare progetti Cloud e immagini di base.
    • BASEIMGFCT_PROJECT: inserisci una stringa con cui lo script crea gli ID progetto dei progetti creati. La stringa deve contenere da 6 a 30 lettere minuscole, cifre o trattini. Deve iniziare con una lettera e non può contenere 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 per utilizzare o utilizzare il valore predefinito.
    • BILLING_ACCOUNT: inserisci l'account di fatturazione associato all'organizzazione.
    • GITHUB_TOKEN: inserisci il tuo token di accesso personale 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 allo script l'autorizzazione per creare un nuovo progetto in cui archiviare le immagini di base.

    5. Inserisci "y".

    L'operazione richiede alcuni minuti. Al termine, viene visualizzato il messaggio Collega i tuoi repository GitHub e premi un tasto qualsiasi per continuare.

  8. Premi un tasto qualsiasi per continuare.

    Lo script apre una nuova finestra del browser nella console Google Cloud per collegare il tuo repository GitHub al tuo progetto 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 Connect (1) repository.

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

  16. Fai clic su Fine.

  17. Torna al terminale.

  18. Premi un tasto qualsiasi per continuare.

Il completamento dello script richiede alcuni minuti.

Risorse create dalla pipeline di immagini sicure

Una volta completata l'esecuzione, lo script di configurazione crea le seguenti risorse:

GitHub:

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

Progetti Google Cloud:

  • Un progetto Cloud denominato YOUR_PROJECT_NAME-builder che contiene risorse per creare un'immagine ed eseguirne il push al progetto temporaneo 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 le immagini vengono inviate al progetto di gestione temporanea. Un'unione genera un'immagine e ne esegue il push 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 Concedere, modificare e revocare l'accesso.

  • Un progetto cloud denominato YOUR_PROJECT_NAME-stage che viene utilizzato per mettere in scena 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 del progetto, che attiva la ricostruzione dell'immagine ogni volta che viene trovata una nuova correzione per una vulnerabilità nota.
    • Argomenti Pub/Sub utilizzati per eseguire Cloud Functions.
    • Un'istanza del server Voucher che viene eseguita come deployment di Cloud Run. Il server del coupon verifica l'immagine con un elenco di requisiti dei criteri di sicurezza. Puoi utilizzare i requisiti dei criteri predefiniti inclusi nella pipeline o specificare un criterio di sicurezza personalizzato. Dopo aver superato i controlli di sicurezza, il server del voucher crea un'attestazione per l'immagine utilizzando Autorizzazione binaria. L'immagine attestata, chiamata anche immagine firmata, viene inviata automaticamente al progetto verificato.

    Autorizzazioni IAM per YOUR_PROJECT_NAME-stage: ti consigliamo di concedere l'accesso solo per questo progetto agli sviluppatori a cui è consentito leggere le immagini graduali da Artifact Registry. Per istruzioni sulla concessione dell'accesso ai progetti, vedi Concedere, modificare e revocare l'accesso.

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

Quali sono i passaggi successivi?