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

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

78605f82de8b2ea497603533d022f1e0?s=47 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…

78605f82de8b2ea497603533d022f1e0?s=128

WeScale

September 13, 2021
Tweet

Transcript

  1. Speakers : Mathieu Laude / Stéphane Teyssier Les mésaventures d’Alice

    et Bob au pays du cloud
  2. Vos t u 2

  3. Stéphane Teyssier 3 jerome.devoucoux@wescale.fr @jdxlabs Developer Technical consultant Infrastructure architect

    Cloud builder stephane.teyssier@wescale.fr 14 ans d’expérience
  4. Mathieu Laude 4 jerome.devoucoux@wescale.fr @jdxlabs Cloud Native Developer Technical consultant

    Docker and K8S trainer Automation lover mathieu.laude@wescale.fr @mkassovix
  5. “Accompagner nos clients, pour grandir ensemble” blog.wescale.fr WeSpeakCloud : Le

    podcast WeScaleTV Wttj WeScale 5
  6. 6

  7. https://www.wescale.fr/abhrashambhala

  8. 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
  9. Il éta e f ... 9

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

    Bob 10
  11. Alice Bob 11

  12. 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
  13. Un o ... 13

  14. 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
  15. Vo c e ’il es ar é ... 15

  16. Acte 1 Conteneuriser son application 16

  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. Open Policy Agent : exemple Les mésaventures d’Alice et Bob

    au pays du cloud 24
  25. 25 Acte 2 Construire des images immuables

  26. 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
  27. 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
  28. 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
  29. Image immuable Conteneur PROD DEV Conteneur Application V1 Application V1

    Les mésaventures d’Alice et Bob au pays du cloud 29
  30. 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
  31. 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
  32. 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
  33. 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 !
  34. 34 Acte 3 Maîtriser le paradigme serverless

  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. Acte 4 Chiffrer ses données

  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 48 Acte 5 Sécuriser ses secrets

  49. 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
  50. 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
  51. 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
  52. 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
  53. • 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
  54. 54 Acte 6 Automatiser comme un champion

  55. 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
  56. 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
  57. Automatisation Templates de plateforme Environnement Modules Valeurs Configurations * *

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

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

  62. 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
  63. Épilogue 63

  64. • 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
  65. Réclame -100 % https://info.wescale.fr/cloudradar-cloudnative-complet Les mésaventures d’Alice et Bob au

    pays du cloud 65
  66. Titre de la présentation Merci