Esegui il deployment di un'app in GKE e visualizza gli insight sulla sicurezza

Scopri come eseguire il deployment di un container intenzionalmente vulnerabile in un cluster GKE e ottenere approfondimenti sulla sicurezza relativi alla vulnerabilità nella dashboard della security posture. La dashboard della postura di sicurezza di GKE mostra informazioni sulle vulnerabilità note del sistema operativo. Se vuoi anche l'analisi della lingua per le vulnerabilità nei pacchetti Go o Java, consulta Creare un'applicazione e visualizzare gli approfondimenti sulla sicurezza.

Obiettivi

  • Crea ed esegui il push di un'applicazione containerizzata in Artifact Registry utilizzando Cloud Build.
  • Crea una pipeline di distribuzione in Cloud Deploy.
  • Esegui il deployment dell'applicazione in un cluster GKE di staging e promuovila in un cluster di produzione.
  • Visualizza approfondimenti sulle vulnerabilità nell'applicazione di cui è stato eseguito il deployment utilizzando la dashboard di postura di sicurezza nella console Google Cloud .

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  14. Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.

    prepara l'ambiente

    1. Imposta l'ID progetto come variabile di ambiente:

      export PROJECT_ID=$(gcloud config get project)
      
    2. Imposta la regione Google Cloud predefinita per Cloud Deploy:

      gcloud config set deploy/region us-central1
      
    3. Clona il repository GitHub che contiene il codice campione per questa attività:

      git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
      cd ~/software-delivery-shield-demo-java/backend
      
    4. Crea un account di servizio IAM per GKE

      cluster da utilizzare:

      gcloud iam service-accounts create sds-runtime \
          --display-name="Security insights with GKE service account"
      
    5. Concedi le autorizzazioni al account di servizio IAM:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
          --role="roles/container.nodeServiceAccount"
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
          --role="roles/container.developer"
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
          --role="roles/artifactregistry.reader"
      
    6. Concedi all'account di servizio Compute Engine predefinito l'accesso ai cluster GKE. Cloud Deploy utilizza questo accesso per eseguire il deployment delle app nei cluster della pipeline di distribuzione.

      PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"
      gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
          --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \
          --role=roles/container.developer
      

    Crea il repository Artifact Registry per l'immagine

    1. Crea il repository:

      gcloud artifacts repositories create containers \
          --repository-format=docker \
          --location=us-central1 \
          --description="Security insights with GKE repository"
      
    2. Verifica che il repository esista:

      gcloud artifacts repositories list \
          --location=us-central1 \
          --filter="REPOSITORY:containers"
      

      L'output mostra il repository containers che hai creato.

    Crea i cluster GKE

    Crea due cluster GKE, un cluster di staging denominato dev-cluster e un cluster di produzione denominato prod-cluster. In Autopilot, l'analisi delle vulnerabilità dei workload viene attivata automaticamente per i nuovi cluster che eseguono la versione 1.27 e successive. Se utilizzi un cluster Standard, specifica il flag --workload-vulnerability-scanning=standard.

    gcloud container clusters create-auto dev-cluster \
        --region=us-central1 \
        --release-channel=rapid \
        --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    gcloud container clusters create-auto prod-cluster \
        --region=us-central1 \
        --release-channel=rapid \
        --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    

    La creazione del cluster può richiedere fino a cinque minuti. Puoi anche abilitare l'analisi delle vulnerabilità dei workload aggiornando i cluster GKE esistenti.

    Crea l'immagine

    Crea e invia l'immagine utilizzando Cloud Build:

    gcloud builds submit --region us-central1 --config cloudbuild.yaml
    

    Al termine della build, l'output è simile al seguente:

    DONE
    -----------------------------------------------------------------------------
    ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
    CREATE_TIME: 2022-09-19T15:41:07+00:00
    DURATION: 54S
    SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
    IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
    STATUS: SUCCESS
    

    Esegui il deployment dell'immagine in GKE utilizzando Cloud Deploy

    1. Aggiorna il file di configurazione di Cloud Deploy con l'ID progetto:

      sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
      
    2. Registra la pipeline e i target:

      gcloud deploy apply --file=clouddeploy.yaml
      
    3. Per verificare che la pipeline esista, vai alla pagina Pipeline di distribuzione nella console Google Cloud :

      Vai alle pipeline di pubblicazione

      L'elenco delle pipeline mostra la nuova pipeline, guestbook-app-delivery.

    4. Fai clic sul nome della pipeline per monitorare l'avanzamento. Viene visualizzata la pagina Dettagli della pipeline di pubblicazione.

    5. Crea una nuova release in Cloud Deploy:

      gcloud deploy releases create guestbook-release-001 \
          --delivery-pipeline=guestbook-app-delivery \
          --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
      

      La nuova uscita viene visualizzata nella sezione Uscite della pagina Dettagli della pipeline di distribuzione.

    6. Nella pagina Dettagli pipeline di distribuzione, monitora la visualizzazione Pipeline finché non viene visualizzato il pulsante Promuovi per dev-cluster. Potresti dover aggiornare la pagina.

    7. Fai clic su Promuovi nella visualizzazione dev-cluster.

    8. Nel riquadro Promuovi release, fai clic su Promuovi per confermare la promozione al cluster di produzione.

    9. Per verificare che la release sia andata a buon fine, controlla la sezione Release. La colonna Stato ultimo lancio mostra Successfully deployed to prod-cluster.

    Visualizza vulnerabilità

    In questa sezione, visualizza gli approfondimenti sulle vulnerabilità del sistema operativo utilizzando la dashboard di postura di sicurezza. La dashboard mostra informazioni sulle vulnerabilità nei carichi di lavoro in esecuzione dopo il deployment nei cluster.

    1. Vai alla pagina Postura di sicurezza GKE nella console Google Cloud .

      Vai alla strategia di sicurezza di GKE

    2. Per visualizzare i risultati della scansione, aggiorna la pagina. Il completamento della scansione iniziale potrebbe richiedere fino a 15 minuti.

    3. Nella pagina Postura di sicurezza di GKE, esamina la sezione Vulnerabilità del sistema operativo del workload. Questa sezione elenca le principali CVE che interessano il tuo workload di cui è stato eseguito il deployment.

    4. Per maggiori dettagli, fai clic su Visualizza tutti i problemi di vulnerabilità. Si apre la scheda Problemi e viene applicato un filtro per il tipo di problema Vulnerabilità. La tabella mostra una panoramica di ogni vulnerabilità e del suo impatto.

    5. Per visualizzare i dettagli di una vulnerabilità specifica, fai clic sul nome del problema nella tabella. Viene visualizzato il riquadro Vulnerabilità. In questo riquadro puoi:

      • Leggi una descrizione dettagliata del CVE, incluse le versioni e i pacchetti interessati e il punteggio CVSS.
      • Visualizza le azioni consigliate per mitigare il problema, ad esempio la documentazione e le informazioni sulla versione della patch.
      • Visualizza i workload specifici interessati dalla vulnerabilità nella scheda Workload interessati.

    Esegui la pulizia

    Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto Google Cloud con le risorse.

    Elimina singole risorse

    1. Elimina la pipeline Cloud Deploy:

      gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
      
    2. Elimina i cluster GKE:

      gcloud container clusters delete dev-cluster \
          --region=us-central1
      gcloud container clusters delete prod-cluster \
          --region=us-central1
      
    3. Elimina il repository Artifact Registry:

      gcloud artifacts repositories delete containers \
          --location=us-central1
      
    4. Elimina il account di servizio IAM:

      gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
      

    Elimina il progetto

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Passaggi successivi