Collecter les journaux d'accès au serveur AWS S3

Compatible avec :

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.

  1. Connectez-vous à la console AWS Management.
  2. Accédez à la console Amazon S3.
  3. Accédez à Amazon S3> Buckets.
  4. Sélectionnez un bucket existant ou créez-en un.
  5. Cliquez sur Propriétés.
  6. Dans la section Journalisation des accès au serveur, cliquez sur Modifier.
  7. Sélectionnez Activer.
  8. 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.
  1. Cliquez sur Enregistrer les modifications.
  2. 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 :

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 :

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans la liste Type de source, sélectionnez Amazon S3 ou Amazon SQS.
  5. Dans la liste Type de journal, sélectionnez Accès au serveur AWS S3.
  6. Cliquez sur Suivant.
  7. 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.
  8. 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
  9. 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.