Collecter les journaux AWS Security Hub

Compatible avec :

Ce document explique comment ingérer des journaux AWS Security Hub dans Google Security Operations. AWS Security Hub offre une vue complète des alertes et des résultats de sécurité dans les comptes AWS. En envoyant ces résultats à Google SecOps, vous pouvez utiliser les fonctionnalités de Google SecOps pour améliorer la surveillance et la détection des menaces.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Instance Google SecOps
  • Accès privilégié à AWS

Configurer AWS IAM et S3

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour une utilisation ultérieure.
  3. Créez un utilisateur en suivant ce guide : Créer un utilisateur IAM.
  4. Sélectionnez l'utilisateur créé.
  5. Sélectionnez l'onglet Informations d'identification de sécurité.
  6. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif : ajoutez un tag de description.
  10. Cliquez sur Créer une clé d'accès.
  11. Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour une utilisation ultérieure.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Joindre directement des règles.
  17. Recherchez et sélectionnez la règle AmazonS3FullAccess.
  18. Cliquez sur Suivant.
  19. Cliquez sur Ajouter des autorisations.

Créer une fonction Lambda

  1. Connectez-vous à l'AWS Management Console.
  2. Accédez à Lambda.
  3. Cliquez sur Créer une fonction, puis sélectionnez Créer à partir de zéro.
  4. Donnez un nom à votre fonction, par exemple SecurityHubToS3.
  5. Choisissez Python 3.x pour l'environnement d'exécution.
  6. Saisissez le code Lambda qui récupère les résultats d'EventBridge et les écrit dans votre bucket S3 :

    import json
    import boto3
    from datetime import datetime
    
    # Initialize the S3 client
    s3_client = boto3.client('s3')
    
    # S3 bucket where findings will be stored
    bucket_name = 'aws-security-hub-findings-stream'
    
    def lambda_handler(event, context):
       # Extract Security Hub findings from the event
       findings = event['detail']['findings']
    
       # Generate a timestamp for the file name to avoid overwriting
       timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S')
    
       # Generate the S3 object key (file name) based on the timestamp
       object_key = f"security_hub_findings_{timestamp}.json"
    
       # Convert findings to JSON format
       findings_json = json.dumps(findings)
    
       # Upload the findings to S3
       try:
          response = s3_client.put_object(
                Bucket=bucket_name,
                Key=object_key,
                Body=findings_json,
                ContentType='application/json'
          )
          print(f"Successfully uploaded findings to S3: {response}")
       except Exception as e:
          print(f"Error uploading findings to S3: {e}")
          raise e
    
       return {
          'statusCode': 200,
          'body': json.dumps('Successfully processed findings')
       }
    
  7. Définissez les autorisations pour Lambda en ajoutant un rôle IAM à la fonction Lambda avec la stratégie suivante :

    {
       "Version": "2012-10-17",
       "Statement": [
          {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*"
          }
       ]
    }
    

Configurer AWS Security Hub pour transférer les résultats avec EventBridge

  1. Connectez-vous à l'AWS Management Console.
  2. Dans la barre de recherche, saisissez Security Hub, puis sélectionnez-le dans la liste des services.
  3. Cliquez sur Paramètres.
  4. Dans la section Integrations (Intégrations), recherchez EventBridge, puis cliquez sur Enable (Activer).
  5. Dans la barre de recherche, saisissez EventBridge et sélectionnez-le dans la liste des services.
  6. Dans la console EventBridge, cliquez sur Règles > Créer une règle.
  7. Fournissez la configuration de règle suivante :
    1. Nom de la règle : attribuez un nom descriptif à la règle (par exemple, SendSecurityHubFindingsToS3).
    2. Source de l'événement : sélectionnez Services AWS.
    3. Nom du service : sélectionnez Security Hub.
    4. Type d'événement : sélectionnez Résultats Security Hub.
    5. Définissez la cible : sélectionnez Fonction Lambda.
    6. Sélectionnez la fonction Lambda que vous venez de créer (SecurityHubToS3).
  8. Cliquez sur Créer.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux
  • Plate-forme de contenu > Packs de contenu

