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 des champs à l'aide de modèles grok, gère les entrées JSON potentielles et mappe les champs extraits sur l'UDM. Il effectue des transformations de données, des conversions de type 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 disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à AWS.
Configurer la journalisation des accès au serveur AWS S3
Google SecOps prend en charge 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 (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 de destination, saisissez un nom pour le nouveau bucket dans lequel envoyer les objets d'enregistrement de journal, ou sélectionnez un bucket existant comme cible.
- Cliquez sur Enregistrer les modifications.
- Pour créer la file d'attente SQS du bucket S3, configurez une instance Amazon SQS avec le stockage S3. Pour en savoir plus, consultez Configurer un bucket pour les notifications (thème SNS ou file d'attente SQS).
En fonction du service et de la région, identifiez les points de terminaison de connectivité en vous reportant à la documentation AWS suivante : * Pour en savoir plus sur les sources de journalisation, consultez la page Points de terminaison et quotas AWS Identity and Access Management. * Pour en savoir plus sur les sources de journalisation S3, consultez Points de terminaison et quotas Amazon Simple Storage Service. * Pour en savoir plus sur les sources de journalisation SQS, consultez Points de terminaison et quotas Amazon Simple Queue Service.
Configurer un flux dans Google SecOps pour ingérer les journaux d'accès au serveur AWS S3
- Dans le menu Google SecOps, accédez à Paramètres > Flux > Ajouter.
- Dans la liste Source type (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 prend en charge la collecte 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, spécifiez les valeurs des champs suivants :
- Région
- URI S3
- Un 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 de la file d'attente
- Clé d'accès secrète mise en file d'attente
- Option de suppression de la source
- Si vous utilisez Amazon S3, spécifiez les valeurs des champs suivants :
- Cliquez sur Suivant, puis sur Envoyer.
Tableau 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" |
L'analyseur 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 l'avoir converti en entier non signé et remplacé "-" 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 , ce qui peut entraîner la suppression du 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 créée à l'aide de hostheader et http_request_uri (extraits de http_capture ), avec le préfixe "http://" ou "https://" en fonction de la présence de ciphersuite . |
httpstatus |
network.http.response_code |
Mappé directement à partir du champ de journal brut httpstatus après sa 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 l'avoir converti en entier non signé et remplacé "-" 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 sa conversion en entier, en remplaçant "-" par "0" et en ajoutant des zéros pour représenter les nanoseconds. |
signatureversion |
target.resource.attribute.labels.key : "Version de signature"target.resource.attribute.labels.value : valeur de signatureversion |
Mappé directement à partir du champ de journal brut signatureversion . |
time |
metadata.event_timestamp |
Extrait 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 : "AWS S3 Server Access" (Accès au serveur AWS S3) |
L'analyseur définit product_name sur "AWS S3 Server Access" (Accès au serveur AWS S3). |
(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" |
L'analyseur 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'événement timestamp sur l'heure actuelle lors du traitement de l'événement. |
Modifications
2023-07-19
- Correction de bug :
- Modèle Grok modifié pour gérer un trait d'union (-) lorsque les données ne sont pas présentes.
- Mappage de "aclRequired" sur "target.resource.attribute.labels".
2023-05-04
- Amélioration :
- Prise en charge des journaux au format JSON.
2022-07-21
- Analyseur créé
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.