Déployer une application sur GKE et consulter des insights sur la sécurité

Découvrez comment déployer un conteneur intentionnellement vulnérable sur un cluster GKE et obtenir des insights de sécurité sur la faille dans le tableau de bord de stratégie de sécurité. Le tableau de bord de stratégie de sécurité GKE affiche des informations sur les failles connues du système d'exploitation. Si vous souhaitez également analyser les failles du langage dans les packages Go ou Java, consultez la page Créer une application et afficher des insights sur la sécurité.

Objectifs

  • Créer une application conteneurisée et la transférer vers Artifact Registry à l'aide de Cloud Build
  • Créer un pipeline de livraison dans Cloud Deploy
  • Déployer l'application sur un cluster GKE de préproduction et la promouvoir en cluster de production
  • Affichez des insights sur les failles de l'application déployée à l'aide du tableau de bord de stratégie de sécurité de la console Google Cloud.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Activer les API Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis :

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  7. Installez Google Cloud CLI.
  8. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  9. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  10. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  11. Activer les API Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis :

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Préparer votre environnement

  1. Définissez votre ID de projet en tant que variable d'environnement :

    export PROJECT_ID=$(gcloud config get project)
    
  2. Définissez la région Google Cloud par défaut pour Cloud Deploy:

    gcloud config set deploy/region us-central1
    
  3. Clonez le dépôt GitHub qui contient l'exemple de code pour cette tâche:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd ~/software-delivery-shield-demo-java/backend
    
  4. Créer un compte de service IAM pour votre cluster GKE

    à utiliser:

    gcloud iam service-accounts create sds-runtime \
        --display-name="SDS with GKE service account"
    
  5. Accordez des autorisations au compte de service 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. Accordez au compte de service Compute Engine par défaut l'accès aux clusters GKE. Cloud Deploy utilise cet accès pour déployer des applications sur les clusters de votre pipeline de livraison.

    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
    

Créer le dépôt Artifact Registry pour votre image

  1. Créez le dépôt :

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="SDS with GKE repository"
    
  2. Vérifiez que le dépôt existe:

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

    Le résultat affiche le dépôt containers que vous avez créé.

Créer les clusters GKE

Créez deux clusters GKE : un cluster de préproduction nommé dev-cluster et un cluster de production nommé prod-cluster. Dans Autopilot, l'analyse des failles des charges de travail est automatiquement activée pour les nouveaux clusters exécutant la version 1.27 ou une version ultérieure. Si vous utilisez un cluster standard, spécifiez l'option --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 création du cluster peut prendre jusqu'à cinq minutes. Vous pouvez également activer l'analyse des failles des charges de travail en mettant à jour des clusters GKE existants.

Créer l'image

Créez et envoyez l'image à l'aide de Cloud Build:

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

Une fois la compilation terminée, le résultat ressemble à ce qui suit:

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

Déployer l'image sur GKE à l'aide de Cloud Deploy

  1. Mettez à jour le fichier de configuration Cloud Deploy avec l'ID de votre projet:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
    
  2. Enregistrez le pipeline et les cibles:

    gcloud deploy apply --file=clouddeploy.yaml
    
  3. Pour vérifier que votre pipeline existe, accédez à la page Pipelines de livraison de la console Google Cloud:

    Accéder à la page "Pipelines de livraison"

    La liste des pipelines affiche votre nouveau pipeline, guestbook-app-delivery.

  4. Cliquez sur le nom du pipeline pour suivre la progression. La page Détails du pipeline de livraison s'ouvre.

  5. Créez une version dans 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 nouvelle version apparaît dans la section Versions de la page Informations sur le pipeline de livraison.

  6. Sur la page Détails du pipeline de livraison, surveillez la vue Visualisation du pipeline jusqu'à ce que le bouton Promouvoir s'affiche pour dev-cluster. Vous devrez peut-être actualiser la page.

  7. Cliquez sur Promouvoir dans la visualisation dev-cluster.

  8. Dans le volet Promouvoir la version, cliquez sur Promouvoir pour confirmer la promotion sur votre cluster de production.

  9. Pour vérifier que votre release a bien été prise en compte, consultez la section Releases. La colonne Dernier état du déploiement affiche Successfully deployed to prod-cluster.

Afficher les failles

Dans cette section, vous allez afficher les insights sur les failles du système d'exploitation à l'aide du tableau de bord de stratégie de sécurité. Le tableau de bord affiche des informations sur les failles des charges de travail en cours d'exécution après leur déploiement sur vos clusters.

  1. Accédez à la page Stratégie de sécurité de GKE dans la console Google Cloud.

    Accéder à la page "Stratégie de sécurité de GKE"

  2. Pour afficher les résultats d'analyse, actualisez la page. L'analyse initiale peut prendre jusqu'à 15 minutes.

  3. Sur la page Stratégie de sécurité de GKE, consultez la section Failles de l'OS des charges de travail. Cette section liste les principales CVE affectant votre charge de travail déployée.

  4. Pour en savoir plus, cliquez sur Afficher tous les problèmes de failles. L'onglet Problèmes s'ouvre et applique un filtre pour le type de problème Vulnerability. Ce tableau offre un aperçu de chaque faille et de son impact.

  5. Pour en savoir plus sur une faille spécifique, cliquez sur le nom du problème dans le tableau. Le volet Vulnérabilité s'ouvre. Dans ce volet, vous pouvez effectuer les opérations suivantes:

    • Lisez une description détaillée de la CVE, y compris les versions, les packages et le score CVSS concernés.
    • Consultez les actions recommandées pour atténuer le problème, telles que la documentation et les informations sur la version du correctif.
    • Affichez les charges de travail spécifiques affectées par la faille dans l'onglet Charges de travail concernées.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

Supprimer des ressources individuelles

  1. Supprimez le pipeline Cloud Deploy :

    gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
    
  2. Supprimez les clusters GKE :

    gcloud container clusters delete dev-cluster \
        --region=us-central1
    gcloud container clusters delete prod-cluster \
        --region=us-central1
    
  3. Supprimez le dépôt Artifact Registry:

    gcloud artifacts repositories delete containers \
        --location=us-central1
    
  4. Supprimez le compte de service IAM:

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

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes