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. Speakers : Mathieu Laude / Stéphane Teyssier
    Les mésaventures d’Alice et Bob au
    pays du cloud

    View Slide

  2. Vos t u
    2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. 6

    View Slide

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

    View Slide

  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

    View Slide

  9. Il éta e f ...
    9

    View Slide

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

    View Slide

  11. Alice Bob
    11

    View Slide

  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

    View Slide

  13. Un o ...
    13

    View Slide

  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

    View Slide

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

    View Slide

  16. Acte 1
    Conteneuriser son
    application
    16

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  25. 25
    Acte 2
    Construire des images
    immuables

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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
    !

    View Slide

  34. 34
    Acte 3
    Maîtriser le paradigme
    serverless

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  40. Acte 4
    Chiffrer ses données

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  48. 48
    Acte 5
    Sécuriser ses secrets

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  54. 54
    Acte 6
    Automatiser comme
    un champion

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  61. 61

    View Slide

  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

    View Slide

  63. Épilogue
    63

    View Slide

  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

    View Slide

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

    View Slide

  66. Titre de la présentation
    Merci

    View Slide