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 : 30/03 de 9h30 à 12h30
Auto-formation
Suivre les cours suivants en vidéo :
- Les transparents
- Les vidéos
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
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 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
# 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
- 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 !!!!
- Création d'une seconde machine virtuelle.
- Installation de l'application TodoMVC Meteor en mode distribuée (2 machines gratuites) : Meteor inclut MongoDB.
- 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)
- Arrêter l'applications online shop sur la machine 1 : Que se passe t'il ?
- Arrêter l'applications online shop sur la machine 2 : Que se passe t'il ?
- Redémarrer l'applications online shop sur la machine 1 : Que se passe t'il ?
- Redémarrer l'applications online shop sur la machine 2 : Que se passe t'il ?
- Installation et configuration de Telegraf, Chronograf, InfluxDB sur les 2 machines pour le monitoring de celles-ci.
- Arrêter les 2 machines virtuelles en fin de séance (Les machines virtuelles (programmes et données) sont perdues !!)
- Présentation de Docker (transparents)
- Installation de Docker et Docker Machine
- Les mêmes exercices mais avec des containers Docker.
- Construire et installer l'application JHipster en mode production. Il faut démarrer un serveur MySQL via Docker.
- Déployer l'application JHipster avec Docker et Docker Compose (https://github.com/kadirahq/meteord)
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
- 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
- https://github.com/domasx2/meteor-docker
- https://github.com/kadirahq/meteord
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
- Installer un container InfluxDB sur la machine 1 de votre cluster AWS.
- Mettre en place Telegraf sur vos 2 machines AWS et configurer le pour qu'ils écrivent le mesure dans la base InfluxDB.
- Visualiser les métriques collectées par les démons Telegraf avec une console Chronograf.
- Configurer une alerte de surcharge et dépasser de capacité disque avec Kapacitor
- 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)
- Configurer le firewall de vos 2 machines (soit via les IPTables, soit via UFW).
- Tester la pénétration de vos machines depuis l'extérieur avec un outil comme Security Monkey
- 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
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
- Terminer votre cluster HA en configurant les deux containers HAProxy en mode load balancing vers les 2 processus Meteor.
- Terminer votre cluster HA en configurant les deux containers MongoDB en réplication (voir ce blog).
- Tester le crash d'une machine (voir Chaos Monkey).
- 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).
- Installer un container InfluxDB sur la machine 1 de votre cluster AWS.
- Mettre en place Telegraf sur vos 2 machines AWS et configurer le pour qu'ils écrivent le mesure dans la base InfluxDB.
- Visualiser les métriques collectées par les démons Telegraf avec une console Chronograf.
- Configurer une alerte de surcharge et dépasser de capacité disque avec Kapacitor
- 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)
- Configurer le firewall de vos 2 machines (soit via les IPTables, soit via UFW).
- Tester la pénétration de vos machines depuis l'extérieur avec un outil comme Security Monkey
- 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: