Collecter les journaux AWS Security Hub

Compatible avec:

Ce document explique comment ingérer les 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 disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un 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 le guide de l'utilisateur Créer un utilisateur IAM.
  4. Sélectionnez le compte 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 une balise de description.
  10. Cliquez sur Créer une clé d'accès.
  11. Cliquez sur Download CSV file (Télécharger le fichier CSV) pour enregistrer la clé d'accès et la clé d'accès secrète pour les utiliser ultérieurement.
  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. Attribuez 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, indent=4)
    
       # 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 des 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 Intégrations, recherchez EventBridge, puis cliquez sur Activer.
  5. Dans la barre de recherche, saisissez EventBridge, puis 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 d'événement: sélectionnez Services AWS.
    3. Nom du service: sélectionnez Security Hub (Hub de sécurité).
    4. Type d'événement: sélectionnez Résultats du Security Hub.
    5. Définir 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 un flux dans Google SecOps pour ingèrer les journaux AWS Security Hub

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

    • Region (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 du bucket.
    • Un URI est: sélectionnez Répertoire ou Répertoire incluant des sous-répertoires.
    • Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.

    • ID de clé d'accès: clé d'accès utilisateur ayant accès au bucket S3.

    • Clé d'accès secrète: clé secrète de l'utilisateur ayant accès au bucket S3.

    • Espace de noms des éléments: espace de noms des éléments.

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

  8. Cliquez sur Suivant.

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

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
account principal.group.product_object_id ID du compte AWS associé à l'anomalie.
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 capture 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 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 identifier 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é sur RESOURCE_WRITTEN ou RESOURCE_CREATION.
detail.accountId principal.group.product_object_id ID du compte AWS associé à l'anomalie.
detail.actionDescription detail.actionName detail.description sec_result.description Description de la non-conformité.
detail.findings[].AwsAccountId principal.group.product_object_id ID du compte AWS associé à l'anomalie.
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description sec_result.description Description de la non-conformité.
detail.findings[].FindingProviderFields.Severity.Label sec_result.severity Libellé de gravité de l'anomalie, 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 Divers champs utilisés pour les champs supplémentaires, le principal et les informations de cible.
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region target.location.name Région AWS de l'anomalie.
detail.findings[].Resources[].Details. Voir ci-dessous Informations sur les ressources impliquées dans 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 de ressource, du sous-type et du type d'événement.
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title sec_result.summary Titre de la découverte.
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type metadata.product_event_type Type de détails 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éfini sur USER_RESOURCE_ACCESS par défaut si non mappé à partir de Resources[].Type ou configurationItemDiff.changeType. Définissez-le sur STATUS_UPDATE si configurationItems est présent et qu'aucun autre type d'événement n'est défini. Définissez cette valeur sur RESOURCE_READ si configurationItem ou configurationItems est présent et que l'état est OK ou ResourceDiscovered. Définissez cette valeur sur RESOURCE_DELETION si configurationItem ou configurationItems est présent et que l'état est ResourceDeleted.
(Logique de l'analyseur) metadata.description Définissez-le 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éfinissez-le sur VPC_NETWORK si configurationItems.relationships[].resourceId correspond à vpc.
(Logique de l'analyseur) target.resource.resource_type Définissez cette valeur 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, il est défini 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 seule entrée de journal.

Modifications

2025-02-18

Amélioration :

  • Prise en charge d'un nouveau tableau de format de journal JSON.

2025-01-20

Amélioration :

  • Prise en charge du nouveau format de journal.

2025-01-16

Amélioration :

  • Prise en charge d'un nouveau format de journal JSON.

2023-06-20

Amélioration :

  • Modification de metadata.event_type de GENERIC_EVENT à USER_RESOURCE_ACCESS.

24/03/2023

Amélioration :

  • Lorsque detail.findings.0.Resources.0.Type == AwsEcsTaskDefinition :
  • Mappage de target.resource.resource_type sur TASK.
  • Mappage de event_type sur USER_RESOURCE_ACCESS.
  • Mappage de detail.findings.0.ProductFields.Resources:0/Id sur principal.asset_id.
  • Tous les autres journaux défaillants ont été analysés en tant que GENERIC_EVENT, car STATUS_UPDATE n'était pas une bonne option d'analyse pour eux.

2022-08-22

Amélioration :

  • Le nom du fournisseur AWS SECURITY HUB a été remplacé par AMAZON.
  • Modification de la valeur product_name de AWS SECURITY HUB en AWS Security Hub.
  • Analyse des nouveaux journaux au format JSON contenant configurationItem ou configurationItems.
  • J'ai géré les journaux ingérés en tant que fichier d'importation en les séparant à l'aide d'une boucle for et en analysant chacun d'eux en tant qu'événement individuel.

2022-07-01

  • Analyseur créé

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