Share
Embed
Les mésaventures d'Alice et Bob au pays du Cloud
Alice et Bob en ont vécu des choses : il est bien loin le temps où ils ont commencé à travailler sur les algorithmes de chiffrement et les protocoles de communications. Aujourd'hui, ils travaillent pour la cloudnative company. Ils ont dû suivre les dernières tendances de l'IT. Mais cet apprentissage n'a pas été des plus simples ! Du déploiement d'un Pod de 10 conteneurs à une perte de données de Prod malencontreuse, voici quelques accrocs sur lesquels ils sont tombés…
WeScale
September 13, 2021
Transcript
66 slides
-
Speakers : Mathieu Laude / Stéphane Teyssier Les mésaventures d’Alice
et Bob au pays du cloud -
Stéphane Teyssier 3 [email protected] @jdxlabs Developer Technical consultant Infrastructure architect
Cloud builder [email protected] 14 ans d’expérience -
Mathieu Laude 4 [email protected] @jdxlabs Cloud Native Developer Technical consultant
Docker and K8S trainer Automation lover [email protected] @mkassovix -
“Accompagner nos clients, pour grandir ensemble” blog.wescale.fr WeSpeakCloud : Le
podcast WeScaleTV Wttj WeScale 5 -
Les mésaventures d’Alice et Bob au pays du cloud This
conference is inspired by true events. Some of the characters, names, businesses, incidents and certain locations and events have been fictionalized for dramatization purposes. Any similarity to the name, character or history of any person is entirely coincidental and unintentional. ✸✸ Disclaimer ✸✸ 8 -
Alice’s Public Key Alice’s Private Key message signature message signature
signature message Bob checks the signing with Alice’s public key Depuis 1978 Les mésaventures d’Alice et Bob au pays du cloud 12 -
Vite vite, nous sommes en retard dans notre move-to-cloud !
The Old School Company Whiterabbit Les mésaventures d’Alice et Bob au pays du cloud 14 -
J’ai créé un Pod avec les 10 services ça fonctionne
J’ai besoin de lancer mon application dans Kubernetes OK je déploie en Prod Les mésaventures d’Alice et Bob au pays du cloud 17 -
Je veux ajouter un conteneur Front pour tenir la charge
Facile, il suffit de demander à Kubernetes de créer un Pod supplémentaire Humm, cela va ajouter 10 conteneurs dont un pour la base SQL... Les mésaventures d’Alice et Bob au pays du cloud 18 -
Comment conteneuriser (ou pas…) Les mésaventures d’Alice et Bob au
pays du cloud Hyperviseur Application sur K8S Application historique Front API Base de données Pod Front API Base de données 19 -
Les problèmes Les mésaventures d’Alice et Bob au pays du
cloud Résilience • Pas de replica sur un autre noeud • Un Pod = un noeud Scalabilité • Plusieurs services couplés dans un Pod avec le même cycle de vie • Certains services ne sont pas facilement scalables (base de données…) • Impossibilité de renforcer uniquement le service Front 20 -
Comment conteneuriser Les mésaventures d’Alice et Bob au pays du
cloud Hyperviseur Front API Base de données Services Front API Base de données Pods Pods Pods Application sur K8S Application historique 21 -
Les palliatifs • Découper l’application en Services découplés et scalables
indépendamment les uns des autres • Implémenter une règle du nombre max de conteneurs par Pod via Open Policy Agent Les mésaventures d’Alice et Bob au pays du cloud 22 -
Open Policy Agent • Langage déclaratif pour définir des règles
• Intégrable à K8S comme Admission Controller • https://www.openpolicyagent.org/ Les mésaventures d’Alice et Bob au pays du cloud 23 -
Open Policy Agent : exemple Les mésaventures d’Alice et Bob
au pays du cloud 24 -
Il faut déployer cette application dans un conteneur On injecte
l’url de l’API en variable d’environnement Il faut lancer build pour la prendre en compte Les mésaventures d’Alice et Bob au pays du cloud 26 -
Image immuable (ou pas…) Conteneur PROD DEV Conteneur yarn build
Application V1 yarn build Application V1.01 Les mésaventures d’Alice et Bob au pays du cloud 27 -
Les problèmes • Build NPM à chaque démarrage ◦ Long
: téléchargement des node_modules = 12To (environ...) ◦ Inconsistent : risque de récupérer un paquet modifié (ou vérolé ?) ◦ Risqué : si registry NPM indisponible, démarrage KO • L’application en production n’est pas strictement celle testée en non-prod Les mésaventures d’Alice et Bob au pays du cloud 28 -
Image immuable Conteneur PROD DEV Conteneur Application V1 Application V1
Les mésaventures d’Alice et Bob au pays du cloud 29 -
Les palliatifs • Construire une image immuable ◦ Le résultat
du build est présent dans l’image finale : passer par un multi-staged build ◦ L’entrypoint sert uniquement à fournir les variables de RUN • Imposer une Egress NetworkPolicy qui bloque tout le trafic vers l’extérieur Les mésaventures d’Alice et Bob au pays du cloud 30 -
Multi-staged build : exemple # ========= BUILD IMAGE ========= FROM
node:16.3.0-alpine as builder COPY package.json . COPY yarn.lock . RUN yarn install --production=true ... RUN yarn build # ========= RUN IMAGE ========= FROM nginx COPY entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] COPY --from=builder /app/build /usr/share/nginx/html Les mésaventures d’Alice et Bob au pays du cloud 31 -
Entrypoint JS : exemple TARGET_FILE ="./env.js" echo "window.env = {"
> $TARGET_FILE awk -F '=' '!/(^$)|(^#.+)/ { print $1 ": " (ENVIRON[$1] ? "\""ENVIRON[$1]"\"" : $2) "," }' ./.env >> $TARGET_FILE echo "}" >> $TARGET_FILE window.env = { REACT_APP_GOOGLE_ID: "ID", REACT_APP_API_URL: "https://api.test.com" , REACT_APP_ADMIN_V3_URL: "https://admin.test.com" , REACT_APP_ENV: "prod", REACT_APP_LANG: "fr", } Dump des variables ENV... Les mésaventures d’Alice et Bob au pays du cloud /entrypoint.sh ./env.js … dans un objet JS chargé à l’exécution Source : https://github.com/kunokdev/cra-runtime-environment-variables/blob/master/env.sh 32 -
Network Policy : exemple apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name:
default-deny-egress spec: podSelector: {} policyTypes: - Egress Les mésaventures d’Alice et Bob au pays du cloud 33 ! -
Je veux lancer cette application Express.js dans une lambda J’ajoute
un handler pour lancer l’application à chaque requête C’est lent... Les mésaventures d’Alice et Bob au pays du cloud 35 -
Comment faire du Serverless (ou pas…) Les mésaventures d’Alice et
Bob au pays du cloud Nginx Application serverless Express.js : • Routing • Controllers Application historique Code métier Code métier Code métier Lambda Express.js : • Routing • Controllers HTTP HTTP Code métier Code métier Code métier 36 -
Les problèmes • Une application monolithique MVC n’est pas serverless
• Le temps de démarrage (cold start) est trop long pour du synchrone Les mésaventures d’Alice et Bob au pays du cloud 37 -
Comment faire du Serverless (ou pas…) Les mésaventures d’Alice et
Bob au pays du cloud Nginx Application serverless Express.js : • Routing • Controllers Application historique Code métier Code métier Code métier Lambda Lambda Lambda Code métier API Gateway • Routing • Controllers HTTP HTTP 38 -
Les palliatifs • Adapter le code ◦ Supprimer tout framework
◦ Utiliser le point d’entrée fourni par le provider (handler) ◦ Travailler pour avoir un temps d’exécution le plus court possible • Fixer un timeout d’exécution strict • Si Cold Start non compressible, voir pour un changement d’architecture ◦ Mode asynchrone ◦ Pas serverless Les mésaventures d’Alice et Bob au pays du cloud 39 -
La sécurité m’a demandé de chiffrer nos données Notre fournisseur
cloud propose un Key Management Service pour cela Oui oui, c’est fait. D’ailleurs nous utilisons notre propre clé - “contrainte sécu” Le contexte Les mésaventures d’Alice et Bob au pays du cloud 41 -
Key Management Service Rappels Data Encryption Key Encrypted Data Encryption
Key Private Key Encrypted Private Key Public Key KMS Master Key Les mésaventures d’Alice et Bob au pays du cloud 42 -
Key Management Service Utilisations KMS Master Key GenerateDataKey DecryptDataKey GenerateKeyPair
DecryptPrivateKey Server Side Encryption Client Side Encryption Custom Encryption Les mésaventures d’Alice et Bob au pays du cloud 43 -
Key Management Service Master Key KMS Master Key Service managed
Just use it! Customer managed Expiration Authorization BYOK Hardware controlled Certified solution Cloud operated BYOK Responsibility Customer controlled hardware External to Cloud HYOK Les mésaventures d’Alice et Bob au pays du cloud 44 -
Incident majeur ce week-end: BDD, VM et stockage objet KO
Un problème réseau, comme d’habitude ? Non, c’est le chiffrement, la clé a expirée et c’est Chuck qui l’avait générée... L’anecdote Les mésaventures d’Alice et Bob au pays du cloud 45 -
Les problèmes • Indisponibilité de services ◦ IaaS ◦ DBaaS
◦ Object Storage ◦ … • Indisponibilités des données ◦ Disques, BDD, fichiers ◦ Backups Récupération de la clé importée / re-création des BDD Les mésaventures d’Alice et Bob au pays du cloud 46 -
Les palliatifs • Pas de zèle sur la sécurité •
Être irréprochable sur la gestion des expirations ◦ Process ◦ Monitoring associé • Pôle sécurité opérationnel ◦ Gestion des clés de chiffrement Les mésaventures d’Alice et Bob au pays du cloud 47 -
Nous avons des secrets sur nos repos GIT Ok, on
va mettre en place une solution de gestion de secrets C’est pratique! Les mésaventures d’Alice et Bob au pays du cloud 49 -
Secret Manager Service Secret manager Rappels Certificates Keys Login Passwords
Tokens Authorization Log Rotation Applications CI/CD Operators Les mésaventures d’Alice et Bob au pays du cloud 50 -
Je ne retrouve pas le mot de passe admin pour
la base de prod Effectivement, on a perdu tous les mots de passe Dans les logs, je vois que Chuck a lancé un vault disable secrets Les mésaventures d’Alice et Bob au pays du cloud 51 -
Re génération de secrets à partir de l’InfraAsCode Les problèmes
• Déploiements en erreur ◦ Bases de données ◦ Comptes de services Cloud ◦ Comptes applicatifs • Indisponibilités des applications ◦ Composants éphémères ◦ Credentials expirés Les mésaventures d’Alice et Bob au pays du cloud 52 -
• Sauvegarde des secret managers • Identification du contexte CLI
◦ Helpers spécifiques • Restriction d’actions en prod ◦ Admin / Power-User / Read-Only ◦ Staging / Prod Les palliatifs Les mésaventures d’Alice et Bob au pays du cloud 53 -
Où en sommes nous de l’InfraAsCode ? 5 minutes pour
une plateforme. Tout est automatisé dans la CI/CD Super, on va gagner du temps! Les mésaventures d’Alice et Bob au pays du cloud 55 -
12 bases de données ont été supprimées hier soir Comment
c’est possible? A priori un refacto du code Infra Les mésaventures d’Alice et Bob au pays du cloud 56 -
Automatisation Templates de plateforme Environnement Modules Valeurs Configurations * *
staging feat-A prod Les mésaventures d’Alice et Bob au pays du cloud 57 -
Automatisation Templates de plateforme Approval ? Les mésaventures d’Alice et
Bob au pays du cloud IaC refactoring Specific values in prod only staging feat-A prod 58 -
• Aucune BDD -> aucune application Les problèmes Applications pas
encore ouvertes Les mésaventures d’Alice et Bob au pays du cloud 59 -
• Protéger les ressources longues à la création ◦ BDD,
Cache, Distribution CDN, VPN ◦ RetainPolicy dans InfraAsCode ◦ Authorization -> MFA • Backups ◦ ⚠ suppressions en cascade! • Pipelines dev/staging/prod ◦ non-auto on prod layers ◦ ex: Policy OpenPolicyAgent pour bloquer les plan comportant un destroy Les palliatifs Les mésaventures d’Alice et Bob au pays du cloud 60 -
Ali Bob t e t u de n i ...
Et i re d b e s ap c i s C u t e ! 62 -
• Pleins d’autres sujets non retenus • Certaines idées sont
à proscrire si mal maîtrisées ▪ serverless, chiffrement avec ses propres clés, ... • Everything fails all the time! (Shit happens) • Penser faiblement couplé Les mésaventures d’Alice et Bob au pays du cloud 1 index ES/pod Service transverse non-HA Image Registry change ses quotas Base de données exposées sur Internet 64