Insights sur la sécurité de l'environnement d'exécution

1. Introduction

Dans cet atelier, vous allez déployer une application sur Cloud Run et un cluster GKE, puis afficher les insights sur la sécurité du déploiement dans Software Delivery Shield.

Points abordés

  • Informations de sécurité Artifact Registry
  • Insights sur la sécurité Cloud Run
  • Stratégie de sécurité GKE

2. Préparation

Configuration du projet Cloud

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Configuration de l'environnement

Activez Cloud Shell en cliquant sur l'icône à droite de la barre de recherche.

ecdc43ada29e91b.png

Dans Cloud Shell, activez les API requises pour cet atelier :

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

Si vous êtes invité à autoriser l'accès, cliquez sur "Autoriser" pour continuer.

6356559df3eccdda.png

Un message semblable à celui qui suit s'affiche pour vous indiquer que l'opération s'est correctement déroulée :

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

Exécutez la commande pour créer le cluster GKE de manière asynchrone. Vous en aurez besoin plus tard dans l'atelier :

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. Préparer l'application

Vous allez commencer par préparer une application Node.js simple basée sur Express et répondant aux requêtes HTTP.

Dans Cloud Shell, créez un répertoire nommé starter-nodejs, puis accédez-y :

mkdir starter-nodejs
cd starter-nodejs

Créez un fichier package.json en exécutant les commandes ci-dessous :

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

Le fichier ci-dessus contient une commande de script de démarrage et une dépendance associée au framework d'application Web Express.

Dans le même répertoire, créez ensuite un fichier index.js en exécutant les commandes ci-dessous :

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT. Votre application est maintenant terminée. Elle est prête à être conteneurisée et déployée.

4. Déployer une application Cloud Run

Exécutez la commande ci-dessous pour déployer votre application :

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

Confirmez la création du dépôt Artifact Registry :

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Insights sur la sécurité d'Artifact Registry et de Cloud Build

La compilation prend quelques minutes.

Ouvrez Cloud Build et examinez les artefacts de compilation de la dernière compilation.

L'interface utilisateur Cloud Build de la console Google Cloud contient le panneau "Insights de sécurité Software Delivery Shield", qui affiche des informations de sécurité liées à la compilation, telles que le niveau SLSA, les éventuelles failles dans les dépendances et la provenance du build.

7d9fd2213f3704c4.png

Examinez les informations de sécurité pour l'image de conteneur créée. Cliquez sur le lien des artefacts analysés pour afficher les détails des failles de cette image dans Artifact Registry.

Revenez à la console Cloud Shell et vérifiez que le déploiement de l'application Cloud Run est terminé.

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. Insights sur la sécurité Cloud Run

Cloud Run contient un panneau de sécurité (preview) qui affiche des informations sur la sécurité de la chaîne d'approvisionnement logicielle, telles que des informations sur la conformité au niveau de compilation SLSA, la provenance du build et les failles détectées dans les services en cours d'exécution.

Ouvrez Cloud Run et consultez les insights sur la sécurité dans l'onglet "RÉVISIONS / SÉCURITÉ".

62a9f5d26207e58e.png

Ce panneau 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 est au niveau 3 de SLSA, qui identifie le niveau de maturité du processus de compilation logicielle conformément à la spécification SLSA.
  • Failles : toutes les failles détectées dans les dépendances des applications.
  • Informations sur le build : détails de la compilation, tels que le compilateur et le lien permettant d'afficher les journaux.
  • Provenance du build : provenance du build, qui est une collection de métadonnées vérifiables sur 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.

7. Stratégie de sécurité GKE

GKE peut évaluer votre stratégie de sécurité des conteneurs et vous fournir activement des conseils concernant les paramètres de cluster, la configuration des charges de travail et les failles. Il inclut le tableau de bord de la stratégie de sécurité (aperçu), qui analyse vos clusters et charges de travail GKE afin de vous fournir des recommandations concrètes et avisées pour améliorer votre stratégie de sécurité.