Configurer des flux à partir de Paramètres SIEM > Flux

Pour configurer plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer plusieurs flux.

Pour configurer un seul flux :

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux AWS Security Hub).
  5. Sélectionnez Amazon S3 comme Type de source.
  6. Sélectionnez AWS Security Hub comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • Région : région dans laquelle se trouve le bucket Amazon S3.
    • URI S3 : URI du bucket.
      • s3://your-log-bucket-name/
        • Remplacez your-log-bucket-name par le nom réel de votre bucket S3.
    • L'URI est : sélectionnez Répertoire ou Répertoire incluant les sous-répertoires, selon la structure de votre bucket.
    • Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.

    • ID de clé d'accès : clé d'accès de l'utilisateur disposant des autorisations de lecture du bucket S3.

    • Clé d'accès secrète : clé secrète de l'utilisateur avec les autorisations nécessaires pour lire le bucket S3.

    • Espace de noms de l'élément : espace de noms de l'élément.

    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.

  9. Cliquez sur Suivant.

  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • Région : région dans laquelle se trouve le bucket Amazon S3.
  • URI S3 : URI du bucket.
    • s3://your-log-bucket-name/
      • Remplacez your-log-bucket-name par le nom réel de votre bucket S3.
  • L'URI est : sélectionnez Répertoire ou Répertoire incluant les sous-répertoires, selon la structure de votre bucket.
  • Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.
  • ID de clé d'accès : clé d'accès de l'utilisateur disposant des autorisations de lecture du bucket S3.

  • Clé d'accès secrète : clé secrète de l'utilisateur avec les autorisations nécessaires pour lire le bucket S3.

Options avancées

  • Nom du flux : valeur préremplie qui identifie le flux.
  • Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
  • Espace de noms de l'élément : espace de noms associé au flux.
  • Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.

Table de mappage UDM

