Collecter les journaux AWS Security Hub
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
- 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 ce guide : Créer un utilisateur IAM.
- Sélectionnez l'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 un tag de description.
- Cliquez sur Créer une clé d'accès.
- 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.
- 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.
- Donnez 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) # 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 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
- 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 Integrations (Intégrations), recherchez EventBridge, puis cliquez sur Enable (Activer).
- Dans la barre de recherche, saisissez EventBridge et 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 de l'événement : sélectionnez Services AWS.
- Nom du service : sélectionnez Security Hub.
- Type d'événement : sélectionnez Résultats Security Hub.
- Définissez la cible : sélectionnez Fonction Lambda.
- Sélectionnez la fonction Lambda que vous venez de créer (
SecurityHubToS3
).
- 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 :
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- 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 :
- 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.
- Remplacez
- 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.
Cliquez sur Suivant.
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.
- Remplacez
- 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.