Collecter les journaux de flux VPC AWS

Compatible avec :

Ce document explique comment ingérer des journaux de flux AWS VPC dans Google Security Operations à l'aide de trois méthodes différentes : Amazon S3 (format texte), Amazon CloudWatch Logs avec Kinesis Data Firehose et le format CSV dans Amazon S3. Les journaux de flux VPC AWS sont une fonctionnalité qui vous permet de capturer des informations sur le trafic IP entre les différentes interfaces réseau de votre VPC. Cette intégration vous permet d'envoyer ces journaux à Google SecOps pour analyse et surveillance.

Formats de journaux de flux VPC AWS compatibles

Google SecOps est compatible avec l'ingestion des journaux de flux VPC AWS dans deux formats de texte principaux :

  • Format JSON : le type de journal AWS_VPC_FLOW analyse les journaux au format JSON. Dans ce format, chaque entrée de journal inclut à la fois une clé et sa valeur correspondante, ce qui rend les données auto-descriptives.
  • Format CSV : Google SecOps fournit également un analyseur pour les journaux de flux VPC AWS au format CSV. Dans ce format, les clés de champ ne sont listées qu'une seule fois dans la ligne d'en-tête, et les lignes suivantes ne contiennent que des valeurs séparées par des virgules.

Étant donné que le format CSV n'inclut pas de clés de champ dans chaque entrée de journal, l'analyseur AWS_VPC_FLOW_CSV s'appuie sur un ordre strict et prédéfini des valeurs. Pour que vos fichiers CSV soient analysés correctement, ils doivent respecter l'ordre des champs suivant :

   Version,Account_id,Interface_id,Srcaddr,Dstaddr,Srcport,Dstport,Protocol,Packets,Bytes,Start,End,Action,Log_status,Vpc_id,Subnet_id,Instance_id,Tcp_flags,Type,Pkt_srcaddr,Pkt_dstaddr,Region,Az_id,Sublocation_type,Sublocation_id,Pkt_src_aws_service,Pkt_dst_aws_service,Flow_direction,Traffic_path,Ecs_cluster_arn,Ecs_cluster_name,Ecs_container_instance_arn,Ecs_container_instance_id,Ecs_container_id,Ecs_second_container_id,Ecs_service_name,Ecs_task_definition_arn,Ecs_task_arn,Ecs_task_id

Voici un exemple de ligne de journal CSV :

   7,369096419186,eni-0520bb5efed19d33a,10.119.32.34,10.119.223.3,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-0769a6844ce873a6a,subnet-0cf9b2cb32f49f258,i-088d6080f45f5744f,0,IPv4,10.119.32.34,10.119.223.3,ap-northeast-1,apne1-az4,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-

Pour les champs pour lesquels aucune valeur n'est disponible, une valeur vide (par exemple, , ,) doit être transmise pour conserver l'ordre positionnel correct dans la ligne CSV.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps.
  • Accès privilégié à AWS.

Option 1 : Configurer l'exportation des journaux de flux AWS VPC à l'aide d'AWS S3 (format texte)

La section suivante explique comment configurer les autorisations Amazon S3 et Identity and Access Management pour permettre l'exportation des journaux de flux VPC à des fins d'analyse par Google SecOps.

Configurer un bucket AWS S3 et IAM pour Google SecOps

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple, aws-vpc-flowlogs).
  3. Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
  4. Sélectionnez l'utilisateur créé.
  5. Sélectionnez l'onglet Informations d'identification de sécurité.
  6. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif : Ajoutez un tag de description.
  10. Cliquez sur Créer une clé d'accès.
  11. Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Joindre directement des règles.
  17. Recherchez la règle AmazonS3FullAccess.
  18. Sélectionnez la règle.
  19. Cliquez sur Suivant.
  20. Cliquez sur Ajouter des autorisations.

Créer des journaux de flux VPC (destination : Amazon S3, format texte)

  1. Ouvrez la console AWS> VPC> Vos VPC/sous-réseaux/interfaces réseau, puis sélectionnez le champ d'application que vous souhaitez consigner.
  2. Cliquez sur Actions> Créer un journal de flux.
  3. Fournissez les informations de configuration suivantes :
    • Filtre : sélectionnez Tous (ou Accepter / Refuser) selon votre règlement.
    • Intervalle d'agrégation maximal : sélectionnez 1 minute (recommandé) ou 10 minutes.
    • Destination : Envoyer vers un bucket Amazon S3.
    • ARN du bucket S3 : saisissez le nom du bucket créé dans la section précédente au format suivant : arn:aws:s3:::<your-bucket>.
    • Format des enregistrements de journaux : sélectionnez Format AWS par défaut.
    • Format du fichier journal : sélectionnez Texte (brut).
    • Facultatif : Désactivez les préfixes compatibles avec Hive et les partitions horaires, sauf si vous en avez besoin.
  4. Cliquez sur Créer un journal de flux.

