Collecter les journaux d'accès aux serveurs 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 > Ajouter un flux
- Plate-forme de contenu> Packs de contenu> Premiers pas
Configurer le flux d'accès au service AWS S3
- Cliquez sur le pack Amazon Cloud Platform.
- Recherchez le type de journal AWS S3 Service Access.
- 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.
Spécifiez les valeurs des champs suivants.
- Type de source : Amazon SQS V2
- Nom de la file d'attente : nom de la file d'attente SQS à partir de laquelle lire les données
- 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
Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.
Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
ID de clé d'accès à la file d'attente SQS : clé d'accès au compte, qui est une chaîne alphanumérique de 20 caractères.
Clé d'accès secrète à la file d'attente SQS : clé d'accès au compte, qui est une chaîne alphanumérique de 40 caractères.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- 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.
Cliquez sur Créer un flux.
Pour en savoir plus sur la configuration de plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.
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 lorsque l'événement est traité. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.