CASIRCloud

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 : 29/03 Après-Midi=

Auto-formation
Suivre les cours suivants en vidéo :
 * Les transparents
 * http://erods.liglab.fr/icar2013/docs/icar2013-panorama-cloud-computing.pdf
 * Les vidéos
 * http://erods.liglab.fr/videos/ICAR2013/ICAR-Panorama-1.mp4
 * http://erods.liglab.fr/videos/ICAR2013/ICAR-Panorama-2.mp4

Lire:
 * https://fr.wikipedia.org/wiki/Cloud_computing
 * https://www.ovh.com/fr/serveurs_dedies/comprendre-t3-t4.xml
 * http://www.interoute.fr/cloud-article/what-hybrid-cloud
 * https://fr.wikipedia.org/wiki/Devops
 * Swagger 101

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
 * http://erods.liglab.fr/videos/ICAR2013/ICAR-OVH.mp4
 * http://www.youtube.com/watch?v=4e97g7_qSxA (3 minutes)

Pour Docker, suivre ce tutoriel https://www.katacoda.com/courses/docker
 * Transparents sur Docker (Thomas Ropars).

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=

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 ([[Media:IntroductionCloud_L3CASIR_2018.pdf|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 blogging à partir de l'exemple Blog https://github.com/jhipster/jdl-samples/blob/master/blog.jh
 * Installer JHipster
 * Créer une application de type Monolithic
 * Générer le backend et le frontend de de l'exemple Blog
 * Lancer l'application Blog en mode DEV sur votre machine de développement
 * Déploiement de votre application Blog 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
 * Générer un certificat serveur avec l'autorité de certification gratuite https://letsencrypt.org/
 * 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 TODO
 * 1) Installer JHipster

TODO
 * 1) Générer l'application monolithique JHipster (bien suivre les instructions données en séance pour ce qui concerne les options à cocher)


 * 1) Cloner le dépôt git clone https://github.com/jhipster/jdl-samples/
 * 2) Ajouter l'application Blog

./mvnw
 * 1) lancer l'application backend en mode DEV

yarn start
 * 1) depuis un autre terminal, lancer l'application backend en mode DEV

ps axwww pkill java ps axwww
 * 1) pour arrêter l'application

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

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


 * 1) IUT UI (80,443 --> 8080)

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:8080 check
 * 1)    server web01 HOST_PRIMARY_AWS:8080 check
 * 2)    server web02 HOST_BACKUP_AWS:8080 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 8080 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

Vérifier la qualité de votre configuration SSL avec https://www.ssllabs.com/ssltest/

Améliorer votre configuration SSL avec https://github.com/mozilla/cipherscan

Ressources

 * https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04
 * https://serversforhackers.com/using-ssl-certificates-with-haproxy


 * https://doc.ubuntu-fr.org/iptables
 * http://dev-notes.eu/2016/08/persistent-iptables-rules-in-ubuntu-16-04-xenial-xerus/
 * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04

=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  Blog en mode distribuée (2 machines gratuites).
 * 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'application Blog sur la machine 1 : Que se passe t'il ?
 * 5) Arrêter l'application Blog sur la machine 2 : Que se passe t'il ?
 * 6) Redémarrer l'application Blog sur la machine 1 : Que se passe t'il ?
 * 7) Redémarrer l'application Blog sur la machine 2 : Que se passe t'il ?
 * 8) Installation et configuration de Telegraf sur les 2 machines pour le monitoring de celles-ci.
 * 9) Installation et configuration de Chronograf, InfluxDB sur la première machine pour le monitoring de celles-ci.
 * 10) Arrêter les 2 machines virtuelles en fin de séance pour éviter d'épuiser inutilement le crédit de votre compte (Les machines virtuelles (programmes et données) sont perdues !!)


 * Installation de Docker et Docker Machine
 * Construire et installer l'application Blog en mode production. Il faut démarrer un serveur MySQL via Docker.
 * Déployer l'application JHipster avec Docker et Docker Compose (voir le répertoire src/main/docker)

Scripts
TODO

Naviguer sur http://52.215.12.34:3000

Naviguer sur https://52.215.12.34

Ressources

 * https://devops.profitbricks.com/tutorials/install-and-configure-haproxy-load-balancer-on-ubuntu-1604/
 * https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04

=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) Générer le rapport de qualité avec le container SonarQube et copier la page des métriques dans le rapport.
 * 2) Estimer le code généré du projet 'blog' selon la méthode COCOMOII (par exemple en utilisant ce calculateur).
 * 3) Terminer votre cluster HA en configurant les deux containers HAProxy en mode load balancing vers les 2 processus Spring de JHipster.
 * 4) Terminer votre cluster HA en configurant les deux containers MySQL en réplication maître-esclave (https://github.com/bergerx/docker-mysql-replication).
 * 5) Tester le crash d'une machine (voir Chaos Monkey).
 * 6) 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).
 * 7) Installer un container InfluxDB sur la machine 1 de votre cluster AWS.
 * 8) Mettre en place Telegraf sur vos 2 machines AWS et configurer le pour qu'ils écrivent le mesure dans la base InfluxDB.
 * 9) Visualiser les métriques collectées par les démons Telegraf avec une console Chronograf.
 * 10) Configurer une alerte de surcharge et dépasser de capacité disque avec Kapacitor
 * 11) 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)
 * 12) Configurer le firewall de vos 2 machines (soit via les IPTables, soit via UFW).
 * 13) Tester la pénétration de vos machines depuis l'extérieur avec un outil comme Security Monkey
 * 14) 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:
 * https://github.com/eliasgranderubio/dagda
 * http://www.sysdig.org/falco/
 * https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-grafana-to-plot-beautiful-graphs-from-zabbix-on-centos-7
 * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-16-04

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:
 * https://github.com/eliasgranderubio/dagda
 * http://www.sysdig.org/falco/
 * https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-grafana-to-plot-beautiful-graphs-from-zabbix-on-centos-7
 * le tutoriel complet sur JHipster (lien, video)

=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:
 * https://github.com/eliasgranderubio/dagda
 * http://www.sysdig.org/falco/
 * https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-grafana-to-plot-beautiful-graphs-from-zabbix-on-centos-7
 * https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-16-04

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:
 * https://github.com/eliasgranderubio/dagda
 * http://www.sysdig.org/falco/
 * https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-grafana-to-plot-beautiful-graphs-from-zabbix-on-centos-7