Configurer un flux dans Google SecOps pour ingérer les journaux de flux VPC AWS (texte S3)

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur + Ajouter un flux.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, AWS VPC Flow Logs - S3 (Text)).
  4. Sélectionnez Amazon S3 V2 comme type de source.
  5. Sélectionnez Flux VPC AWS comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :
    • URI S3 : saisissez l'adresse du bucket S3 (par exemple, s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/).
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
    • Âge maximal des fichiers : 180 jours par défaut.
    • ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
    • Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Libellés d'ingestion : libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Option 2 : Configurer l'exportation des journaux de flux VPC AWS à l'aide d'Amazon CloudWatch Logs et de Kinesis Data Firehose

Après avoir configuré les journaux de flux pour qu'ils soient envoyés à CloudWatch, cette option fournit une couche supplémentaire d'exportation de données en diffusant ces données de journaux vers une destination de votre choix à l'aide de Kinesis Data Firehose.

Créer des journaux de flux VPC (destination : Amazon CloudWatch Logs)

  1. Ouvrez la console AWS> VPC> Vos VPC/sous-réseaux/interfaces réseau.
  2. Cliquez sur Actions> Créer un journal de flux.
  3. Fournissez les informations de configuration suivantes :
    • Filtre : sélectionnez Tous (ou Accepter/Refuser) selon votre règlement.
    • Intervalle d'agrégation maximal : sélectionnez 1 minute (recommandé) ou 10 minutes.
    • Destination : sélectionnez Envoyer à CloudWatch Logs.
    • Groupe de journaux de destination : sélectionnez ou créez un groupe de journaux (par exemple, /aws/vpc/flowlogs).
    • Rôle IAM : sélectionnez un rôle pouvant écrire dans CloudWatch Logs.
    • Format des enregistrements de journaux : sélectionnez AWS par défaut (version 2) ou Personnalisé (inclut des champs supplémentaires).
  4. Cliquez sur Créer un journal de flux.

Créer un flux dans Google SecOps pour obtenir l'URL du point de terminaison et la clé secrète

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur + Ajouter un flux.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, AWS VPC Flow Logs - CloudWatch via Firehose).
  4. Sélectionnez Amazon Data Firehose comme type de source.
  5. Sélectionnez Flux VPC AWS comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement : facultatif n.
    • Espace de noms de l'élément : espace de noms de l'élément (par exemple, aws.vpc.flowlogs.cwl).
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux (par exemple, source=vpc_flow_firehose).
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et enregistrez la clé secrète, car vous ne pourrez plus l'afficher.
  12. Accédez à l'onglet Détails.
  13. Copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison.
  14. Cliquez sur OK.

Créer une clé API pour le flux Amazon Data Firehose

  1. Accédez à la page Identifiants de la console Google Cloud.
  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
  3. Copiez et enregistrez la clé dans un emplacement sécurisé.
  4. Restreignez l'accès de la clé API à l'API Google SecOps.

Configurer les autorisations IAM pour CloudWatch Logs vers Firehose

  1. Dans la console AWS, accédez à IAM > Stratégies > Créer une stratégie > JSON.
  2. Collez le JSON de la stratégie suivante, en remplaçant <region> et <account-id> par votre région AWS et votre ID de compte :

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
          "firehose:PutRecord",
          "firehose:PutRecordBatch"
          ],
          "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops"
       }
    ]
    }
    
  3. Nommez la règle CWLtoFirehoseWrite, puis cliquez sur Créer une règle.

  4. Accédez à IAM > Rôles > Créer un rôle.

  5. Sélectionnez Règle de confiance personnalisée, puis collez :

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": "logs.<region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
       }
    ]
    }
    
  6. Associez la stratégie CWLtoFirehoseWrite au rôle.

  7. Nommez le rôle CWLtoFirehoseRole, puis cliquez sur Créer un rôle.

