Déployer sur Cloud Run et afficher les insights sur la sécurité

Ce guide de démarrage rapide vous explique comment déployer une image de conteneur dans Cloud Run et afficher les insights sur la sécurité pour le déploiement dans l'onglet Sécurité de la consoleGoogle Cloud . Vous découvrirez comment :

  • Déployez une image sur Cloud Run à l'aide de Cloud Deploy. Cloud Deploy est un service Google Cloud qui automatise la diffusion de vos applications dans une série d'environnements cibles selon une séquence de promotions définie.
  • Consultez les insights de sécurité suivants pour le déploiement :

    • Informations sur l'identité et le chiffrement pour le déploiement.
    • Niveau SLSA (Supply-chain Levels for Software Artifacts), qui identifie le niveau d'assurance du déploiement.
    • Failles dans les artefacts de compilation.
    • Nomenclature logicielle (SBOM) pour les artefacts de compilation.
    • La provenance du build, qui est une collection de métadonnées vérifiables concernant un build. Il inclut des détails tels que les condensés des images compilées, les emplacements de la source d'entrée, la chaîne d'outils de compilation, les étapes de compilation et la durée de compilation.

Avant de commencer

  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. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com
  8. Install the Google Cloud CLI.

  9. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  10. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com
  14. Définir les paramètres par défaut

    1. Définissez une variable d'environnement pour l'ID de projet :

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

      gcloud config set deploy/region us-central1
      

    Accorder l'accès

    Attribuez des rôles IAM au compte de service Compute Engine par défaut. Cette autorisation est requise pour que Cloud Deploy puisse déployer des charges de travail dans Cloud Run.

     gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/clouddeploy.jobRunner"
     gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/iam.serviceAccountUser" \
         --project=$PROJECT_ID
     gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/run.developer"
    

    Si vous rencontrez des difficultés pour ajouter l'un de ces rôles, contactez l'administrateur de votre projet.

    Créer un dépôt Docker dans Artifact Registry

    1. Créez un dépôt Docker nommé containers à l'emplacement us-central1, avec comme description "dépôt Docker" :

      gcloud artifacts repositories create containers --repository-format=docker \
          --location=us-central1 --description="Docker repository"
      
    2. Vérifiez que votre dépôt a bien été créé :

      gcloud artifacts repositories list
      

      Vous devriez voir containers dans la liste des dépôts affichés.

    Préparer l'exemple d'application

    Vous aurez besoin d'un exemple de code source pour compiler et déployer. Dans cette section, vous allez cloner un dépôt source existant contenant un exemple de code Java.

    1. Clonez le dépôt contenant l'exemple de code Java :

      git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
      cd software-delivery-shield-demo-java/backend
      
    2. Mettez à jour cloudrun.clouddeploy.yaml pour remplacer PROJECT_ID par l'ID de votre projet :

      sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
      

    Compiler l'application

    1. Créez et conteneurisez l'application Java à l'aide de Cloud Build. La commande suivante compile et conteneurise l'application Java, puis stocke le conteneur compilé dans le dépôt Docker Artifact Registry :

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

      Une fois la compilation terminée, un message de réussite semblable à celui-ci s'affiche :

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

    Générer la SBOM pour l'image créée

    Une SBOM est un inventaire complet d'une application, qui identifie les packages sur lesquels votre logiciel s'appuie. Les contenus peuvent inclure des logiciels tiers provenant de fournisseurs, des artefacts internes et des bibliothèques Open Source.

    Générez la SBOM pour l'image que vous avez créée dans la section précédente :

    gcloud artifacts sbom export \
        --uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
    

    Déployer le conteneur sur Cloud Run à l'aide de Cloud Deploy

    1. Enregistrez votre pipeline et vos cibles auprès du service Cloud Deploy :

      gcloud deploy apply --file cloudrun.clouddeploy.yaml
      

      Vous disposez maintenant d'un pipeline avec des cibles, prêt à déployer votre application sur votre première cible.

    2. Pour vérifier que votre pipeline existe, accédez à la page Pipelines de livraison dans la console Google Cloud  :

      Ouvrir la page Pipelines de diffusion

      Le pipeline de livraison que vous venez de créer, cloudrun-guestbook-backend-delivery, s'affiche.

    3. Cliquez sur cloudrun-guestbook-backend-delivery pour suivre la progression. La page Détails du pipeline de diffusion s'ouvre.

    4. Dans Cloud Shell, créez une version dans Cloud Deploy :

      gcloud deploy releases create test-release-007 \
          --delivery-pipeline=cloudrun-guestbook-backend-delivery \
          --skaffold-file=cloudrun.skaffold.yaml \
          --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 Détails du pipeline de diffusion.

    5. Surveillez la vue Visualisation du pipeline sur la page Détails du pipeline de diffusion jusqu'à ce que le bouton Promouvoir s'affiche pour dev-cluster. Vous devrez peut-être actualiser la page.

    6. Sur la première cible de la visualisation du pipeline de diffusion, cloudrun-dev, cliquez sur Promouvoir.

      La boîte de dialogue Promouvoir la version s'affiche. Il affiche les détails de la cible vers laquelle vous effectuez la promotion.

    7. Cliquez sur Promouvoir.

      La version est désormais mise en file d'attente pour être déployée dans cloudrun-prod. Une fois le déploiement terminé, la visualisation du pipeline de livraison l'indique :

      Pipeline montrant la promotion de cloudrun-dev vers cloudrun-prod

    Afficher les insights sur la sécurité dans Cloud Deploy

    1. Ouvrez la page Pipelines de livraison de Cloud Deploy dans la consoleGoogle Cloud .

      Ouvrir la page Cloud Deploy

    2. Dans le tableau Pipelines de livraison, cliquez sur cloudrun-guestbook-backend-delivery.

    3. Sur la page Détails des pipelines de diffusion, cliquez sur test-release-008.

    4. Sur la page Informations sur la version, cliquez sur l'onglet Artefacts.

    5. Dans le tableau Générer des artefacts, recherchez la ligne avec l'artefact java-guestbook-backend, puis cliquez sur Afficher dans la colonne Informations sur la sécurité correspondante.

    L'onglet Sécurité s'affiche pour le déploiement.

    Onglet "Sécurité"

    L'onglet Insights sur la sécurité affiche les informations suivantes :

    • Niveau SLSA : cette compilation a atteint le niveau 3 de SLSA. Cliquez sur le lien En savoir plus pour en savoir plus sur ce niveau de sécurité.

    • Failles : toutes les failles détectées dans vos artefacts. Cliquez sur le nom de l'image (java-guestbook-backend) pour afficher les artefacts qui ont été analysés pour détecter les failles.

    • Dépendances pour les artefacts de compilation.

    • Informations sur le build : détails de la compilation, tels que le compilateur et le lien permettant d'afficher les journaux.

    Afficher les insights sur la sécurité dans Cloud Run

    1. Ouvrez la page Services de Cloud Run.

      Ouvrez la page "Services Cloud Run".

    2. Dans le tableau Services de Cloud Run, cliquez sur guestbook-backend-prod.

    3. Sur la page Informations sur le service, cliquez sur Révisions.

    4. Dans le panneau Révisions, cliquez sur Sécurité.

    L'onglet Sécurité s'affiche pour le déploiement.

    Onglet "Sécurité"

    L'onglet Insights sur la sécurité affiche les informations suivantes :

    • Identité et chiffrement : adresse e-mail du compte de service Compute Engine par défaut et clé de chiffrement utilisée pour le déploiement.

    • Niveau SLSA : cette compilation a atteint le niveau 3 de SLSA. Cliquez sur le lien En savoir plus pour en savoir plus sur ce niveau de sécurité.

    • Failles : toutes les failles détectées dans vos artefacts. Cliquez sur le nom de l'image (java-guestbook-backend) pour afficher les artefacts qui ont été analysés pour détecter les failles.

    • Dépendances pour les artefacts de compilation.

    • Informations sur le build : détails de la compilation, tels que le compilateur et le lien permettant d'afficher les journaux.

    Effectuer un nettoyage

    Pour éviter que les ressources utilisées dans cette démonstration soient facturées sur votre compte Google Cloud , supprimez le projet Google Cloud qui les contient.

    1. Désactivez l'API Container Scanning :

      gcloud services disable containerscanning.googleapis.com --force
      
    2. Supprimez le service Cloud Run guestbook-backend-dev :

      gcloud run services delete guestbook-backend-dev --region=us-central1 \
          --project=${PROJECT_ID}
      
    3. Supprimez le service guestbook-backend-prod :

      gcloud run services delete guestbook-backend-prod --region=us-central1 \
          --project=${PROJECT_ID}
      
    4. Supprimez le pipeline de livraison, y compris la version et les déploiements :

      gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \
          --force --region=us-central1 --project=${PROJECT_ID}
      

      Cette commande supprime le pipeline de livraison lui-même, ainsi que toutes les ressources release et rollout créées pour ce pipeline par la sécurité de la chaîne d'approvisionnement logicielle.

    5. Supprimez le dépôt Artifact Registry :

      gcloud artifacts repositories delete containers \
          --location=us-central1 --async
      

    Voilà ! Vous avez terminé le guide de démarrage rapide.

    Étapes suivantes