Ingénieur senior DevSecOps / full-stack
Salaire fixe à partir de 75 000 EUR bruts par an, à temps plein
Lieu de travail : À distance, dans le monde entier.
Modalités contractuelles. La forme d’engagement, l’entité contractante et le droit applicable seront définis au stade de l’offre. Ils ne sont pas précisés ici car ils dépendent du lieu de résidence de la personne retenue et n’ont pas été arrêtés à l’avance. Le candidat doit disposer du droit de travailler dans son lieu de résidence ; les détails seront examinés au même stade.
Composante variable. Une part variable annuelle liée aux résultats de l’entreprise s’ajoute au salaire fixe de départ. Elle en est distincte et n’est pas garantie.
Discipline. Ingénierie
La mission
La plateforme fonctionne aujourd’hui en hébergement géré. Dans les marchés prioritaires, certains acquéreurs institutionnels et publics ne peuvent pas l’utiliser sous cette forme : ils veulent un déploiement sur leur propre infrastructure, sous leurs contrôles, sans dépendance non approuvée. Un plan technique existe et décrit honnêtement ce qui n’est pas encore prêt à être livré. Ce poste doit en faire un déploiement opérationnel tout en continuant à développer le produit.
À quoi ressemble réellement la période des 90 premiers jours
- Intégrer au livrable les dépendances distantes chargées par les fonctions Edge au démarrage, avec contrôle d’intégrité, afin qu’un déploiement sur réseau privé n’ait pas besoin d’accéder à un registre public pour démarrer.
- Mettre en place la pile de référence en conteneurs : PostgreSQL, ses extensions et tout l’historique des migrations, service d’authentification, couche REST, stockage d’objets, passerelle et environnement d’exécution des fonctions, sur les primitives de base de Kubernetes qui se comportent de la même façon sur tout cluster géré.
- Définir par écrit le parcours canonique d’une nouvelle installation : initialiser le schéma, puis appliquer les migrations suivantes, et le vérifier sur un cluster vide au lieu de simplement l’affirmer.
- Revenir avec la liste exacte de ce qui ne peut pas encore être livré. Le principal point connu : les opérations courantes dépendent aujourd’hui d’un tableau de bord d’hébergement absent dans un déploiement client ; les procédures qui doivent le remplacer n’existent pas encore.
Ce que le poste assure après cela
- L’infrastructure en tant que code et les manifestes de déploiement, conçus autour des primitives de base plutôt que d’un fournisseur cloud, pour fonctionner sur le cluster Kubernetes géré du client, quel qu’en soit l’exploitant.
- Le processus de livraison : artefacts construits hors du périmètre client, signés, publiés avec leurs empreintes et une nomenclature des composants logiciels, puis vérifiés avant l’installation. L’équipe de sécurité du client approuve chaque mise à jour ; le mécanisme doit rendre cette affirmation littéralement vraie.
- Trafic sortant refusé par défaut et forme exacte de chaque flux autorisé documentée au niveau des octets, afin que l’équipe réseau du client puisse contrôler le canal plutôt que de croire une description.
- Les interfaces d’intégration. Messagerie, identité, accès au modèle et horodatage sont chacun une option configurée par le client, avec des conséquences explicites sur les affirmations permises. Toute option activée mais non raccordée doit bloquer l’opération. L’absence de repli silencieux est ici une propriété de sécurité.
- Faire fonctionner un petit modèle de langage sur le matériel du client, dans son périmètre, pour les fonctions d’IA activées, sans qu’une instruction puisse être transmise à l’extérieur.
- Ingénierie produit, de manière continue. Environ la moitié du travail concerne l'application React et les fonctions côté serveur qui lui sont associées. Ce n'est pas un poste exclusivement lié à la plateforme.
Ce qu'il faut
- A déjà placé un service PostgreSQL avec état dans des conteneurs, l’a exploité en production et l’a réellement restauré depuis une sauvegarde, au-delà d’une simple procédure écrite.
- Maîtrise les primitives de base de Kubernetes et sait expliquer pourquoi un StatefulSet avec modèle de demande de volume n’équivaut pas à une base de données gérée par un opérateur.
- Écrit du TypeScript sur l'interface utilisateur et les fonctions côté serveur, et n'a pas de problème à passer une demi-semaine dans le code produit.
- A maintenu le blocage d’un contrôle en cas d’échec malgré la pression de livraison et sait raconter les échanges nécessaires pour y parvenir.
- Lit les politiques de sécurité au niveau des lignes de Postgres et peut expliquer comment une politique apparemment valable peut présenter une fuite.
- Travaille à distance et de manière autonome sur un domaine dont personne d’autre n’est responsable. Le poste est ouvert aux candidatures du monde entier ; les 90 premiers jours ci-dessus décrivent honnêtement l’ampleur du premier trimestre.
Ce que ce poste n'est pas
- Ce n’est pas un poste limité à la plateforme Kubernetes. Environ la moitié du travail porte sur le code de l’application ; il ne conviendra pas à une personne qui souhaite rester éloignée du produit.
- Ce n’est pas un projet à créer de zéro. La plateforme existe, avec un long historique de migrations. Chaque décision de conditionnement dépend de cet existant et des affirmations que l’entreprise peut légitimement faire.
- Ce n’est pas une fonction d’audit ou d’assurance. Les garde-fous sont du code exécuté, pas des observations rédigées sur le code d’une autre équipe.
- Ce n'est pas un poste de direction avec des équipes sous sa responsabilité. Il n'y a personne à encadrer pour l'instant, et l'annonce ne le prétendra pas.