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 le panneau "Sécurité" de Software Delivery Shield.
Points abordés
- Insights sur la sécurité d'Artifact Registry
- Insights sur la sécurité de Cloud Run
- Stratégie de sécurité GKE
2. Préparation
Configurer un projet Cloud
- 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.)



- 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 la 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 de votre 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 essayer de définir le vôtre et vérifier s'il est disponible. Il ne pourra plus être modifié après cette étape et restera le même pendant 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.
- 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 bénéficier du programme d'essai sans frais de 300$.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône à droite de la barre de recherche.

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, cliquez sur "Autoriser" pour continuer.

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. Il sera utilisé plus loin 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.
Ensuite, dans le même répertoire, créez 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 va écouter 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 l'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 prendra quelques minutes.
Ouvrez Cloud Build et examinez les artefacts de compilation pour la dernière compilation.
L'interface utilisateur de Cloud Build dans la console Google Cloud contient le panneau "Insights sur la sécurité" de Software Delivery Shield, qui affiche des informations sur la sécurité liées à la compilation, telles que le niveau SLSA, les failles dans les dépendances et la provenance de la compilation.

Examinez les insights sur la sécurité de l'image de conteneur créée. Suivez 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é de Cloud Run
Cloud Run contient un panneau de sécurité (aperçu) qui affiche des insights sur la sécurité de la chaîne d'approvisionnement logicielle, tels que des informations sur la conformité au niveau de compilation SLSA, la provenance de la compilation et les failles détectées dans les services en cours d'exécution.
Ouvrez Cloud Run et examinez les insights sur la sécurité sous l'onglet "RÉVISIONS / SÉCURITÉ".

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 SLSA 3, 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 de l'application.
- 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 de la compilation, qui est une collection de métadonnées vérifiables concernant une compilation. Elle 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 la stratégie de sécurité de vos 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 stratégie de sécurité (aperçu), qui analyse vos clusters et vos 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 insights sur la sécurité dans le tableau de bord de 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 examiner 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 avisées 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é GKE.
Patientez quelques minutes en attendant la fin de l'audit des charges de travail, puis examinez les résultats.

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

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 l'application exécutée 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