Collecter les journaux Amazon CloudFront
Ce document explique comment collecter les journaux Amazon CloudFront en configurant un flux Google Security Operations.
Pour en savoir plus, consultez la présentation de l'ingestion de données dans Google Security Operations.
Un libellé d'ingestion identifie l'analyseur qui normalise les données de journaux brutes au format UDM structuré. Les informations de ce document s'appliquent au parseur avec le libellé d'ingestion AWS_CLOUDFRONT
.
Avant de commencer
Assurez-vous que le bucket Amazon S3 a été créé. Pour en savoir plus, consultez Créer votre premier bucket S3.
Configurer Amazon CloudFront
- Connectez-vous à la console AWS Management.
- Accédez à la console Amazon S3 et créez le bucket Amazon S3.
- Cliquez sur Activé pour activer la journalisation.
- Dans le champ Bucket pour les journaux, spécifiez le nom du bucket Amazon S3.
- Dans le champ Préfixe du journal, spécifiez un préfixe facultatif.
- Une fois les fichiers journaux stockés dans le bucket Amazon S3, créez une file d'attente SQS et associez-la au bucket Amazon S3.
Identifier les points de terminaison pour la connectivité
Vérifiez les stratégies IAM (Identity and Access Management) et de clé KMS requises pour S3, SQS et KMS.
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 les sources de journaux, 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
- Plate-forme de contenu> Packs de contenu> Premiers pas
Configurer le flux AWS CloudFront
- Cliquez sur le pack Amazon Cloud Platform.
- Recherchez le type de journal AWS CloudFront.
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.
Référence du mappage de champs
Ce parseur extrait les champs des journaux AWS CloudFront au format SYSLOG ou JSON, et les normalise dans l'UDM. Il utilise des modèles Grok pour analyser les chaînes de messages, gère diverses transformations de données (par exemple, les conversions de type et les renommages), et enrichit les données avec un contexte supplémentaire, comme l'analyse de l'agent utilisateur et l'identification du protocole d'application.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
c-ip |
principal.ip |
Mappé directement. Également mappé sur principal.asset.ip . |
c-port |
principal.port |
Mappé directement. |
cs(Cookie) |
additional.fields[].key : "cookie"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle si cs(Cookie) est présent et que agent ne contient pas "://". |
cs(Host) |
principal.hostname |
Mappé directement. Également mappé sur principal.asset.hostname . Utilisé pour construire le target.url si d'autres champs d'URL ne sont pas disponibles. |
cs(Referer) |
network.http.referral_url |
Mappé directement. |
cs(User-Agent) |
network.http.user_agent |
Mappé directement. Également mappé sur network.http.parsed_user_agent et analysé dans ses composants s'il ne contient pas "://". |
cs-bytes |
network.sent_bytes |
Mappé directement. Converti en entier non signé. |
cs-method |
network.http.method |
Mappé directement. |
cs-protocol |
network.application_protocol |
Mappé après conversion en majuscules. Si la valeur n'est pas reconnue comme protocole d'application standard et que cs-protocol-version contient "HTTP", network.application_protocol est défini sur "HTTP". |
dport |
target.port |
Mappé directement. Converti en entier. |
edge_location |
principal.location.name |
Mappé directement. |
fle-encrypted-fields |
additional.fields[].key : "fle-encrypted-fields"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
fle-status |
additional.fields[].key : "fle-status"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
host |
principal.hostname , principal.asset.hostname |
Mappé directement. |
id |
principal.asset_id |
Mappé directement avec le préfixe "id: ". |
ip |
target.ip , target.asset.ip |
Mappé directement. |
log_id |
metadata.product_log_id |
Mappé directement. |
resource |
additional.fields[].key : "resource"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
result_type |
additional.fields[].key : "result_type"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
sc-bytes |
network.received_bytes |
Mappé directement. Converti en entier non signé. |
sc-content-len |
additional.fields[].key : "sc-content-len"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
sc-content-type |
additional.fields[].key : "sc-content-type"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
sc-status |
network.http.response_code |
Mappé directement. Converti en entier. |
ssl-cipher |
network.tls.cipher |
Mappé directement. |
ssl-protocol |
network.tls.version |
Mappé directement. |
timestamp |
metadata.event_timestamp |
Analysé et mis en correspondance, si disponible. Différents formats sont acceptés. |
ts |
metadata.event_timestamp |
Analysé et mis en correspondance, si disponible. Le format ISO8601 est attendu. |
url |
target.url |
Mappé directement. |
url_back_to_product |
metadata.url_back_to_product |
Mappé directement. |
x-edge-detailed-result-type |
additional.fields[].key : "x-edge-detailed-result-type"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
x-edge-location |
additional.fields[].key : "x-edge-location"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
x-edge-request-id |
additional.fields[].key : "x-edge-request-id"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
x-edge-response-result-type |
additional.fields[].key : "x-edge-response-result-type"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
x-edge-result-type |
additional.fields[].key : "x-edge-result-type"additional.fields[].value.string_value : mappé directement. |
Mappé de manière conditionnelle, le cas échéant. |
x-forwarded-for |
target.ip , target.asset.ip |
Mappé directement. Si plusieurs adresses IP sont présentes (séparées par une virgule), elles sont divisées et fusionnées dans les champs UDM respectifs. |
x-host-header |
target.hostname , target.asset.hostname |
Mappé directement. Définissez sur "NETWORK_HTTP" si ip ou x-forwarded-for et http_verb sont présents. Sinon, définissez-le sur "GENERIC_EVENT". Codé en dur sur "AWS_CLOUDFRONT". Codé en dur sur "AWS CloudFront". Codé en dur sur "AMAZON". Heure d'ingestion de l'entrée de journal dans Google Security Operations. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.