Aller au contenu principal
Retour à l’accueil

Sécurité & données — Diagnostic AWS CTN

Les réponses pour votre équipe technique et sécurité : accès, périmètre du diagnostic et traitement des données.

Le diagnostic CTN rapproche les coûts, les ressources observées et les contrôles de sécurité pour vous aider à prioriser. Il fonctionne en lecture seule par défaut, depuis nos comptes, sans agent à installer sur vos machines. Ce document précise les accès, les limites de la collecte, la conservation des données et les moyens de retirer l’accès.

En bref

  • Accès en lecture seule par défaut. Le rôle IAM standard n'autorise que les lectures de coût et de métadonnées énumérées ci-dessous. Le seul bloc de modification possible concerne Compute Optimizer ; il est désactivé par défaut et n'est ajouté qu'après un choix explicite de l'opérateur.
  • Aucun agent à installer. Nous n'installons aucun agent, aucune Lambda, aucun collecteur dans votre compte. Toute l'analyse s'exécute côté CTN, sous nos propres identifiants, après un AssumeRole sur le rôle que vous contrôlez.
  • Un accès lié à votre diagnostic. Le rôle exige un identifiant sts:ExternalId unique de 128 bits, propre à votre relation avec CTN et visible dans la configuration AWS. Il complète la restriction au rôle CTN autorisé.
  • Suppression à 30 jours des données de travail. Les objets de collecte, findings, rapports, étapes/événements détaillés et jetons de rapport expirent automatiquement. Les fiches prospect et les métadonnées synthétiques de run sont conservées séparément ; elles ne font pas partie de cette promesse d'expiration automatique.
  • Vous pouvez retirer l’accès. Supprimez la stack CloudFormation quand vous le souhaitez. La durée des sessions AWS est plafonnée à une heure.

Ce que vous déployez

Le guide vous accompagne pour déployer une stack CloudFormation dans votre console AWS. Cette stack crée un seul rôle IAM : CTNFinOpsEstimatorRole. La relation de confiance de ce rôle :

  • fait confiance uniquement au broker de production stable exact arn:aws:iam::077770363028:role/ctn-prod-prospect-access-broker ; aucun principal racine du compte CTN n'est présent ;
  • exige un identifiant sts:ExternalId propre à votre relation avec CTN, en plus de la restriction au rôle de production autorisé.

Le broker de staging ne peut être ajouté que si le paramètre est activé et si CloudFormation s'exécute dans le compte canari interne Minggle 039320700774. Un compte client externe ne peut donc pas activer cette confiance.

Le nom du rôle est fixe et la liste d'actions est figée. Le SHA-256 du template publié est vérifiable (clés versionnées immuables templates/vX.Y.Z/) — vous auditez exactement ce que vous déployez.

Le périmètre exact (lecture seule)

