Collecter les journaux AWS Security Hub
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
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur: Créer un bucket.
- Enregistrez le nom et la région du bucket pour une utilisation ultérieure.
- Créez un utilisateur en suivant le guide de l'utilisateur Créer un utilisateur IAM.
- Sélectionnez le compte utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif: ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- 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.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Créer une fonction Lambda
- Connectez-vous à l'AWS Management Console.
- Accédez à Lambda.
- Cliquez sur Créer une fonction, puis sélectionnez Créer à partir de zéro.
- Attribuez un nom à votre fonction, par exemple
SecurityHubToS3
. - Choisissez Python 3.x pour l'environnement d'exécution.
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') }
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
- Connectez-vous à l'AWS Management Console.
- Dans la barre de recherche, saisissez Security Hub, puis sélectionnez-le dans la liste des services.
- Cliquez sur Paramètres.
- Dans la section Intégrations, recherchez EventBridge, puis cliquez sur Activer.
- Dans la barre de recherche, saisissez EventBridge, puis sélectionnez-le dans la liste des services.
- Dans la console EventBridge, cliquez sur Règles > Créer une règle.
- Fournissez la configuration de règle suivante :
- Nom de la règle: attribuez un nom descriptif à la règle (par exemple, SendSecurityHubFindingsToS3).
- Source d'événement: sélectionnez Services AWS.
- Nom du service: sélectionnez Security Hub (Hub de sécurité).
- Type d'événement: sélectionnez Résultats du Security Hub.
- Définir la cible: sélectionnez Fonction Lambda.
- Sélectionnez la fonction Lambda que vous venez de créer (
SecurityHubToS3
).
- Cliquez sur Créer.
Configurer un flux dans Google SecOps pour ingèrer les journaux AWS Security Hub
- Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux AWS Security Hub).
- Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez AWS Security Hub comme type de journal.
- Cliquez sur Suivant.
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.
- Remplacez
- 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.
Cliquez sur Suivant.
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
deGENERIC_EVENT
àUSER_RESOURCE_ACCESS
.
24/03/2023
Amélioration :
- Lorsque
detail.findings.0.Resources.0.Type
==AwsEcsTaskDefinition
: - Mappage de
target.resource.resource_type
surTASK
. - Mappage de
event_type
surUSER_RESOURCE_ACCESS
. - Mappage de
detail.findings.0.ProductFields.Resources:0/Id
surprincipal.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é parAMAZON
. - Modification de la valeur product_name de
AWS SECURITY HUB
enAWS Security Hub
. - Analyse des nouveaux journaux au format JSON contenant
configurationItem
ouconfigurationItems
. - 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.