Configurer Amazon Kinesis Data Firehose pour Google SecOps

  1. Dans la console AWS, accédez à Kinesis > Data Firehose > Create delivery stream.
  2. Fournissez les informations de configuration suivantes :
    • Source : sélectionnez PUT direct ou autres sources.
    • Destination : sélectionnez Point de terminaison HTTP.
    • Nom : cwlogs-to-secops
    • URL du point de terminaison HTTP : saisissez l'URL du point de terminaison HTTPS du flux de Google SecOps avec la clé API ajoutée : <ENDPOINT_URL>?key=<API_KEY>.
    • Méthode HTTP : sélectionnez POST.
  3. Sous Clé d'accès :
    • Saisissez la clé secrète générée dans le flux Google SecOps (elle devient l'en-tête X-Amz-Firehose-Access-Key).
    • Conseils de mise en mémoire tampon : définissez Taille du tampon sur 1 Mio et Intervalle du tampon sur 60 secondes.
    • Compression : sélectionnez Désactivée.
    • Sauvegarde S3 : sélectionnez Désactivée.
    • Conservez les paramètres retry et logging sur default.
  4. Cliquez sur Créer un flux de diffusion.

Abonnez le groupe de journaux CloudWatch au flux Firehose.

  1. Accédez à CloudWatch > Logs > Log groups (CloudWatch > Journaux > Groupes de journaux).
  2. Sélectionnez le groupe de journaux cible (par exemple, /aws/vpc/flowlogs).
  3. Ouvrez l'onglet Filtres d'abonnement, puis cliquez sur Créer.
  4. Sélectionnez Créer un filtre d'abonnement Amazon Kinesis Data Firehose.
  5. Fournissez les informations de configuration suivantes :
    • Destination : sélectionnez le flux de diffusion cwlogs-to-secops.
    • Accorder l'autorisation : sélectionnez le rôle CWLtoFirehoseRole.
    • Nom du filtre : saisissez all-events.
    • Modèle de filtre : laissez ce champ vide pour envoyer tous les événements.
  6. Cliquez sur Démarrer la diffusion.

Option 3 : Configurer les journaux de flux VPC AWS au format CSV à l'aide d'Amazon S3

Transformer les journaux au format CSV (facultatif)

  1. Assurez-vous que les lignes de votre fichier CSV suivent un ordre strict et cohérent des colonnes qui correspond aux champs que vous avez sélectionnés dans votre format personnalisé des journaux de flux VPC (par exemple, l'ensemble de champs canonique v2 ou votre ensemble v5/v7). N'incluez pas de ligne d'en-tête dans les fichiers de production, sauf si votre option d'analyseur en attend une.
  2. Écrivez les fichiers CSV dans un préfixe stable, par exemple s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/.

Configurer un flux dans Google SecOps pour ingérer les journaux de flux VPC AWS (CSV)

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur + Ajouter un flux.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, AWS VPC Flow Logs - S3 (CSV)).
  4. Sélectionnez Amazon S3 V2 comme type de source.
  5. Sélectionnez Flux VPC AWS (CSV) comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :
    • URI S3 : saisissez l'adresse du bucket S3 (par exemple, s3://<your-bucket>/vpcflowlogs-csv/<region>/).
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
    • Âge maximal des fichiers : 180 jours par défaut.
    • ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
    • Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Libellés d'ingestion : libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Table de mappage UDM

Champ du journal Mappage UDM Logique
accountId read_only_udm.metadata.product_log_id Valeur extraite du champ de journal brut accountId.
action read_only_udm.security_result.action_details Valeur extraite du champ de journal brut action.
action read_only_udm.security_result.action Mappé sur ALLOW si action est ACCEPT, mappé sur BLOCK si action est REJECT.
az_id read_only_udm.principal.cloud.availability_zone Valeur extraite du champ de journal brut az_id.
bytes read_only_udm.network.received_bytes Valeur extraite du champ de journal brut bytes.
dstaddr read_only_udm.target.ip Valeur extraite du champ de journal brut dstaddr.
dstport read_only_udm.target.port Valeur extraite du champ de journal brut dstport.
end_time read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut end_time.
end_time read_only_udm.metadata.ingested_timestamp Valeur extraite du champ de journal brut end_time.
flow_direction read_only_udm.network.direction Mappé sur INBOUND si flow_direction est ingress, mappé sur OUTBOUND si flow_direction est egress.
InstanceID read_only_udm.principal.cloud.project.id Valeur extraite du champ de journal brut InstanceID.
interfaceId read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut interfaceId.
logStatus read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut logStatus.
paquets read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut packets.
pkt_dst_aws_service read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut pkt_dst_aws_service.
pkt_dstaddr read_only_udm.intermediary.ip Valeur extraite du champ de journal brut pkt_dstaddr.
pkt_srcaddr read_only_udm.intermediary.ip Valeur extraite du champ de journal brut pkt_srcaddr.
pkt_src_aws_service read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut pkt_src_aws_service.
protocol read_only_udm.network.ip_protocol Mappé sur TCP si protocol est défini sur 6, sur UDP si protocol est défini sur 17, ou sur UNKNOWN_IP_PROTOCOL dans le cas contraire.
Région read_only_udm.principal.location.country_or_region Valeur extraite du champ de journal brut Region.
srcaddr read_only_udm.principal.ip Valeur extraite du champ de journal brut srcaddr.
srcport read_only_udm.principal.port Valeur extraite du champ de journal brut srcport.
start_time read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut start_time.
start_time read_only_udm.metadata.event_timestamp Valeur extraite du champ de journal brut start_time.
SubnetID read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut SubnetID.
tcp_flags read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut tcp_flags.
traffic_path read_only_udm.about.resource.attribute.labels.value Valeur extraite du champ de journal brut traffic_path.
version read_only_udm.metadata.product_version Valeur extraite du champ de journal brut version.
vpcID read_only_udm.principal.cloud.vpc.id Valeur extraite du champ de journal brut vpcID.
read_only_udm.metadata.vendor_name Codé en dur sur AMAZON.
read_only_udm.metadata.product_name Codé en dur sur AWS VPC Flow.
read_only_udm.metadata.log_type Codé en dur sur AWS_VPC_FLOW.
read_only_udm.metadata.event_type Mappé sur NETWORK_CONNECTION si dstaddr n'est pas vide, sinon mappé sur GENERIC_EVENT.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.