Slide 1

Slide 1 text

Speakers : Mathieu Laude / Stéphane Teyssier Les mésaventures d’Alice et Bob au pays du cloud

Slide 2

Slide 2 text

Vos t u 2

Slide 3

Slide 3 text

Stéphane Teyssier 3 [email protected] @jdxlabs Developer Technical consultant Infrastructure architect Cloud builder [email protected] 14 ans d’expérience

Slide 4

Slide 4 text

Mathieu Laude 4 [email protected] @jdxlabs Cloud Native Developer Technical consultant Docker and K8S trainer Automation lover [email protected] @mkassovix

Slide 5

Slide 5 text

“Accompagner nos clients, pour grandir ensemble” blog.wescale.fr WeSpeakCloud : Le podcast WeScaleTV Wttj WeScale 5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

https://www.wescale.fr/abhrashambhala

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Il éta e f ... 9

Slide 10

Slide 10 text

Les mésaventures d’Alice et Bob au pays du cloud Alice Bob 10

Slide 11

Slide 11 text

Alice Bob 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Un o ... 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Vo c e ’il es ar é ... 15

Slide 16

Slide 16 text

Acte 1 Conteneuriser son application 16

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Open Policy Agent : exemple Les mésaventures d’Alice et Bob au pays du cloud 24

Slide 25

Slide 25 text

25 Acte 2 Construire des images immuables

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Image immuable Conteneur PROD DEV Conteneur Application V1 Application V1 Les mésaventures d’Alice et Bob au pays du cloud 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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 !

Slide 34

Slide 34 text

34 Acte 3 Maîtriser le paradigme serverless

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Acte 4 Chiffrer ses données

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

48 Acte 5 Sécuriser ses secrets

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

● 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

Slide 54

Slide 54 text

54 Acte 6 Automatiser comme un champion

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Automatisation Templates de plateforme Environnement Modules Valeurs Configurations * * staging feat-A prod Les mésaventures d’Alice et Bob au pays du cloud 57

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

● Aucune BDD -> aucune application Les problèmes Applications pas encore ouvertes Les mésaventures d’Alice et Bob au pays du cloud 59

Slide 60

Slide 60 text

● 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

Slide 61

Slide 61 text

61

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Épilogue 63

Slide 64

Slide 64 text

● 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

Slide 65

Slide 65 text

Réclame -100 % https://info.wescale.fr/cloudradar-cloudnative-complet Les mésaventures d’Alice et Bob au pays du cloud 65

Slide 66

Slide 66 text

Titre de la présentation Merci