Les requêtes internes sont des requêtes échangées entre les services internes à l'entreprise (maestro, ap2i, opentalent-platform...), par exemple pour demander un fichier.
Ces requêtes ne sont pas systématiquement protégées par l'authentification Symfony standard, car elles doivent pouvoir être exécutées en dehors du cadre d'une requête utilisateur, par exemple lors d'une exécution en ligne de commande ou lors d'un processus asynchrone exécuté par messenger.
Pour éviter tout risque de sécurité lié à ces routes :
Ainsi, si l'on prend l'exemple d'une requête /internal/download/123 envoyée à ap2i :
Une requête d'un utilisateur connecté en tant que super admin et à l'intérieur du VPN pourra aussi aboutir.
Les ips considérées comme interne sont :
127.0.0.[0-1])10.8.0.[0-255])141.94.117.[33-61])172.16.0.[0-255])172.20.[0-255].[0-255])Plus d'infos ici : https://ressources.opentalent.fr/display/SI/Infrastructure+et+reseau
On met en place un pattern de routes de la forme /api/internal/* qui sera uniquement dédié aux requêtes internes
entre les services opentalent.
Les appels à cette route ne sont autorisés que si :
Si ces deux conditions ne sont pas remplies, la requête est rejetée, et ce même si l'utilisateur est authentifié.
Les routes internal sont configurées ici : config/packages/security.yaml
Exemple avec la route dédié au téléchargement des fichiers, $id étant l'id d'un fichier stocké sur l'environnement V2.
On part du principe que l'utilisateur authentifié a des droits suffisants pour voir ce fichier.
Côté ap2i, les requêtes suivantes doivent donner les résultats correspondants :
| query | header défini | super-admin | VPN activé | Résultat attendu |
|---|---|---|---|---|
| /api/internal/download/$id | NON | NON | NON | 401 Unauthorized |
| /api/internal/download/$id | OUI | NON | NON | 401 Unauthorized |
| /api/internal/download/$id | OUI | NON | OUI | 200 OK |
| /api/internal/download/$id | OUI | OUI | OUI | 200 OK |
| /api/internal/download/$id | NON | OUI | OUI | 200 OK |
| /api/internal/download/$id | OUI | OUI | NON | 403 Forbidden |
| /api/download/$id | * | NON | * | 401 Unauthorized |
| /api/download/$id | * | OUI | * | 200 OK |
Les mêmes tests s'appliquent côté V1, appliqués à un fichier stocké sur l'environnement de la V1.