Au cours des étapes suivantes, vous allez déployer l'application sur le cluster GKE et examiner les informations sur la sécurité dans le tableau de bord de la stratégie de sécurité GKE.

Vérifiez que le cluster est prêt en exécutant la commande suivante :

gcloud beta container clusters list

Exemple de résultat :

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

Obtenez les identifiants et la configuration du cluster GKE :

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

Exécutez la commande pour déployer l'application à l'aide de l'image créée à l'étape précédente :

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

Les charges de travail GKE doivent idéalement disposer d'une configuration renforcée qui limite leur surface d'attaque. Il peut être difficile de vérifier manuellement les charges de travail des clusters pour détecter les problèmes de configuration à grande échelle. Le tableau de bord de stratégie de sécurité vous permet d'analyser automatiquement la configuration de toutes vos charges de travail en cours d'exécution sur plusieurs clusters. Vous pouvez ainsi renvoyer des résultats exploitables et quantifiables, ainsi que des recommandations avisées, pour améliorer votre stratégie de sécurité.

Activez l'analyse de la configuration des charges de travail :

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

En plus d'analyser la configuration des charges de travail, vous pouvez également activer l'analyse des failles des charges de travail et consulter les résultats dans le tableau de bord de stratégie de sécurité. Il s'agit d'un ensemble de fonctionnalités qui fournissent des informations et des recommandations pour améliorer la sécurité de vos clusters et charges de travail GKE.

GKE analyse automatiquement les images de conteneur dans chaque pod éligible exécuté dans votre cluster GKE à la recherche de failles connues, en utilisant les données de faille des bases de données CVE publiques telles que NIST.

Si une faille est détectée dans vos images de conteneur, GKE attribue une évaluation de gravité et affiche les résultats dans le tableau de bord de stratégie de sécurité dans la console Google Cloud. GKE ajoute également des entrées à Cloud Logging pour le traçage et l'audit.

Activez l'analyse des failles des charges de travail :

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

Ouvrez la page Stratégie de sécurité de GKE.

Attendez quelques minutes que l'audit de charge de travail soit terminé, puis examinez les résultats.

5b1b8158bc55ce67.png

Examinez les problèmes de configuration et les charges de travail concernées.

58e6f4b6d8eaa99a.png

Pourquoi utiliser le tableau de bord de stratégie de sécurité

Le tableau de bord de stratégie de sécurité est une mesure de sécurité de base que vous pouvez activer pour n'importe quel cluster GKE éligible. Google Cloud recommande d'utiliser le tableau de bord de stratégie de sécurité dans tous vos clusters pour les raisons suivantes :

  • Perturbations minimales : les fonctionnalités n'interfèrent pas avec les charges de travail en cours d'exécution et ne les perturbent pas.
  • Recommandations exploitables : lorsqu'il est disponible, le tableau de bord de stratégie de sécurité fournit des actions permettant de résoudre les problèmes détectés. Ces actions incluent des commandes que vous pouvez exécuter, des exemples de modifications de configuration à effectuer et des conseils sur la manière de limiter les failles.
  • Visualisation : le tableau de bord de stratégie de sécurité fournit une vue d'ensemble des problèmes qui affectent les clusters de votre projet. Il inclut des graphiques indiquant la progression que vous avez effectuée et l'impact potentiel de chaque problème.
  • Résultats avisés : GKE attribue un niveau de gravité aux problèmes détectés en fonction de l'expertise des équipes de sécurité et des normes du secteur de Google.
  • Journaux d'événements auditables : GKE ajoute toutes les préoccupations découvertes à Logging pour améliorer la création de rapports et l'observabilité.

8. Félicitations !

Félicitations ! Vous avez terminé l'atelier de programmation.

Points abordés

  • Informations sur les insights de sécurité pour les artefacts de compilation et les applications exécutées sur Cloud Run et GKE

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

—

Dernière mise à jour : 21/03/2023