🌄Projet Infrasphere
Projet pro : REAC TSSR avec AWS
Introduction
Dans le cadre de la formation TSSR, je dois réaliser un dossier professionnel en indiquant chaque compétences à des tâches, effectuées dans le cadre du stage ou de la formation.
Intéressé par le Cloud et le DevOps, j’ai décidé d'orienter mon dossier pro avec des tâches sur le Cloud, en particulier AWS. Je n'oublie pas d'implémenter des outils utilisés on premise comme HAProxy pour le Load Balancer.
L’objectif est de définir dans un premier temps les fonctionnalités essentielles et quelles tâches à soumettre. Il faut prévoir une évolution si j’arrive à valider les fonctionnalités essentielles.
Ce document servira de fil rouge à la rédaction du dossier pro.
Suivi du projet
REAC
Service(s) AWS
Notes / Tâches à effectuer
Evolution
Assurer le support utilisateur en centre de services
Amazon Connect
Version gratuite bas de gamme attention aux coût des appli synchronisés
Non prioritaire
Terminé (hors projet)
Exploiter des serveurs Windows et un domaine
Active Directory
EC2
Non prioritaire
Exploiter des serveurs Linux
EC2
Nginx
1
En cours
Exploiter un réseau IP
VPC - Loadbalancer
SecG ; ACL ; VPN
SSL
bastion
2
En cours
Maintenir des serveurs dans une infrastructure
virtualisée
EC2 + Monitoring
Vertical/Horizontal scaling Log Rôle IAM=> EC2 Nginx
3
En cours
Automatiser des tâches à l’aide de scripts
Ensemble des ressources du projet seront déployées
En cours
Maintenir et sécuriser les accès à Internet et les
interconnexions des réseaux
VPC
VPN
Cloudwatch / trail
Bastion ou SSM
Firewall - portforwarding (port personnalisé) WAF
AWS Certificate Manager
1 (Bastion) 4 (VPN)
En cours
Mettre en place, assurer et tester les sauvegardes et
les restaurations des éléments de l’infrastructure
S3 + S3 Glacier
Backup restore (AWS Backup)
(Snapshot)
Pas commencé
Exploiter et maintenir les services de déploiement des
postes de travail.
AWS Workspace
PCoIP Liens IAM et DVI
pour sécuriser l’espace de travail
6
Non prioritaire
Prendre en compte les Availability Zones pour la redondance



Automatiser des tâches à l’aide de script
Installation et configuration AWS CLI
Télécharger le CLI soit via un fichier msi, soit en ligne de commande (ok avec Linux / Windows). Langage en bash
On s’assure de l’installation :

Pour faire communiquer nos services AWS, on va rentrer des identifiants particuliers d’un utilisateur de notre organisation. En effet, nous allons créer une clé de connexion entre notre utilisateur vers notre CLI.
Nous n'utilisons pas le compte root mais un compte aux droits admin (créé préalablement sur l’interface IAM d’AWS).

Exemple de commande : pour lister les EC2 AMI Images
aws --output table ec2 describe-images --filters "Name=description,Values=*Amazon Linux 2*" "Name=owner-alias,Values=amazon"
output format (texte, table, json, yaml)
top lvl command => aws services
subcommand, Actual command (on peut trouver create, delete, enable, disable, modify, request, stop, terminate)
options (peut contenir –region ; –output ; –profile ou –dry-run pour lancer une commande sans l’exécuter (très bien pour le testing))
La commande aws help ouvre l’aide classique. On peut aussi utiliser aws s3 help spécifique pour le S3 et, plus loin, aws s3 website help.
Ou tout simplement la documentation officielle.
Création du VPC 1 :
aws ec2 create-vpc \
--cidr-block 10.0.0.0/24 \
--tag-specification ResourceType=vpc,Tags=[{Key=Name,Value=MyVpc}]

Création du VPC 2 :
aws ec2 create-vpc \
--cidr-block 10.0.1.0/24 \
--tag-specification ResourceType=vpc,Tags=[{Key=Name,Value=MyVpc}]

Création subnet 1a :
root@L-FR-5CG13310XP:~# aws ec2 create-subnet \
--vpc-id vpc-024b85f09852e2329 \
--cidr-block 10.0.0.0/28
-- availability-zone eu-west-3a
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=XXXXX}]'
Même chose pour les autres subnets où on modifiera le CIDR et/ou le vpc id et/ou la AZ.
Dans un sous-réseau AWS, il y a un total de 5 IP réservées. En plus du réseau et la broadcast : 10.0.0.1: Reserved by AWS for the VPC router.
10.0.0.2: Reserved by AWS. The IP address of the DNS server is the base of the VPC network range plus two. For VPCs with multiple CIDR blocks, the IP address of the DNS server is located in the primary CIDR. We also reserve the base of each subnet range plus two for all CIDR blocks in the VPC. For more information, see Amazon DNS server.
10.0.0.3: Reserved by AWS for future use.
Création d’une EC2, comporte plusieurs éléments :
$ aws ec2 run-instances --image-id ami-xxxxxxxx --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-903004f8 --subnet-id subnet-6e7f829e
ou
aws ec2 run-instances --image-id ami-04681a1dbd79675a5 \
--count 1 \
--instance-type r5d.large \
--key-name newcluster \
--security-group-ids sg-007e43f80a1958f29 \
--subnet-id subnet-970ec2f0 \
--user-data file://my_script.sh \
--tag-specifications \
'ResourceType=instance,Tags=[{Key=backend,Value=inventory1}]'
run-instances DOC
Image ID pour sélectionner la bonne AMI - Liste depuis la console
Amazon Linux 2023 : ami-0facbf2a36e11b9dd
Amazon Linux 2022 : ami-0720246d895625a23
count pour indiquer le nombre
instance-type pour indiquer les configs de l’instance (on utilisera t2.micro)
key-name pour autoriser la connexion SSH - DOC

security-group pour autoriser la connexion - DOC
aws ec2 create-security-group --group-name SecVPC1 --description "GroupSecVPC1" --vpc-id vpc-024B85f09852e2329
Pour aller plus loin dans la config : DOC

Le CIDR est celui d’un VPC
aws ec2 authorize-security-group-ingress \
--group-id sg-02ccf2fcd4a46c14c \
--protocol tcp \
--port 22 \
--cidr 10.0.0.0/24
subnet-id pour indiquer le réseau - DOC

Lancement d’une EC2 en prenant en compte les paramètres créés précédemment :
aws ec2 run-instances --image-id ami-0facbf2a36e11b9dd \
--count 1 \
--instance-type t2.micro \
--key-name key-pair1a \
--security-group-ids sg-02ccf2fcd4a46c14c \
--subnet-id subnet-020bcec891b3d77c2 \
--user-data file://monscript.sh
Sécurisation du serveur web :
AWS Certificate manager :

AWS WAF : Firewall idéal pour les serveurs web.

certificat ssl

Mettre en ligne le serveur web
Lancer instance EC2
Installer nginx (yum) Aller dans le fichier config /etc/nginx/nginx.conf
ajouter listen 80
ajouter listen 443 ssl
Suivre le guide CERTBOT pour créer les certificats SSL
des difficultés pour créer le certificat, faire attention aux syntaxes de la configuration (commande utile : sudo nginx -t)
Pour tester des bugs de notre site avec les certifs obtenus par CERTBOT : utiliser DEBUG.NET
Vérifier que le fichier /etc/nginx/nginx.conf.default n’écoute pas le port 80 et provoque une double écoute (bonne ressource ICI)
Bonne config :
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen 443 ssl;
server_name vicexplore.cloud;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/errors;
}
location / {
root /var/www/vicexplore.cloud;
index index.html;
}
ssl_certificate "/etc/letsencrypt/live/vicexplore.cloud/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/vicexplore.cloud/privkey.pem";
}
Il faut ajouter l’IP publique du serveur à l’hébergeur du domaine (HOSTSINGER)
Il faut créer une page index.html avec un petit message du style :
GNU nano 5.8 index.html <html><body><h1>Victor continue d'explorer le Cloud ... avec AWS ! !</h1></body></html>
Si problème de “double écoute” des ports 80 et 443 :
sudo pkill -f nginx & wait $!
sudo pkill -f nginx & wait $! : Cette commande utilise pkill pour arrêter tous les processus Nginx en cours d'exécution. Le & wait $! permet d'attendre que la commande se termine avant de continuer.
Vraiment bien vérifier le fichier de destination index.html
Pour tester notre site, on écrit bien l’URL COMPLÈTE
Pour vérifier la bonne tenue SSL de notre serveur : SSLLABS
#!/bin/bash
yum update -y
yum install nginx -y
echo "<html><body><h1>Vic explore le cloud !</h1></body></html>" >/var/www/vicexplore.cloud/index.html
systemctl start nginx
systemctl enable nginx
LOAD BALANCING
Utilisation de HAProxy
Configuration :
global
log /dev/log local5 debug
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
frontend myapp_front
bind *:80
default_backend myapp_back
backend myapp_back
balance roundrobin
server srv_nginx 13.38.104.99:80
server srv_apache 172.31.19.252:80
Last updated