Collecter les journaux d'accès au serveur AWS S3
Ce document explique comment collecter les journaux d'accès au serveur AWS S3 en configurant un flux Google Security Operations. L'analyseur extrait les champs à l'aide de modèles Grok, gère les entrées JSON potentielles et mappe les champs extraits à l'UDM. Il effectue des transformations de données, des conversions de types et une logique conditionnelle en fonction de la présence et des valeurs de champs spécifiques pour garantir une représentation précise de l'UDM.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps
- Accès privilégié à AWS
Configurer la journalisation des accès au serveur AWS S3
Google SecOps est compatible avec la collecte de journaux à l'aide d'Amazon S3 via Amazon SQS.
- Connectez-vous à la console AWS Management.
- Accédez à la console Amazon S3.
- Accédez à Amazon S3> Buckets.
- Sélectionnez un bucket existant ou créez-en un.
- Cliquez sur Propriétés.
- Dans la section Journalisation des accès au serveur, cliquez sur Modifier.
- Sélectionnez Activer.
- Dans le champ Bucket cible, saisissez le nom du nouveau bucket dans lequel envoyer les objets d'enregistrement de journaux ou sélectionnez un bucket existant comme cible.
- Cliquez sur Enregistrer les modifications.
- Pour créer la file d'attente SQS pour le bucket S3, configurez une instance Amazon SQS avec le stockage S3. Pour en savoir plus, consultez Configurer un bucket pour les notifications (rubrique SNS ou file d'attente SQS).
En fonction du service et de la région, identifiez les points de terminaison pour la connectivité en vous référant à la documentation AWS suivante :
- Pour en savoir plus sur une source de journalisation, consultez Points de terminaison et quotas AWS Identity and Access Management.
- Pour en savoir plus sur les sources de journaux S3, consultez Points de terminaison et quotas Amazon Simple Storage Service.
- Pour en savoir plus sur les sources de journaux SQS, consultez Points de terminaison et quotas Amazon Simple Queue Service.
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 des flux par produit.
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 la liste Type de source, sélectionnez Amazon S3 ou Amazon SQS.
- Dans la liste Type de journal, sélectionnez Accès au serveur AWS S3.
- Cliquez sur Suivant.
- Google SecOps permet de collecter des journaux à l'aide d'un ID de clé d'accès et d'une méthode secrète. Pour créer l'ID de clé d'accès et le secret, consultez Configurer l'authentification de l'outil avec AWS.
- En fonction de la configuration d'accès au serveur AWS S3 que vous avez créée, spécifiez des valeurs pour les paramètres d'entrée :
- Si vous utilisez Amazon S3, indiquez les valeurs des champs suivants :
- Région
- URI S3
- L'URI est un
- Option de suppression de la source
- ID de clé d'accès
- Clé d'accès secrète
- Si vous utilisez Amazon SQS, spécifiez les valeurs des champs suivants :
- Région
- Nom de la file d'attente
- Numéro de compte
- ID de clé d'accès à la file d'attente
- Clé d'accès secrète de la file d'attente
- Option de suppression de la source
- Si vous utilisez Amazon S3, indiquez les valeurs des champs suivants :
- Cliquez sur Suivant, puis sur Envoyer.
Configurer des flux depuis le Hub de contenu
Vous pouvez configurer le flux d'ingestion dans Google SecOps à l'aide d'Amazon SQS (méthode recommandée) ou d'Amazon S3.
Indiquez les valeurs des champs suivants :
- Région : région où le bucket S3 ou la file d'attente SQS sont hébergés.
- Nom de la file d'attente : nom de la file d'attente SQS à partir de laquelle lire les données de journaux.
- Numéro de compte : numéro de compte propriétaire de la file d'attente SQS.
- ID de clé d'accès à la file d'attente : ID de clé d'accès au compte de 20 caractères. Exemple :
AKIAOSFOODNN7EXAMPLE
- Clé d'accès secrète de la file d'attente : clé d'accès secrète de 40 caractères. Exemple :
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
- Option de suppression de la source : option permettant de supprimer les fichiers et les répertoires après le transfert des données.
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 |
---|---|---|
aclRequired |
target.resource.attribute.labels.key : "aclRequired"target.resource.attribute.labels.value : valeur de aclRequired |
Mappé directement à partir du champ de journal brut aclRequired . |
authenticationtype |
extensions.auth.auth_details |
Mappé directement à partir du champ de journal brut authenticationtype . |
bucket |
target.resource.name |
Mappé directement à partir du champ de journal brut bucket . |
bucket |
target.resource.resource_type : "STORAGE_BUCKET" |
Le parseur définit resource_type sur "STORAGE_BUCKET" si le champ bucket est présent. |
bucketowner |
target.resource.product_object_id |
Mappé directement à partir du champ de journal brut bucketowner . |
bytes_sent |
network.sent_bytes |
Mappé directement à partir du champ de journal brut bytes_sent après conversion en entier non signé et remplacement de "-" par "0". |
ciphersuite |
network.application_protocol : "HTTPS" |
L'analyseur définit application_protocol sur "HTTPS" si le champ ciphersuite est présent. |
ciphersuite |
network.tls.cipher |
Mappé directement à partir du champ de journal brut ciphersuite . |
errorcode |
security_result.action_details |
Mappé directement à partir du champ de journal brut errorcode . |
errorcode |
security_result.action : "BLOCK" |
L'analyseur définit action sur "BLOCK" si le champ errorcode contient "AccessDenied" (non sensible à la casse). |
hostheader |
target.hostname |
Extrait du champ de journal brut hostheader , en supprimant potentiellement le numéro de port. |
hostheader |
target.port |
Extrait du champ de journal brut hostheader si un numéro de port est présent. |
hostid |
target.resource.attribute.labels.key : "ID de requête étendu S3"target.resource.attribute.labels.value : valeur de hostid |
Mappé directement à partir du champ de journal brut hostid . |
http_capture |
network.http.method |
La méthode HTTP est extraite du champ http_capture . |
http_capture |
network.http.version |
La version HTTP est extraite du champ http_capture . |
http_capture |
target.url |
L'URL cible est construite à l'aide de hostheader et http_request_uri (extraits de http_capture ), avec le préfixe "http://" ou "https://" selon la présence de ciphersuite . |
httpstatus |
network.http.response_code |
Mappé directement à partir du champ de journal brut httpstatus après conversion en entier. |
object_version_id |
target.resource.product_object_id |
Mappé directement à partir du champ de journal brut object_version_id . |
objectsize |
target.file.size |
Mappé directement à partir du champ de journal brut objectsize après conversion en entier non signé et remplacement de "-" par "0". |
operation |
metadata.product_event_type |
Mappé directement à partir du champ de journal brut operation . |
referrer |
network.http.referral_url |
Mappé directement à partir du champ de journal brut referrer après suppression des guillemets. |
remoteip |
metadata.event_type : "USER_RESOURCE_ACCESS" |
L'analyseur définit event_type sur "USER_RESOURCE_ACCESS" si le champ remoteip est vide. |
remoteip |
principal.ip |
Mappé directement à partir du champ de journal brut remoteip . |
requester |
target.resource.attribute.labels.key : "ARN du point d'accès"target.resource.attribute.labels.value : valeur de requester |
Mappé directement à partir du champ de journal brut requester . |
requester_user |
principal.user.userid |
Mappé directement à partir du champ de journal brut requester_user . |
requestid |
network.session_id |
Mappé directement à partir du champ de journal brut requestid . |
request_time_ms |
network.session_duration.nanos |
Mappé directement à partir du champ de journal brut request_time_ms après conversion en entier, remplacement de "-" par "0" et ajout de zéros pour représenter les nanosecondes. |
signatureversion |
target.resource.attribute.labels.key : "Signature Version"target.resource.attribute.labels.value : valeur de signatureversion |
Mappé directement à partir du champ de journal brut signatureversion . |
time |
metadata.event_timestamp |
Analysé à partir du champ de journal brut time et converti en code temporel. |
tlsVersion |
network.tls.version |
Mappé directement à partir du champ de journal brut tlsVersion . |
useragent |
network.http.user_agent |
Mappé directement à partir du champ de journal brut useragent après suppression des guillemets. |
(Logique de l'analyseur) | metadata.event_type : "NETWORK_HTTP" |
L'analyseur définit la valeur par défaut de event_type sur "NETWORK_HTTP". |
(Logique de l'analyseur) | metadata.log_type : "AWS_S3_SERVER_ACCESS" |
L'analyseur définit log_type sur "AWS_S3_SERVER_ACCESS". |
(Logique de l'analyseur) | metadata.product_name : "Accès au serveur AWS S3" |
L'analyseur définit product_name sur "AWS S3 Server Access". |
(Logique de l'analyseur) | metadata.product_version : "HTTP/http_version " |
L'analyseur définit product_version à l'aide de http_version extrait. |
(Logique de l'analyseur) | metadata.vendor_name : "AMAZON" |
L'analyseur définit vendor_name sur "AMAZON". |
(Logique de l'analyseur) | network.application_protocol : "HTTP" |
Le parseur définit application_protocol sur "HTTP" si le champ ciphersuite n'est pas présent. |
(Logique de l'analyseur) | timestamp |
L'analyseur définit l'timestamp de l'événement sur l'heure actuelle lors du traitement de l'événement. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.