Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Les mésaventures d'Alice et Bob au pays du Cloud

WeScale
September 13, 2021

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
Tweet

More Decks by WeScale

Other Decks in Technology

Transcript

  1. 6

  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. Image immuable Conteneur PROD DEV Conteneur Application V1 Application V1

    Les mésaventures d’Alice et Bob au pays du cloud 29
  16. 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
  17. 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
  18. 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
  19. 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 !
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. • 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
  37. 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
  38. 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
  39. Automatisation Templates de plateforme Environnement Modules Valeurs Configurations * *

    staging feat-A prod Les mésaventures d’Alice et Bob au pays du cloud 57
  40. 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
  41. • Aucune BDD -> aucune application Les problèmes Applications pas

    encore ouvertes Les mésaventures d’Alice et Bob au pays du cloud 59
  42. • 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
  43. 61

  44. 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
  45. • 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