La politique de permissions par défaut contient exactement 232 entrées d'action en lecture seule, gelées avec les collecteurs de coûts, d'inventaire, les vérifications « quick-win », les contrôles de conformité et le catalogue complet de contrôles que nous exécutons. Une entrée est le wildcard de lecture contrôlé compute-optimizer:Get* ; les 231 autres sont nommées individuellement. L'option Compute Optimizer ajoute exactement 3 entrées, soit 235 uniquement dans cette configuration explicitement activée :

  • Cost Explorer — ce:Get*, ce:List* (dépenses par service, recommandations de rightsizing et de Savings Plans), dont la couverture et l'utilisation des engagements : ce:GetSavingsPlansCoverage, ce:GetSavingsPlansUtilization, ce:GetReservationCoverage, ce:GetReservationUtilization (part d'usage non couverte par un Savings Plan / une réservation, et taux d'utilisation de l'engagement souscrit).
  • Cost Optimization Hub / Compute Optimizer — cost-optimization-hub:ListEnrollmentStatuses, ListRecommendations, GetRecommendation ; compute-optimizer:Get*.
  • EC2 / EBS / réseau — ec2:Describe* (volumes, snapshots, adresses Elastic IP, instances, passerelles NAT, régions).
  • Load balancers — elasticloadbalancing:Describe*.
  • CloudWatch — cloudwatch:GetMetricData, ListMetrics (mesures d'inactivité sur 14 jours).
  • CloudWatch Logs — logs:DescribeLogGroups (métadonnées des groupes de logs : rétention et volume stocké, pour le constat « rétention illimitée »). Jamais logs:GetLogEvents / logs:FilterLogEvents : aucun contenu de log n'est lu.
  • Inventaire S3 / DynamoDB / EKS — métadonnées uniquement, dont s3:ListBucketMultipartUploads (clés et dates des téléversements incomplets, jamais le contenu des objets ou leurs parties), dynamodb:DescribeTimeToLive (état TTL), eks:ListAddons et eks:DescribeAddon (configuration de l'add-on d'observabilité). Un test mécanique dérive les actions IAM de chaque commande SDK de production exécutée sous le rôle assumé et échoue si l'une d'elles manque au template ; les droits réservés à des collecteurs planifiés sont signalés comme inutilisés sans faire échouer le test.
  • Posture de conformité (v1.4.0, incluse dans v2.0.0) — contrôles type CIS, en lecture de configuration uniquement : s3:GetBucketPolicy + s3:GetBucketPolicyStatus (le document de politique du bucket, jamais le contenu des objets), ec2:DescribeSecurityGroups (forme des règles d'entrée : ports/CIDR), et cinq lectures de métadonnées IAM : iam:ListUsers (noms d'utilisateurs), iam:ListAccessKeys (nombre et identifiants de clés), iam:GetAccessKeyLastUsed (date de dernière utilisation d'une clé, jamais le secret), iam:ListMFADevices (numéros de série des périphériques MFA), iam:GetLoginProfile (existence d'un accès console + horodatages, jamais le mot de passe). Aucune action d'administration IAM, aucun secret. (Le rapport d'informations d'identification IAM ajouté en v2.0.0 est décrit ci-dessous.)

Ajouts à l’inventaire (v2.1.0)

L’inventaire réseau comprend les VPC, sous-réseaux, groupes de sécurité, tables de routage, ACL réseau, endpoints VPC et passerelles Internet. Un index et une vue Resource Explorer existants peuvent étendre la découverte aux types pris en charge par AWS via les autorisations GetIndex, GetDefaultView, GetView et Search. Aucun index ni vue n’est créé. Le rapport précise le compte, les régions interrogées, la couverture des sources et les lectures indisponibles. Ce n’est pas un recensement exhaustif de toute l’infrastructure. Les ressources non chiffrées figurent aussi dans l’inventaire et son export CSV protégé.

Les contrôles des moniteurs d’anomalies utilisent ce:GetAnomalyMonitors. Les vérifications manuelles restent manuelles et les données absentes restent inconnues. Le rattachement à un référentiel ne constitue ni une certification ni une conformité complète.

Le format du rapport IAM contient des statuts et des dates, sans mot de passe ni empreinte de mot de passe.

Catalogue de contrôles (v2.1.0)

La politique v2.1.0 contient 232 entrées d'action par défaut afin qu'une seule exécution couvre le catalogue complet de contrôles, au-delà des huit « quick-win » initiaux. Chaque action ajoutée reste un Describe / List / Get de métadonnées de configuration : aucune lecture de plan de données, aucune valeur de secret, aucune mutation.

  • Statut de journalisation et de détection — configuration des trails CloudTrail et recherche d'événements de gestion, enregistreurs et règles AWS Config, et services de posture que vous faites peut-être déjà tourner (GuardDuty, Security Hub, Inspector, Macie, IAM Access Analyzer). Ces services sont sondés d'abord et lus uniquement s'ils sont déjà activés — les collecteurs n'activent jamais rien.
  • Identité et organisation — paramètres IAM au niveau du compte (politique de mot de passe, résumé du compte), métadonnées de rôles, politiques, certificats et fournisseurs de fédération, structure Organizations, champs de contact du compte. Le rapport d'informations d'identification IAM est inclus : il contient des statuts, dates de rotation et dates de dernière utilisation des identifiants uniquement — les entrées standard CIS 1.1/1.12/1.14. Aucune valeur d'identifiant en clair n'existe dans ce rapport ni n'atteint CTN.
  • Chiffrement et sauvegarde — inventaire des clés KMS et statut de rotation, métadonnées Secrets Manager / SSM (noms, dates, indicateurs de rotation — jamais les valeurs), configuration S3 (chiffrement, journalisation, réplication, contrôle d'appartenance, verrouillage d'objets, blocage des accès publics au niveau du compte) et indicateurs de chiffrement et de sauvegarde de RDS, Redshift, DocumentDB, Neptune, MemoryDB, EFS et FSx.
  • Calcul et périphérie — métadonnées ECR (dépôts, images), configuration SageMaker (notebooks, endpoints), structure d'API Gateway (REST et v2) via les actions de lecture uniques apigateway:GET, configuration CloudFront, listes WAFv2, certificats ACM et métadonnées réseau VPC (flow logs, ACL, sous-réseaux, tables de routage, endpoints).
  • Résilience et messagerie — métadonnées AWS Backup (plans, sélections, coffres), SNS, SQS, Step Functions, MSK (Kafka), EMR et Athena.
  • Gouvernance FinOps — catégories de coûts et balises d'allocation, lectures d'anomalies et de prévisions, définitions de rapports CUR, et totaux de budgets (budgets:ViewBudget).
  • Vagues de couverture des écarts (31 août 2026) — métadonnées en lecture seule complétant le catalogue de contrôles : politiques SSL des répartiteurs de charge et attributs de désynchronisation des équilibreurs classiques, structure des définitions de tâches ECS, couverture des règles WAF classique et WAFv2, domaines OpenSearch, abonnements aux événements et attributs de snapshots RDS, snapshots de clusters DocumentDB, contrôles d'accès à l'origine CloudFront, politiques Network Firewall, points d'accès et configuration du cycle de vie EFS, projets CodeBuild, pools d'utilisateurs Cognito, instances de réplication DMS, bus EventBridge, politiques de cycle de vie ECR, statut de journalisation des requêtes et DNSSEC Route 53, plans AWS Backup et canaux de livraison Config. Les lectures de définitions de tâches et de projets ne renvoient que la structure — les valeurs des variables d'environnement sont supprimées avant tout stockage.

Aucune autorisation pricing:* n’est accordée dans votre compte : les prix catalogue proviennent d'une table statique côté CTN et d'un GetProducts mis en cache sous nos identifiants. Nous ne lisons aucune donnée applicative, aucun contenu de bucket S3, aucune base de données, aucun secret. Nous voyons la forme et le coût de votre infrastructure, jamais ce qui tourne dedans.

Ce que le rôle ne peut pas faire

Par défaut, la politique attachée ne contient aucune action mutante. Le rôle ne peut pas : créer, modifier ou supprimer une ressource ; lire le contenu d'un bucket, d'une base ou d'un secret ; lancer ou arrêter une instance ; modifier l'IAM (les actions IAM accordées sont des lectures de métadonnées : posture utilisateurs/clés/MFA, paramètres de compte et rapport d'informations d'identification (statuts et dates, sans mot de passe ni empreinte de mot de passe) — jamais une valeur d'identifiant en clair, jamais une écriture). Un AssumeRole refusé ou une action hors périmètre est rejeté par AWS, pas par notre bonne volonté.

Une seule option, désactivée par défaut dans le template, le lien pré-rempli et l'interface CTN, peut être activée par un choix explicite de l'opérateur : l'opt-in Compute Optimizer. Elle ajoute uniquement compute-optimizer:UpdateEnrollmentStatus, iam:CreateServiceLinkedRole et iam:PutRolePolicy, ces deux dernières actions étant limitées au rôle lié au service Compute Optimizer. Elle n'active que Compute Optimizer, jamais Cost Optimization Hub.

Coût pour vous

La seule dépense directe dans votre compte vient de l'API Cost Explorer, qu'AWS facture 0,01 $ par page de résultats. Une invocation Lambda est plafonnée à 25 requêtes pour les dépenses/rightsizing historique et 50 requêtes pour le collecteur d'engagements, soit 75 requêtes ou 0,75 $. La machine d'état autorise 2 nouvelles tentatives après l'échec d'une tâche de collecte : le plafond absolu du workflow est donc de 225 requêtes, soit 2,25 $, calculé ainsi : (25 + 50) × (1 tentative initiale + 2 nouvelles tentatives). Ce plafond correspond au chemin d'échec ; une tâche réussie n'est pas rejouée. Les appels AssumeRole et les autres lectures sont gratuits, hors faible tarification propre aux métriques CloudWatch.

Où vivent vos données, et combien de temps

  • Région. La collecte, l'agrégation, la génération des rapports et le stockage côté AWS sont en eu-west-1 (Irlande). Cost Explorer et Cost Optimization Hub sont des services us-east-1 par nature (AWS), interrogés en lecture seule. Les requêtes publiques d'affichage d'un rapport sont traitées par un projet Vercel dédié, qui lit uniquement les enregistrements et objets du rapport dans AWS via un rôle OIDC distinct et limité.
  • Hébergement. L'infrastructure AWS CTN est serverless (Lambda, Step Functions, DynamoDB, S3) et l'interface publique est hébergée sur Vercel. Aucun identifiant de base de données n'existe : l'accès à AWS est entièrement porté par des rôles IAM.
  • Rétention des données de travail. Tous les objets du bucket de findings (résultats de collecte, JSON, HTML et PDF), les lignes détaillées d'étapes/événements, les états d'e-mail et les jetons de rapport expirent à 30 jours via le cycle de vie S3 et DynamoDB TTL. La suppression AWS après expiration est asynchrone, sans garantie d'heure précise. Les fiches prospect et les lignes Run META (identifiants de compte/contact, statut, dates et synthèse) n'ont actuellement pas de TTL et restent dans la console opérateur jusqu'à leur suppression par le processus de gestion de compte CTN. Elles sont explicitement exclues de la promesse d'expiration automatique à 30 jours.
  • Rapport partagé. Votre rapport est accessible via un lien à jeton (≥128 bits, stocké haché en SHA-256), non indexable (X-Robots-Tag: noindex), expirant à 30 jours et révocable à tout moment depuis notre console.

Révoquer l'accès

À tout moment, sans nous prévenir : supprimez la stack CloudFormation. CloudFormation détruit le rôle CTNFinOpsEstimatorRole et ses politiques. La durée des sessions STS est plafonnée à une heure. Vous pouvez retirer cet accès après réception du rapport ; il n’est pas nécessaire pour consulter les résultats déjà produits.

Vérification du template

  • Version publiée : v2.1.0
  • SHA-256 : 0beb68766710db156f64af3fdeef4e1fa16cf91d738c0a6f8936e3e284069aab — empreinte exacte du template v2.1.0 de 49924 octets, publié et relu depuis sa clé S3 immuable. Il inclut les lectures d’évaluation et les ajouts de couverture du 31 août 2026. Les clés précédentes ne sont jamais écrasées.

Avant le déploiement, calculez shasum -a 256 estimator-role.yaml et comparez le résultat à cette valeur.

Résumé pour votre revue sécurité

Résumé pour votre revue sécurité
QuestionRéponse
Type d'accèsRôle IAM, politique par défaut de 232 entrées d'action en lecture seule
Qui exécute quoi, oùCollecte/stockage AWS en eu-west-1 ; requêtes rapport sur Vercel ; rien chez vous
Défense confused-deputysts:ExternalId obligatoire de 128 bits
Données applicatives luesAucune (pas de contenu S3, base, secret)
Actions mutantesAucune par défaut ; opt-in Compute Optimizer explicite et limité
Coût dans votre compte≤ 2,25 $ au pire (225 requêtes CE avec les retries du workflow)
RétentionDonnées de travail : 30 jours ; métadonnées prospect/run : conservation séparée
RévocationSuppression de la stack CloudFormation ; sessions limitées à une heure
Auditabilité du templateSHA-256 publié, clés versionnées immuables

Des questions de votre équipe sécurité ? Écrivez à corentin@ctn-solutions.com — nous répondons avec le template complet et la politique IAM exacte.

Prêt à créer votre diagnostic ?

Créez votre diagnostic, puis suivez le guide pour connecter votre compte AWS en lecture seule. Vous avancez à votre rythme, sans rendez-vous, et gardez le contrôle de l’accès.

Lancer mon diagnostic gratuit