Difference between revisions of "CASIRCloud"

From air
Jump to navigation Jump to search
Line 24: Line 24:
 
* http://www.interoute.fr/cloud-article/what-hybrid-cloud
 
* http://www.interoute.fr/cloud-article/what-hybrid-cloud
 
* https://fr.wikipedia.org/wiki/Devops
 
* https://fr.wikipedia.org/wiki/Devops
* [https://app.swaggerhub.com/help/tutorials/writing-swagger-definitions Swagger]
+
* [https://app.swaggerhub.com/help/tutorials/writing-swagger-definitions Swagger 101]
   
 
Vous pouvez suivre les autres présentations si vous en avez envie et le temps:
 
Vous pouvez suivre les autres présentations si vous en avez envie et le temps:

Revision as of 10:32, 15 March 2018

Enseignant: Didier Donsez (Polytech Grenoble, UGA)

Coordinateur : Clement Raievsky (IUT de Valence, UGA)

Etudiants : UGA - IUT Valence - L3 Pro CASIR

Modalité d’évaluation : DS (30%)+ DM (70%)


Séance 0 : 30/03 de 9h30 à 12h30

Auto-formation

Suivre les cours suivants en vidéo :

Lire:

Vous pouvez suivre les autres présentations si vous en avez envie et le temps: http://erods.liglab.fr/icar2013/programme.html

Et notamment la présentation du datacentre d'OVH

Pour Docker, suivre ce tutoriel https://www.katacoda.com/courses/docker

Création des comptes

  • Création d’un compte Pack étudiant Github https://education.github.com/pack
  • Création d’un compte sur le SaaS public Azure à partir de ce github student pack
  • Création d’un compte sur le SaaS public AWS à partir de ce github student pack
  • Création d’un compte sur Docker Hub https://hub.docker.com/

Remarque: il existe d'autres hébergeurs IaaS avec des offres gratuites 1 an pour de petites VMs : https://www.digitalocean.com/ ...

Séances 1 & 2 : 30/03

En 2018, l'application de démonstration s'appuyera sur JHipster.

Agenda

  • DS QUICK (30 minutes) sur la séance 0 (15% de la note globale). !!!!! NE PAS ARRIVER EN RETARD !!!!
  • Introduction aux applications distribuées (transparents)
  • Démarrage d'une machine virtuelle (Ubuntu 16.04 LTS) dans un des IaaS pour lesquels vous avez créés des comptes. Choisir une machine "gratuite" type 't2.micro' (1 vCPU, 1 GB RAM, 8GB EBS).
  • Génération d'une application de e-commerce à partir de l'exemple https://github.com/jhipster/jdl-samples/blob/master/online-shop.jh
  • Lancer l'application Online Shop en mode DEV sur votre machine de développement
  • Déploiement de votre application Online Shop en mode PROD sur la machine virtuelle (Ubuntu 16.04 LTS) de l'IaaS. Remarque: si vous êtes sur AWS, il faudra configurer le security group de votre machine virtuelle
  • Ecrire un script de démarrage
  • Générer le client Bash (curl) à partir de la documentation OpenAPI (Swagger) avec l'outil en ligne Swagger Editor
  • Utiliser le client Bash (curl) généré.
  • Arrêt de la machine
  • Script de redémarrage au "reboot" de la machine.
    • Installer et configurer Monit.
    • Configurer dans Monit votre adresse email pour être notifié des crashs de l'application.
  • Installation de HAProxy
  • Sécurisation des ports avec les IPTables.
    • Filtrer tous les ports en entrée sauf SSH, ICMP, HTTP, HTTPS et 8080.
    • Filtrer tous les ports en sortie sauf SSH, ICMP et SMTPS (pour Monit).
  • Installer et Configurer InfluxDB
  • Installer et Configurer Telegraf
  • Installer et Configurer Chronograf

Scripts

mv ~/Download/iutcloud.pem ~/.ssh
chmod 400 ~/.ssh/iutcloud.pem
HOST_PRIMARY_AWS=52.215.12.34
ssh -i ~/.ssh/iutcloud.pem ubuntu@$HOST_PRIMARY_AWS

Sur HOST_PRIMARY_AWS

# Installer Meteor
curl https://install.meteor.com/ | sh 
# Cloner le dépôtgit clone https://github.com/tastejs/todomvc.git
cd todomvc
cd examples/meteor
# lancer l'application sur le port 3000 (port de test non sécurisé !!!)
meteor run --port 3000
^C

# lancer l'application en mode détaché. L'application continue son exécution après la sortie (exit) du terminal ssh
nohup meteor run --port 3000 &

# pour arrêter l'application
ps axwww
pkill meteor
ps axwww

Depuis le navigateur de votre poste de travail, naviguer sur http://52.215.12.34:3000


Installer HAProxy pour sécuriser la connexion.

sudo apt-get install -y haproxy

Générer un certificat SSL pour votre serveur HAProxy

openssl genrsa -out haproxy.key 2048
openssl req -new -key haproxy.key \
                   -out haproxy.csr
openssl x509 -req -days 365 -in haproxy.csr \
                    -signkey haproxy.key \
                    -out haproxy.crt
cat haproxy.crt haproxy.key \
           | tee haproxy.pem

Modifier le fichier de configuration de HAProxy

sudo vi /etc/haproxy/haproxy.cfg

avec le fichier suivant:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL).
    ssl-default-bind-options no-sslv3 no-tls-tickets force-tlsv12
    ssl-default-bind-ciphers !EDH:!RC4:!ADH:!DSS:HIGH:+AES128:+AES256-SHA256:+AES128-SHA256:+SHA:!3DES
    tune.ssl.default-dh-param 2048

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

# IUT UI (80,443 --> 3000)

frontend iut-ui-http
    mode http
    option httplog
    option forwardfor
    option http-server-close
    option httpclose
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }


frontend iut-ui-https
    option httplog
    option forwardfor
    option http-server-close
    option httpclose
    rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains
    rspadd X-Frame-Option:\ DENY
    bind *:443 ssl crt /etc/ssl/haproxy/haproxy.pem ciphers !EDH:!RC4:!ADH:!DSS:HIGH:+AES128:+AES256-SHA256:+AES128-SHA256:+SHA:!3DES force-tlsv12 no-sslv3
    default_backend iut-ui 

backend iut-ui 
    mode http
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk HEAD / HTTP/1.1\r\nHost:localhost
    server web01 localhost:3000 check
#    server web01 HOST_PRIMARY_AWS:3000 check
#    server web02 HOST_BACKUP_AWS:3000 check

Relancer HAProxy

sudo mkdir -p /etc/ssl/haproxy
sudo cp haproxy.pem /etc/ssl/haproxy/haproxy.pem
haproxy -c -f /etc/haproxy/haproxy.cfg
sudo service haproxy restart
sudo service haproxy status

Depuis le navigateur de votre poste de travail, naviguer sur http://52.215.12.34 Depuis le navigateur de votre poste de travail, naviguer sur https://52.215.12.34 . Accepter l'exception de sécurité.

Supprimer le port 3000 du security group de la machine AWS depuis la console AWS.

Visualiser le certificat du serveur

openssl s_client -connect $HOST_PRIMARY_AWS:443 -showcerts

Ressources

Séances 3 & 4 : 6/04

  • DS QUICK (30 minutes) sur la séance 0 (15% de la note globale). !!!!! NE PAS ARRIVER EN RETARD !!!!
  1. Création d'une seconde machine virtuelle.
  2. Installation de l'application TodoMVC Meteor en mode distribuée (2 machines gratuites) : Meteor inclut MongoDB.
  3. Installation et configuration d'un load balancer HAProxy sur chaque machine dans le mode HTTPS Termination (Le certificat auto-signé est installé sur les 2 serveurs)
  4. Arrêter l'applications online shop sur la machine 1 : Que se passe t'il ?
  5. Arrêter l'applications online shop sur la machine 2 : Que se passe t'il ?
  6. Redémarrer l'applications online shop sur la machine 1 : Que se passe t'il ?
  7. Redémarrer l'applications online shop sur la machine 2 : Que se passe t'il ?
  8. Installation et configuration de Telegraf, Chronograf, InfluxDB sur les 2 machines pour le monitoring de celles-ci.
  9. Arrêter les 2 machines virtuelles en fin de séance (Les machines virtuelles (programmes et données) sont perdues !!)

Scripts

TODO

Naviguer sur http://52.215.12.34:3000

Naviguer sur https://52.215.12.34


Avec authentification

docker rm -f mongo-for-meteor

# Start Mongod
docker run --name mongo-for-meteor -p 27017:27017 -d mongo --auth
docker ps -a

