Régie · en cours, plus de 12 mois
Groupe bancaire national
Des ingénieurs embarqués dans les équipes du client, sur leur dépôt et leur chaîne de production. Ce qui se faisait à la main est décrit, versionné et relu.
Ce que nous faisons · expertise
Des architectures où la fuite n'est pas une option.
Chiffrement, contrôle d'accès granulaire, journalisation complète, cloisonnement. Nous auditons les piles data existantes et nous outillons les exigences techniques de NIS2 — sans jamais prétendre vous rendre conforme à votre place.
Méthode
Talos Linux n'a pas de shell. Pas de session interactive, pas de démon SSH, pas de gestionnaire de paquets, un système de fichiers racine en lecture seule. Un nœud reçoit un document de configuration déclaratif au démarrage et s'y conforme ; tout le reste — lire les journaux, lister les disques, redémarrer, monter de version, interroger les membres etcd, produire un paquet de diagnostic — est une méthode d'une API gRPC, authentifiée par certificat client. Il n'existe pas de chemin par mot de passe.
Ce que cela change se lit dans les deux sens, et il faut les tenir ensemble. Du côté de la sécurité : aucun interpréteur de commandes à compromettre, aucun paquet à faire dériver, aucune modification manuelle qui survive au redémarrage, et chaque acte d'administration devient un appel typé, donc journalisable et rejouable. Du côté de l'exploitation : on ne répare plus un nœud à la main. On corrige la configuration et on réapplique, ou on remplace le nœud. Et l'on dépend entièrement de son client d'API.
Nous avons donc écrit le nôtre. talos-rust-client est un client gRPC en Rust : quatorze fichiers, 8 316 lignes, dont la surface d'API typée générée depuis les proto officiels de SideroLabs ; le connecteur, la lecture du talosconfig et les types d'erreur sont écrits à la main. Le mTLS n'y est pas une option de configuration. L'autorité de certification, le certificat client et la clé cliente sont trois champs obligatoires, et leur absence est une erreur typée avant toute tentative de connexion — pas un avertissement dans un journal. Le tout est publié sur crates.io sous double licence MIT ou Apache-2.0.
Le reste de la posture suit le même principe : la règle vit dans le système, pas dans un classeur. Les secrets sont dans OpenBao, dont vous détenez les parts de descellement ; le réseau est en refus par défaut sous Cilium, avec les sorties énumérées destination par destination ; les certificats internes sont émis et renouvelés par cert-manager ; l'ensemble de la plateforme est décrit dans un dépôt GitOps où chaque composant est une application réconciliée en continu, ordonnée par vagues de synchronisation. Un auditeur n'a pas à nous croire : il lit le dépôt et compte.
Sur la conformité, la formulation est fixe et ne bougera pas. Conçu pour outiller les exigences techniques de NIS2 — matrice de responsabilité partagée publiée. § La directive fait porter les mesures de gestion des risques à l'entité, pas à son fournisseur, et nous ne détenons par ailleurs aucune qualification. ▪
Le dépôt d'où vient ce code
talos-rust-client
Client gRPC Talos en Rust, publié sur crates.io. Surface d'API typée générée depuis les proto officiels de SideroLabs ; connecteur mTLS, lecture du talosconfig et erreurs écrits à la main.
github.com/nudibranches-tech/talos-rust-client
Mesures relevées sur src/, hors tests et exemples.
async fn connect_normal(self) -> Result<Channel> {
// Validate required fields
let ca_cert = self
.ca_cert
.ok_or_else(|| Error::MissingConfig("CA certificate".to_string()))?;
let client_cert = self
.client_cert
.ok_or_else(|| Error::MissingConfig("Client certificate".to_string()))?;
let client_key = self
.client_key
.ok_or_else(|| Error::MissingConfig("Client key".to_string()))?;
// Create tonic Certificate and Identity
let ca = Certificate::from_pem(ca_cert);
let identity = Identity::from_pem(client_cert, client_key);
// Configure TLS
let mut tls_config = ClientTlsConfig::new().ca_certificate(ca).identity(identity);
…// Re-export commonly used client types pub use cluster::cluster_service_client::ClusterServiceClient; pub use inspect::inspect_service_client::InspectServiceClient; pub use machine::machine_service_client::MachineServiceClient; pub use security::security_service_client::SecurityServiceClient; pub use storage::storage_service_client::StorageServiceClient; pub use time::time_service_client::TimeServiceClient;
Périmètre
Un audit part de l'existant : ce qui est réellement exposé, qui a réellement accès, par où les données sortent.
Missions
Décrits par le dispositif mis en place et par ce qu'il a produit.
Régie · en cours, plus de 12 mois
Des ingénieurs embarqués dans les équipes du client, sur leur dépôt et leur chaîne de production. Ce qui se faisait à la main est décrit, versionné et relu.
Cloud souverain · en cours
Un cloud interne de données et d'inférence, déployé sous maîtrise publique : les modèles tournent sur l'infrastructure de la collectivité, et les journaux restent de son côté.
Prendre contact
Un audit part de l'existant : ce qui est réellement exposé, qui a réellement accès, par où sortent les données. Le livrable est un rapport écrit, avec ses hypothèses, ses angles morts, et la liste de ce que nous n'avons pas pu vérifier faute d'accès.