blog.bressure.net

Carnet professionnel d'un informaticien

Application, Paramétrage

POC usine logicielle – installation de Selenium

admin

Mon infra dockerisée est la suivante:

Infra dockerisée avec séparation de la production et mutualisation de staging avec l’infra de dev

Elle me permet de limité l’utilisation des ressources en éteignant les conteneurs staging si besoin. L’environnement de staging n’est pas accessible depuis internet mais tout service qui est dans la VM de production ou sur l’infra est accessible depuis internet. Cette accès est « automatique »et le guidage se fait sur le nom de domaine.

L’objectif est d’installer une Selenium Grid qui sera utilisé dans l’intégration continue pour faire des tests IHM.

Avertissement Selenium

La documentation de Sélenium indique clairement qu’il ne faut pas compter sur lui pour assurer la sécurité. Particulièrement il est recommandé que l’infra empêche tout accès depuis l’extérieur en utilisant un firewall par exemple.

Dans mon architecture, je vais utiliser les ports 88, respectivement 99 comme entrée de selenium hub de production , respectivement de staging. Ces derniers correspondent aux port des Traefik de production, respectivement de staging.

Afin de protéger mon Selenium hub je vais ajouter une règle dans le haproxy pour bloquer l’accès sur le domaine selenium.bressure.net. Ainsi le flux sera coupé et n’atteindra pas Traefik.

acl host_selenium  hdr_dom(host) selenium.bressure.net
http-request deny if host_selenium 

En testant l’accès via le port du haproxy de staging sur le port 7171, j’obtiens bien un refus:

Ça marche sur staging (qui est inaccessible depuis internet), on peut appliquer la méthode sur le haproxy de production (accessible depuis internet) et tester le refus:

Installation dockerisée de sélenium

Je modifie à la marge le fichier d’exemple trouvé sur le github de la version dockerisée de Sélenium en supprimant l’exposition du port 4444 (merci à Traefik !).

version: "3.7"
services:
  selenium-hub:
    image: selenium/hub:4
    container_name: selenium-hub
  chrome:
    image: selenium/node-chrome:4
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
  firefox:
    image: selenium/node-firefox:4
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
  opera:
    image: selenium/node-opera:4
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub

Les fichiers complémentaires pour Traefik sont accessible depuis mon dépôt Git:

Nom de domaine en HSTS

Comme dans mon architecture c’est le frontal apache qui fait le TLS, je n’ai plus de HTTPS quand je passe directement sur Traefik. J’ai bien un certificats dans Traefik mais ce dernier ne correspond pas au domaine pour sélénium et je veux minimiser les problème de configuration. L’accès au hub pour la communication de tâches de test IHM doit se faire en clair… de toute façon je suis bien à l’intérieur de ma propre infra à ce stade.

Or comme mon domaine est estampillé HSTS, *.bressure.net finit par être marqué comme devant être accédé uniquement en HTTPS. Cela va poser problème pour la suite. Donc il vaut mieux pour moi d’utiliser un nom de domaine interne ou un autre disons selenium.bressure.infra. Ce nom n’est pas géré par mon frontal TLS et sera dirigé vers l’hôte virtuel par défaut correspondant à la page d’accueil de mon serveur web si on y accède depuis internet. Pour rappel, le Vitual Host par défaut est celui qui arrive en premier dans la configuration de apache. Je garde la protection sur le haproxy car un mauvais ordre des Virtual Host dans la configuration de apache et voilà que le flux pourrait être dirigé vers le HAProxy. Deux protections valent mieux qu’une !

Test d’accès

Les protections mises en place plus haut sont là pour empêcher l’accès par le frontal TLS et le HAProxy. Le seul moyen pour accéder à sélénium est alors le Traefik sur le port 99 en staging et 88 en production. Il faut rentrer l’URL /wd/hub/status

Tags:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top