# Add the Initial Admin User "todo_meteor"
docker exec -it mongo-for-meteor mongo admin
MONGO> db.createUser({ user: "todo_meteor", pwd: "CE_MOT_DE_PASSE_N_EST_PAS_SUR", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

# Connect Externally
docker run -it --rm --link mongo-for-meteor:mongo mongo mongo -u todo_meteor -p CE_MOT_DE_PASSE_N_EST_PAS_SUR --authenticationDatabase admin mongo-for-meteor/meteor
MONGO> db.getName();

Relancer Meteor

export ROOT_URL='https://localhost:3000'
export MAIL_URL='smtp://user:password@mailhost:port/'
export MONGO_URL='mongodb://todo_meteor:CE_MOT_DE_PASSE_N_EST_PAS_SUR@localhost:27017/meteor'
node main.js


Instancer de nouveau le conteneur Mongo avec un volume locale

docker rm -f mongo-for-meteor
mkdir ~/db
docker run --name mongo-for-meteor -v /home/ubuntu/db:/data/db -p 27017:27017 -d mongo --auth
...
sudo apt-get install -y tree
tree ~/db

Ressources

DM 2016-2017

Noté (70% de la note globale)

A RENDRE LE 9/06/2017

Dépend de ce qui aura été produit durant les séances 1,2,3 & 4.

Réalisations

  1. Installer un container InfluxDB sur la machine 1 de votre cluster AWS.
  2. Mettre en place Telegraf sur vos 2 machines AWS et configurer le pour qu'ils écrivent le mesure dans la base InfluxDB.
  3. Visualiser les métriques collectées par les démons Telegraf avec une console Chronograf.
  4. Configurer une alerte de surcharge et dépasser de capacité disque avec Kapacitor
  5. Sécuriser SSH de vos 2 VMs avec une authentification à 2 facteurs (How To Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04)
  6. Configurer le firewall de vos 2 machines (soit via les IPTables, soit via UFW).
  7. Tester la pénétration de vos machines depuis l'extérieur avec un outil comme Security Monkey
  8. Conclusion et retour d'expérience (franc) du cours. Proposition(s) d'amélioration.

Rendu par mail (avec copie à Clément et dans le sujet "[CASIR DM Cloud]"):

Un rapport de 8 pages (1 page par étape)

  • avec liste des commandes,
  • extraits pertinents des traces ou des logs,
  • et références vers les documents utilisés (lien web).

Vous pouvez ajouter des annexes à votre rapport.

Remarque: si certains ont entrepris ou réussi des mises en place des anciennes étapes concernant la haute disponibilité (HA = High Aviability), n'hésitez pas à compléter votre rapport avec des pages supplémentaires.

Bonus track:

DM 2017-2018

Noté (70% de la note globale)

A RENDRE LE 9/05/2018

Dépend de ce qui aura été produit durant les séances 1,2,3 & 4.

Réalisations

  1. Terminer votre cluster HA en configurant les deux containers HAProxy en mode load balancing vers les 2 processus Meteor.
  2. Terminer votre cluster HA en configurant les deux containers MongoDB en réplication (voir ce blog).
  3. Tester le crash d'une machine (voir Chaos Monkey).
  4. Combien de temps êtes vous capables de redémarrer complêment la machine (recréer une machine, refaire toutes les installations, reconfigurer les 2 machines : la survivante et la nouvelle qui a une nouvelle adresse IP).
  5. Installer un container InfluxDB sur la machine 1 de votre cluster AWS.
  6. Mettre en place Telegraf sur vos 2 machines AWS et configurer le pour qu'ils écrivent le mesure dans la base InfluxDB.
  7. Visualiser les métriques collectées par les démons Telegraf avec une console Chronograf.
  8. Configurer une alerte de surcharge et dépasser de capacité disque avec Kapacitor
  9. Sécuriser SSH de vos 2 VMs avec une authentification à 2 facteurs (How To Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04)
  10. Configurer le firewall de vos 2 machines (soit via les IPTables, soit via UFW).
  11. Tester la pénétration de vos machines depuis l'extérieur avec un outil comme Security Monkey
  12. Conclusion et retour d'expérience (franc) du cours. Proposition(s) d'amélioration.

Rendu par mail (avec copie à Clément et dans le sujet "[CASIR DM Cloud]"):

Un rapport de 12 pages (1 page par étape)

  • avec liste des commandes,
  • extraits pertinents des traces ou des logs,
  • et références vers les documents utilisés (lien web).

Bonus track: