đ„ Mise en place dâune solution VPN pour intĂ©gration API


Lâentreprise (mon client) mâa contactĂ© afin de mettre en place une solution VPN pour pouvoir faire des requĂȘtes API depuis ses locaux et machines de production sur un serveur nĂ©cessitant une connection VPN IKEv2/IPSec.
Il âs’agit dâune entreprise de gestion de patrimoine et placements financiers qui proposent des produits financiers a ces clients.
Ils viennent de signer un contrat de collaboration avec un grand groupe financier (le fournisseur dâAPI). Lâentreprise propose dans son catalogue client les produits fournis par ce groupe financier.
A fin que le client finial puisse faire des simulations de prix en ligne ils doivent intégrer le catalogue du groupe financier dans leur site web a travers une API.
Le seul soucis est que cette API est accessible uniquement par VPN.
Or les dĂ©veloppeurs travaillent depuis leurs postes et depuis des instances Heroku donc installer un VPN directement sur leur ordinateur nâĂ©tait pas une solution.
AprĂšs rĂ©flexion et en tenant compte du besoin du client, jâai dĂ©cidĂ© de crĂ©er une infrastructure sur aws qui puisse rĂ©soudre ce problĂšme.
Jâai dâabord crĂ©e un environnement rĂ©seau avec une passerelle par default (IGW) et une passerelle VPN.
Dans cet environnement jây ai placĂ© une Instance EC2 Ubuntu server 22.04 afin quâil agisse comme reverse proxy.
Puis jâai fait pointer un nom de domaine propre a lâentreprise vers cette instance EC2
Donc a chaque fois que une requĂȘte API est rĂ©alisĂ©e avec notre nom de domaine, le proxy qui est connectĂ© au VPN du groupe financier change lâURL afin que le nom de domaine de lâendpoint soit appelĂ© avec le bon URL.
De cette façon mon client peut rĂ©aliser des requĂȘtes API depuis nâimporte quel poste ou instance cloud en utilisant uniquement son nom de domaine.
Jâai rĂ©solu ce problĂšme en 3 Ă©tapes:
- Creation de lâinfrastructure
- Paramétrage du VPN
- Création et paramétrage du reverse proxy
1) Creation de lâinfrastructure sur AWS
Dans cette Ă©tape, Il sâagit de crĂ©er le âtĂ©rreauâ pour que lâensemble des Ă©lĂ©ments puisse fonctionner correctement.
Changement de Zone
Nous allons commencer par changer de Zone. Personnellement, si jâai le choix, je prĂ©fĂšre bĂątir des projets sur des zones aux USA (par exemple N. Virginia) au lieu de Europe car certains produits ne sont pas disponibles, comme des t2.micro.
Création du VPC
Je choisis un block en /24 qui sera largement suffisant pour 1 VM sur le projet !
Création du subnet
Dans ce block CIDR de /24 qui me donne une plage de 256 addresses IP, je le fragmente en un sous-domaine en /28 ce qui me donne une plage de 16 IP.
(Question: combien de sous-domaines en /28 je peux créer dans le block CIDR en /24 ? Réponse : Dans un block CIDR de /24 avec plage de 256 adresses IP je peux créer 16 sous-réseaux /28 comprenant 16 adresses IP chacun)
Jâaurais souhaitĂ©e crĂ©er un sous-domaine en /30 pour me donner que 4 addresses IP mais aws nâaccepte pas au delĂ de 28/
Création du IGW (Internet GateWay)
Câest la passerelle par dĂ©faut de notre ensemble.
on lâattache au bon VPC
Création des routes tables
Nous allons crĂ©er les rĂšgles de routage pour lâensemble du VPC. De base nous avons la route qui permet dâacceder dans tout le block CIDR /24 10.0.0.0/24 â> local
Nous allons rajouter, dans un premier temps, la route pour accĂ©der Ă lâextĂ©rieur du rĂ©seau (câest Ă dire Internet). Pour toute les routes correspondant Ă la destination 0.0.0.0/0 qui reprĂ©sente la totalitĂ© du trafic internet sortant, ce trafic sera dirigĂ© via la Internet Gateway.
Tunnel VPN IKEv2/IPSec
Dans cette Ă©tape je vais crĂ©er la partie qui me concerne pour lâtablissement du tunnel VPN IKEv2/IPSec. Voici le chahier des charges fourni pour la crĂ©ation du tunnel:
Création du Custommer Gateways
On renseigne lâIP publique de notre partenaire dans lâautre bout du tunnel
Création du VPG
Puis on nomme notre VPG (Virtual Private Gateway) et on lâattache Ă notre VPC
Création de la connection VPN
Static IP préfixes correspond aux plages IP qui pourront avoir accÚs a votre site à travers du tunnel. Dans notre cas 192.168.22.188/30 est le LAN de notre partenaire 10.0.0.0/28 est notre LAN
Au niveau des Tunnel Options, vous rentrerez la PSK (PrĂ© Shared Key) qui permet lâauthentification du Tunnel VPN
A la fin de ces Ă©tapes, aws, crĂ©e 2 tunnels VPN avec 2 IP diffĂ©rentes. Dans mon cas jâai partagĂ© uniquement la deuxiĂšme IP. Vous pouvez partager les 2 et avoir plus de redondance. Si un tunnel nâest plus actif le deuxiĂšme prends le relais.
Modifier la table de routage
Vous devez modifier la table de routage du VPC pour que les paquets a destination de 192.168.22.188/30 (rĂ©seau LAN de lâautre bout du tunnel) passent par la VPG (Virtual Private Gateway)
La rĂšgle sera la suivante: 192.168.22.188/30 ââ vgw-xxxxxxxx
Création du Reverse Proxy
Il ne nous reste que crĂ©er et paramĂ©trer le reverse proxy qui sera responsable de modifier les domaines dans les requĂȘtes API.
imaginons que le endpoint API officiel soit: api.company.com/edp/products nous ne pouvons acceder Ă cet endpoint que par VPN. Or si je suis a mon domicile il mâest impossible dâacceder a cet API. Jâai donc besoin dâun intermĂ©diaire qui lui sera bien connectĂ© au VPN et en mĂȘme temps sera connectĂ© a internet. Donc, ce reverse proxy, fera le pont, (le messager) entre le VPN en mon domicile grace a mon nom de domaine.
CrĂ©ation dâune VM Ubuntu
On va aller chercher dans le catalogue AMI un Ubuntu 22.04 ou 24.04 en 64-bit (x86)
Donnez lui un nom
Choissisez une intsance t2.micro
crééez une paire de clés (privé, publique). Si vous utilisez Putty comme client SSH utilisez .ppk si vous utilisez le CMD ou un terminal bash utilisez .pem
le fichier va télécharger sur votre ordinateur. gardez-le précizeusement car sans lui vous ne pourrez pas vous connecter a votre VM.
Au niveau des Network Settings: Choissez le bon VPC et subnet puis créez un nouveau groupe de sécurité avec seulement 2 rÚgles.
SSH depuis votre IP publique pour administrer votre VM
et HTTPS anywhere pour laisser passer les packets de vos requettes API
Vous pouvez rajouter ICMP pour réaliser des pings si besoin et tester les tunnel VPN avec votre partennaire.
Puis lancez la crĂ©ation de lâinstance:
on attribue une adresse IP externe fixe a notre VM avec Elastic IP
et associez cette IP a votre nouvelle instance (VM).
Paramétrer le notre nom de domaine:
Dans cette Ă©tape, nous devons faire pointer notre nom de sous-domaine vers lâIP publique de notre VM.
Pourcela il faut se rendre dans lâinterface de votre bureau dâenregistrement de domaines (OVH, Route53, gandi,âŠ) trouvez la zone DNS et crĂ©ez une entrĂ©e de type A avec le sous doimaine de voter choix (ex: apitest.lousques.com) qui pointe vers lâIP de votre VM
Configurer la VM
Une fois ces Ă©tapes accomplies et la VM dĂ©marrĂ©e on va se connecter a celle-ci au travers dâun terminal avec la commande suivante:
ssh -i /chemin/vers/votre/cle.pem utilisateur@adresse-ip-ou-nom-de-domaine
exemple: ssh -i c:\Downloads\ubuntu-key.pem ubuntu@32.15.65.22
ubuntu est le nom utilisateur de votre VM
On va commencer par mettre a jour la VM avec cette commande:
sudo apt update
on installe nginx qui fera office de reverse proxy
sudo apt install nginx
Nous allons immédiatement créer un backup du fichier default se trouvant dans /etc/nginx/sites-vailable/default
avec cette commande **sudo cp default default.bak**
Installation de Certbot pour certificat SSL
sudo apt install python3-certbot-nginx
certbot --version
Obtenir et installer le Certificat SSL:
sudo certbot --nginx -d apitest.louisques.fr
Renseignez votre adresse email et répondez poar oui / non a certaines questions.
Modification du fichier de configuration Nginx
Nous allons maintenant transformer nginx en reverse proxy. Retournez sue le ficher default sur /etc/ngnix/sites-available/default et ouvrez le :
sudo nano default
remplacez apitest.louisques.fr par votre sous-domaine
server {
listen 80;
server_name apitest.louisques.fr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name apitest.louisques.fr;
ssl_certificate /etc/letsencrypt/live/apitest.louisques.fr/fullchain.pem; # Managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/apitest.louisques.fr/privkey.pem; # Managed by Certbot
location / {
proxy_pass https://apitest.louisques.fr:
proxy_set_header Host apitest.louisques.fr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
enregistrez control^X YES et redémarrez le service nginx
sudo systemctl reload nginx
vĂ©rifie que les fichiers nginx sont lisibles et ne comportent pas dâerreur
sudo nginx -t
Si tout ok on passe à la derniÚre étape.
Modifier le fichier hosts
Modifier le fichier hosts de notre Ubuntu afin qui résolve la bonne adresse IP à partir de domaine fourni par le reverse proxy.
Toutes les Ă©tapes nĂ©cessaires a la rĂ©alisation de cette mission ont Ă©tĂ©s effectuĂ©s. Normalement a ce stade, mon client peut rĂ©aliser des requĂȘtes API de nâimporte quel poste ou instance cloud en utilisant un sous-domaine personnalisĂ© et recevoir la rĂ©ponse.