Champ de journal Mappage UDM Logique
account principal.group.product_object_id ID du compte AWS associé au résultat.
configurationItem.ARN target.resource.id Nom de ressource Amazon (ARN) de l'élément de configuration.
configurationItem.awsAccountId principal.user.userid ID de compte AWS de l'élément de configuration.
configurationItem.awsRegion target.asset.location.country_or_region Région AWS de l'élément de configuration.
configurationItem.configuration.complianceType security_result.summary Type de conformité de l'élément de configuration.
configurationItem.configuration.configRuleList[].complianceType security_result.summary État de conformité de chaque règle de configuration.
configurationItem.configuration.configRuleList[].configRuleArn security_result.rule_id ARN de la règle AWS Config.
configurationItem.configuration.configRuleList[].configRuleId security_result.about.labels.configRuleId ID de la règle AWS Config.
configurationItem.configuration.configRuleList[].configRuleName security_result.rule_name Nom de la règle AWS Config.
configurationItem.configuration.privateIpAddress target.ip Adresse IP privée de l'élément de configuration.
configurationItem.configuration.publicIpAddress target.ip Adresse IP publique de l'élément de configuration.
configurationItem.configurationItemCaptureTime target.asset.attribute.creation_time Heure de génération de l'élément de configuration, convertie en code temporel.
configurationItem.configurationItemStatus target.asset.attribute.labels.Configuration Item Status État de l'élément de configuration.
configurationItem.relationships[].resourceId target.asset.attribute.cloud.vpc.id ID de ressource de la ressource associée, utilisé pour l'ID de VPC s'il correspond à vpc.
configurationItem.resourceId target.resource.id ID de ressource de l'élément de configuration.
configurationItem.resourceName target.resource.name Nom de la ressource.
configurationItem.resourceType target.resource.resource_subtype Type de ressource de l'élément de configuration.
configurationItem.tags.Contact principal.user.user_display_name OU principal.user.email_addresses Coordonnées extraites des balises, analysées pour l'adresse e-mail et le nom d'utilisateur.
configurationItem.tags.OS/configurationItem.tags.Os target.asset.platform_software.platform Système d'exploitation à partir des tags, mappé sur la plate-forme s'il s'agit de Windows ou Linux.
configurationItemDiff.changeType metadata.event_type Type de modification, mappé à RESOURCE_WRITTEN ou RESOURCE_CREATION.
detail.accountId principal.group.product_object_id ID du compte AWS associé au résultat.
detail.actionDescription detail.actionName detail.description sec_result.description Description du problème.
detail.findings[].AwsAccountId principal.group.product_object_id ID du compte AWS associé au résultat.
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description sec_result.description Description du problème.
detail.findings[].FindingProviderFields.Severity.Label sec_result.severity Libellé de gravité du résultat, converti en majuscules.
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. Voir ci-dessous Différents champs utilisés pour les champs supplémentaires, les informations sur le principal et la cible.
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region target.location.name Région AWS du résultat.
detail.findings[].Resources[].Details. Voir ci-dessous Détails sur les ressources concernées par le résultat.
detail.findings[].Resources[].Id target.resource.product_object_id ID de la ressource.
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region target.location.name Région AWS de la ressource.
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type target.resource.resource_type, target.resource.resource_subtype, metadata.event_type Type de ressource utilisé pour le mappage du type, du sous-type et du type d'événement de ressource.
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title sec_result.summary Titre du problème.
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type metadata.product_event_type Type de détail de l'événement.
id metadata.product_log_id ID de l'événement.
region target.location.name Région AWS de l'événement.
resources[] source time version (logique de l'analyseur) metadata.event_timestamp Heure de création de l'entrée de journal d'origine, utilisée comme code temporel de l'événement.
(Logique de l'analyseur) metadata.log_type Variable définie sur AWS_SECURITY_HUB.
(Logique de l'analyseur) metadata.product_name Variable définie sur AWS Security Hub.
(Logique de l'analyseur) metadata.vendor_name Variable définie sur AMAZON.
(Logique de l'analyseur) target.asset.attribute.cloud.environment Variable définie sur AMAZON_WEB_SERVICES.
(Logique de l'analyseur) metadata.event_type Définissez la valeur par défaut sur USER_RESOURCE_ACCESS si elle n'est pas mappée à partir de Resources[].Type ou configurationItemDiff.changeType. Définissez sur STATUS_UPDATE si configurationItems est présent et qu'aucun autre type d'événement n'est défini. Définie sur RESOURCE_READ si configurationItem ou configurationItems sont présents et que l'état est OK ou ResourceDiscovered. Définie sur RESOURCE_DELETION si configurationItem ou configurationItems sont présents et que l'état est ResourceDeleted.
(Logique de l'analyseur) metadata.description Définie sur guardduty si detail.findings[].ProductFields.aws/guardduty/service/serviceName est présent.
(Logique de l'analyseur) target.asset.attribute.cloud.vpc.resource_type Définie sur VPC_NETWORK si configurationItems.relationships[].resourceId correspond à vpc.
(Logique de l'analyseur) target.resource.resource_type Définie sur VIRTUAL_MACHINE si configurationItem ou configurationItems est présent. Définissez cette valeur sur UNSPECIFIED si aucun autre type de ressource n'est défini.
(Logique de l'analyseur) target.asset.platform_software.platform Définissez cette valeur sur WINDOWS ou LINUX en fonction de la présence de Windows ou (Linux|LINUX) dans le message pour configurationItem. Pour configurationItems, la valeur est définie en fonction de configItem.tags.OS ou configItem.tags.Os.
(Logique de l'analyseur) disambiguation_key Ajouté lorsque plusieurs événements sont générés à partir d'une même entrée de journal.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.