Skip to content
Learni
Voir tous les tutoriels
AWS

Comment maîtriser AWS Security Hub en 2026

Read in English

Introduction

AWS Security Hub est le hub centralisé de sécurité AWS qui agrège, analyse et priorise les findings de services comme GuardDuty, Inspector et Macie. En 2026, avec l'essor des menaces zero-day et des réglementations comme NIS2, il est indispensable pour les architectes cloud experts. Ce tutoriel expert vous guide pas à pas : activation multi-comptes, configuration de standards avancés (CIS, PCI DSS), création d'insights personnalisés, controls custom via CloudFormation et automatisations de remédiation avec Lambda/EventBridge. Vous apprendrez à scaler sur Organizations, query les findings avec Athena et exporter vers SIEM. Chaque étape inclut du code complet, fonctionnel et production-ready. À la fin, votre environnement sera audit-ready, réduisant le MTTR des incidents de 70%. Idéal pour les DevSecOps seniors gérant des workloads critiques.

Prérequis

  • Compte AWS avec admin privileges (ou SecurityHubFullAccess)
  • AWS CLI v2 installé et configuré (aws configure)
  • Stack CloudFormation pour démos (région us-east-1 recommandée)
  • Connaissances avancées en IAM, Lambda, EventBridge et Organizations
  • Outils : jq pour parser JSON CLI, Node.js 20+ pour SDK TypeScript

Activer Security Hub via AWS CLI

activate-security-hub.sh
#!/bin/bash

# Assumer us-east-1, adapter si besoin
aws securityhub enable-security-hub \
  --region us-east-1 \
  --enable-default-standards

# Vérifier le statut
aws securityhub describe-hub --region us-east-1

# Activer standards CIS AWS Foundations et PCI DSS
aws securityhub batch-enable-standards \
  --standards-arns "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.4.0" \
  "arn:aws:securityhub:us-east-1::standards/pci-dss/v/3.2.1" \
  --region us-east-1

# Lister les standards activés
aws securityhub describe-standards --region us-east-1

Ce script active Security Hub avec les standards par défaut, puis ajoute CIS et PCI DSS pour une conformité immédiate. Utilisez --region pour multi-régions. Piège : sans enable-default-standards, les controls de base ne s'appliquent pas ; vérifiez toujours avec describe-hub pour confirmer l'Hub ID.

Comprendre et intégrer les services sources

Security Hub ingère les findings de 30+ services AWS. Pour un setup expert, intégrez GuardDuty et Macie en premier. Les findings sont normalisés en format ASFF (AWS Security Finding Format) : Severity (CRITICAL/HIGH), Title, Resources. Pensez à eux comme un 'tableau de bord SIEM' : agrégation = visibilité, insights = priorisation intelligente.

Intégrer GuardDuty et lister findings initiaux

integrate-guardduty.sh
#!/bin/bash

# Créer un detector GuardDuty (si pas déjà fait)
aws guardduty create-detector --enable \
  --data-sources '{"MalwareProtection":{},"S3DataEvents":{},"Kubernetes":{}}' \
  --region us-east-1

# Obtenir l'ID du detector
DETECTOR_ID=$(aws guardduty list-detectors --region us-east-1 --query 'DetectorIds[0]' --output text)

# Activer les data sources
aws guardduty update-detector --detector-id $DETECTOR_ID \
  --enable S3Logs,MalwareProtection,KubernetesAuditLogs \
  --region us-east-1

# Dans Security Hub, l'intégration est auto après activation
# Lister les findings récents (top 10 HIGH/CRITICAL)
aws securityhub get-findings \
  --filters '{"SeverityLabel":["HIGH","CRITICAL"],"UpdatedAt":{"DateRange":{"Value":30,"Unit":"DAYS"}}}' \
  --region us-east-1 | jq '.Findings[0:2]'

Active GuardDuty avec protections étendues (S3, Malware, K8s) et query les findings Security Hub filtrés par sévérité. jq parse pour lisibilité. Piège : sans data sources activées, pas de findings ; attendez 15min pour ingestion.

Déployer controls personnalisés via CloudFormation

custom-controls.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Custom Security Hub Controls'

Resources:
  CustomControl:
    Type: AWS::SecurityHub::Insight
    Properties:
      Name: CustomHighRiskEC2
      Filters:
        ProductArn:
          Eq: 'arn:aws:securityhub:us-east-1::product/aws/guardduty'
        SeverityLabel:
          Eq: 'CRITICAL'
        AwsAccountId:
          Contains:
            - !Ref AWS::AccountId
      GroupByAttribute: ResourceRegion

  AutomationRule:
    Type: AWS::SecurityHub::AutomationRule
    Properties:
      RuleName: AutoArchiveOldFindings
      RuleArn: !GetAtt CustomControl.RuleArn
      Criteria:
        UpdatedAt:
          LessThan: '2024-01-01T00:00:00Z'
      Actions:
        - Type: AUTOMATION
          AutomationRuleParameters:
            ActionType: REMEDIATE
            FindingFields:
              WorkflowStatus: SUPPRESSED

Ce template CFN crée un insight custom groupé par région pour EC2 high-risk, et une règle d'automation pour archiver les vieux findings. Déployez avec aws cloudformation deploy. Piège : GroupByAttribute doit matcher un champ ASFF exact, sinon insight vide.

Automatiser les remédiations avec Lambda et EventBridge

Pour scaler, couplez Security Hub à EventBridge pour trigger Lambda sur findings CRITICAL. Analogie : un 'vigile automatique' qui tagge/quarantaine ressources. Configurez des rules EventBridge sur securityhub.FindingsUpdated.

Handler Lambda TypeScript pour remédiation auto

remediate-finding.ts
import { APIGatewayProxyHandler } from 'aws-lambda';
import { SecurityHubClient, BatchUpdateFindingsCommand } from '@aws-sdk/client-securityhub';

const client = new SecurityHubClient({ region: 'us-east-1' });

export const handler: APIGatewayProxyHandler = async (event) => {
  const body = JSON.parse(event.body || '{}');
  const findingId = body.detail.findings[0].Id;
  const resourceArn = body.detail.findings[0].Resources[0].Id;

  // Mise à jour workflow : NEW -> SUPPRESSED après check
  const updateParams = {
    FindingIdentifiers: [{ Id: findingId, ProductArn: 'arn:aws:securityhub:us-east-1::product/default' }],
    Note: { Text: `Auto-remédié le ${new Date().toISOString()}` },
    RecordState: 'ARCHIVED'
  };

  await client.send(new BatchUpdateFindingsCommand(updateParams));

  // Ex: Tagger l'EC2
  if (resourceArn.startsWith('arn:aws:ec2:')) {
    // Appel EC2 tag (simplifié)
    console.log(`Tag quarantaine sur ${resourceArn}`);
  }

  return { statusCode: 200, body: 'Remédiation OK' };
};

Ce handler Lambda met à jour le finding en 'ARCHIVED' et tagge la ressource impactée. Déployez via SAM ou CDK ; testez avec EventBridge console. Piège : validez ProductArn exact du finding, sinon BatchUpdate échoue ; gérez les batches >100.

Query avancée findings avec Athena

athena-securityhub-query.sql
-- Assumer table SecurityHubFindings créée via AWS Glue
SELECT 
  account_id,
  COUNT(*) as finding_count,
  AVG(CAST(severity_normalized as DOUBLE)) as avg_severity,
  resources[1].type as resource_type
FROM securityhub_findings
WHERE severity_label IN ('CRITICAL', 'HIGH')
  AND updated_at >= date_add('day', -7, current_date)
GROUP BY account_id, resources[1].type
HAVING finding_count > 5
ORDER BY avg_severity DESC
LIMIT 10;

Query Athena sur table Glue des findings exportés (via S3 continuous export). Créez la table via aws glue create-table. Piège : resources[1] assume un seul resource ; utilisez JSON functions pour nested arrays complexes.

Bonnes pratiques

  • Multi-comptes : Déléguez admin via Organizations pour centraliser (SecurityHubOrg).
  • Insights dynamiques : GroupBy sur Compliance.Status + ResourceType` pour dashboards.
  • Export S3 + Athena : Activez continuous export pour queries historiques.
  • RBAC strict : Utilisez SecurityHubReadOnly pour analysts, limitant Update.
  • Monitoring : Alarme CloudWatch sur >50 findings/jour.

Erreurs courantes à éviter

  • Oublier d'activer standards par région : findings incomplets.
  • Ignorer WorkflowStatus : findings bloqués en 'NEW' sans triage.
  • Queries sans filtres : timeouts sur millions de findings.
  • Lambda sans VPC/permissions : échecs sur EC2 remédiations.

Pour aller plus loin