1. Introduction
Dans cet atelier, vous allez déployer une application sur un cluster Cloud Run et GKE et afficher les insights sur la sécurité pour le déploiement dans la solution de sécurité Software Delivery Shield.
Points abordés
- Insights sur la sécurité d'Artifact Registry
- Insights sur la sécurité dans Cloud Run
- Stratégie de sécurité GKE
2. Préparation
Configuration du 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 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. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. 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 arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône située à 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é à donner votre autorisation, 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 permettant de créer le cluster GKE de manière asynchrone. Nous l'utiliserons plus tard dans l'atelier:
gcloud beta container clusters create gke-cluster \
--zone us-central1-a \
--async
3. Préparer la demande
Tout d'abord, vous allez préparer une application Node.js simple basée sur Express, qui répond 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 vis-à-vis du 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 écoute le port défini par la variable d'environnement PORT. Votre application est maintenant terminée, et 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'UI Cloud Build de la console Google Cloud contient le panneau d'informations de sécurité Software Delivery Shield qui affiche des informations de sécurité liées à la compilation, telles que le niveau SLSA, les failles des dépendances et la provenance de la compilation.
Examinez les insights sur la sécurité pour l'image de conteneur créée. Suivez le lien vers les artefacts analysés pour afficher le détail 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é dans Cloud Run
Cloud Run contient un panneau de sécurité (Preview) qui affiche des insights sur la sécurité de la chaîne d'approvisionnement logicielle, tels que les informations de conformité SLSA au niveau de la compilation, la provenance de la compilation et les failles détectées dans les services en cours d'exécution.
Ouvrez Cloud Run et examinez Security Insights dans 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:ce build est au niveau SLSA 3, qui identifie le niveau de maturité du processus de création de logiciels conformément à la spécification SLSA.
- Failles:toute faille détectée dans les dépendances des applications.
- Informations sur la compilation:informations sur la compilation, telles que le compilateur et le lien pour afficher les journaux.
- Provenance de la compilation:collection de métadonnées vérifiables concernant une compilation. Il inclut des détails tels que les condensés des images compilées, les emplacements des sources 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 des conseils actifs sur les paramètres du cluster, la configuration des charges de travail et les failles. Elle inclut le tableau de bord de stratégie de sécurité (Preview) qui analyse vos clusters et charges de travail GKE pour vous fournir des recommandations avisées et exploitables afin d'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 de 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 permettant de 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
Dans l'idéal, les charges de travail GKE doivent disposer d'une configuration renforcée qui limite leur surface d'attaque. Il peut être difficile de vérifier manuellement à grande échelle les charges de travail sur les clusters pour détecter d'éventuels problèmes de configuration. Vous pouvez utiliser le tableau de bord de stratégie de sécurité pour analyser automatiquement la configuration de toutes vos charges de travail en cours d'exécution sur plusieurs clusters et renvoyer des résultats exploitables et évalués, 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 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é, un ensemble de fonctionnalités fournissant des informations avisées et des recommandations pour améliorer la sécurité de vos clusters et charges de travail GKE.
GKE analyse automatiquement les images de conteneurs dans chaque pod éligible exécuté dans votre cluster GKE à la recherche de failles connues, à l'aide de données sur les failles provenant de bases de données CVE publiques telles que NIST.
Si une faille est détectée dans vos images de conteneurs, GKE lui attribue un niveau de gravité et affiche les résultats dans le tableau de bord de stratégie de sécurité de la console Google Cloud. GKE ajoute également des entrées à Cloud Logging à des fins d'audit et de traçabilité.
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 la charge de travail se termine, 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: si disponible, le tableau de bord de stratégie de sécurité fournit des tâches pour résoudre les problèmes détectés. Ces actions incluent des commandes que vous pouvez exécuter, des exemples de modifications de configuration à apporter et des conseils sur les mesures à prendre pour limiter les failles.
- Visualisation: le tableau de bord de la stratégie de sécurité fournit une visualisation globale des problèmes affectant les clusters de votre projet. Il comprend des tableaux et des graphiques illustrant les progrès que vous avez réalisés et l'impact potentiel de chaque problème.
- Résultats avisés: GKE attribue un niveau de gravité aux problèmes découverts en fonction de l'expertise des équipes de sécurité de Google et des normes du secteur.
- Journaux d'événements vérifiables: GKE ajoute tous les problèmes détectés à Logging pour améliorer la facilité de 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 sur la 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