Collecter les journaux des hôtes AWS EC2

Version de l'analyseur : 1.0

Compatible avec :

Ce document explique comment intégrer les journaux des hôtes AWS EC2 à Google Security Operations pour la surveillance et l'analyse. L'intégration implique l'analyse et le mappage des journaux d'hôte EC2 au modèle de données unifié (UDM), la transformation des données et la création de relations entre les hôtes et les instances EC2. Les journaux fournissent des informations précieuses sur les instances, les propriétés de l'hôte, les types d'instances et les métriques de performances qui peuvent être utilisées pour la surveillance de la sécurité, l'audit et la conformité.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à AWS.

Configurer AWS IAM et S3

  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 une utilisation ultérieure.
  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 Identifiants de sécurité.
  6. Cliquez sur Create Access Key (Créer une clé d'accès) dans la section Access Keys (Clés d'accès).
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif : ajoutez une balise 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 une utilisation ultérieure.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Stratégies d'autorisation.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Associer directement des règles.
  17. Recherchez et sélectionnez la règle AmazonS3FullAccess.
  18. Cliquez sur Suivant.
  19. Cliquez sur Ajouter des autorisations.

Configurer CloudTrail pour AWS KMS

  1. Connectez-vous à l'AWS Management Console.
  2. Dans la barre de recherche, saisissez et sélectionnez CloudTrail dans la liste des services.
  3. Cliquez sur Create trail (Créer un journal).
  4. Indiquez un nom de suivi, par exemple EC2-Activity-Trail.
  5. Cochez la case Activer pour tous les comptes de mon organisation.
  6. Saisissez l'URI du bucket S3 créé précédemment (au format s3://your-log-bucket-name/) ou créez un bucket S3.
  7. Si SSE-KMS est activé, indiquez un nom pour l'alias AWS KMS ou choisissez une clé AWS KMS existante.
  8. Vous pouvez conserver les valeurs par défaut des autres paramètres.
  9. Cliquez sur Suivant.
  10. Sélectionnez Événements de gestion et Événements de données sous Types d'événements pour capturer l'activité de l'hôte EC2.
  11. Cliquez sur Suivant.
  12. Vérifiez les paramètres dans Vérifier et créer.
  13. Cliquez sur Create trail (Créer un journal).
  14. Facultatif : si vous avez créé un bucket, suivez la procédure ci-dessous :
    • Accédez à S3.
    • Identifiez et sélectionnez le bucket de journaux que vous venez de créer.
    • Sélectionnez le dossier AWSLogs.
    • Cliquez sur Copy S3 URI (Copier l'URI S3) et enregistrez-le.

Configurer un flux dans Google SecOps pour ingérer les hôtes AWS EC2

  1. Accédez à Paramètres > Gestion des données > Flux. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux, par exemple Journaux des hôtes AWS EC2.
  4. Sélectionnez Amazon S3 V2 comme Type de source.
  5. Sélectionnez Hôtes AWS EC2 comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URI S3 : URI du bucket.
      • s3://your-log-bucket-name/
        • Remplacez your-log-bucket-name par le nom réel du bucket.
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.

    • Âge maximal du fichier : incluez les fichiers modifiés au cours d'un certain nombre de jours. La valeur par défaut est de 180 jours.

    • ID de clé d'accès : clé d'accès de l'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.

    • Étiquettes d'ingestion : étiquette à appliquer aux événements de ce flux.

  8. Cliquez sur Suivant.

  9. Vérifiez la configuration de votre nouveau flux d'actualités sur l'écran Finaliser, puis cliquez sur Envoyer.

Formats de journaux d'hôtes AWS EC2 compatibles

L'analyseur d'hôtes AWS EC2 est compatible avec les journaux au format JSON.

Exemples de journaux d'hôtes AWS EC2 compatibles

  • JSON

      {
        "AllocationTime": "2018-01-23T12:33:31.692Z",
        "AllowsMultipleInstanceTypes": "",
        "AssetID": "",
        "AutoPlacement": "off",
        "AvailabilityZone": "us-east-1a",
        "AvailabilityZoneID": "",
        "AvailableCapacity": {
          "VCPUs": 96,
          "Instance": {
            "Available": 48,
            "Total": 48,
            "Type": "m5.large"
          }
        },
        "ClientToken": "",
        "ID": "h-05abcdd12ee9ca123",
        "Maintenance": "",
        "Properties": {
          "Cores": 48,
          "InstanceFamily": "",
          "InstanceType": "m5.large",
          "Sockets": 2,
          "TotalVCPUs": 96
        },
        "Recovery": "off",
        "ReservationID": "",
        "Instances": null,
        "MemberOfServiceLinkedResourceGroup": false,
        "OutpostARN": "",
        "OwnerID": "",
        "ReleaseTime": "",
        "State": "available",
        "TagSet": null
      }
    

Table de mappage UDM

Champ du journal Mappage UDM Logique
AllocationTime entity.metadata.creation_timestamp Le champ AllocationTime est analysé en tant que code temporel et mappé au champ creation_timestamp. L'analyseur tente d'utiliser différents formats (aaaa-MM-jj HH:mm:ss, RFC 3339, UNIX, ISO8601).
AllowsMultipleInstanceTypes entity.entity.asset.attribute.labels.value La valeur de AllowsMultipleInstanceTypes du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur allows_multiple_instance_types.
AutoPlacement entity.entity.asset.attribute.labels.value La valeur de AutoPlacement du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur auto_placement.
AvailabilityZone entity.entity.asset.attribute.cloud.availability_zone Le champ AvailabilityZone est directement mappé au champ availability_zone.
AvailabilityZoneID entity.entity.asset.attribute.labels.value La valeur de AvailabilityZoneID du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur availability_zone_id.
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity entity.entity.asset.attribute.labels.value La valeur de AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (ou AvailableCapacity.Instance.Available après renommage) est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur available_instance_capacity_available_capacity.
AvailableCapacity.AvailableInstanceCapacity.InstanceType entity.entity.asset.attribute.labels.value La valeur de AvailableCapacity.AvailableInstanceCapacity.InstanceType (ou AvailableCapacity.Instance.Type après renommage) est utilisée comme valeur d'un libellé. La clé est définie sur available_instance_capacity_instance_type.
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity entity.entity.asset.attribute.labels.value La valeur de AvailableCapacity.AvailableInstanceCapacity.TotalCapacity (ou AvailableCapacity.Instance.Total après renommage) est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur total_capacity.
AvailableCapacity.AvailableVCpus entity.entity.asset.attribute.labels.value La valeur de AvailableCapacity.AvailableVCpus (ou AvailableCapacity.VCPUs après renommage) est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur available_v_cpus.
ClientToken entity.entity.asset.attribute.labels.value La valeur de ClientToken du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur client_token.
HostID entity.metadata.product_entity_id Le champ HostID (ou ID après avoir été renommé) est directement mappé au champ product_entity_id.
HostID entity.entity.asset.asset_id Le champ HostID (ou ID après avoir été renommé) est directement mappé au champ asset_id.
HostMaintenance entity.entity.asset.attribute.labels.value La valeur de HostMaintenance (ou Maintenance après renommage) du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur host_maintenance.
HostProperties.Cores entity.entity.asset.hardware.cpu_number_cores La valeur de HostProperties.Cores est convertie en un entier non signé et mappée à cpu_number_cores.
HostProperties.InstanceFamily entity.entity.asset.attribute.labels.value La valeur de HostProperties.InstanceFamily du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur host_properties_instance_family.
HostProperties.InstanceType entity.entity.asset.attribute.labels.value La valeur de HostProperties.InstanceType du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur host_properties_instance_type.
HostProperties.Sockets entity.entity.asset.attribute.labels.value La valeur de HostProperties.Sockets est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur host_properties_sockets.
HostProperties.TotalVCpus entity.entity.asset.attribute.labels.value La valeur de HostProperties.TotalVCpus (ou HostProperties.TotalVCPUs après renommage) est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur host_properties_total_v_cpus.
HostRecovery entity.entity.asset.attribute.labels.value La valeur de HostRecovery (ou Recovery après renommage) du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur host_recovery.
HostReservationID entity.entity.asset.attribute.labels.value La valeur de HostReservationID (ou ReservationID après renommage) du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur host_reservation_id.
MemberOfServiceLinkedResourceGroup entity.entity.asset.attribute.labels.value La valeur de MemberOfServiceLinkedResourceGroup est convertie en chaîne et utilisée comme valeur d'une étiquette. La clé est définie sur member_of_service_linked_resource_group.
OwnerID entity.entity.asset.attribute.labels.value La valeur de OwnerID du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur owner_id.
ReleaseTime entity.entity.asset.attribute.labels.value La valeur de ReleaseTime du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur release_time.
State entity.entity.asset.attribute.labels.value La valeur de State du journal brut est utilisée comme valeur d'une étiquette. La clé de cette étiquette est définie sur state.
TagSet entity.entity.asset.attribute.labels Le tableau TagSet est itéré, et les éléments Key et Value de chaque tag sont utilisés respectivement comme clé et valeur d'une étiquette. La valeur AMAZON_WEB_SERVICES est attribuée à ce champ par l'analyseur syntaxique. Le champ collection_time du journal brut est mappé au champ collected_timestamp. La valeur ASSET est attribuée à ce champ par l'analyseur syntaxique. La valeur AWS EC2 HOSTS est attribuée à ce champ par l'analyseur syntaxique. La valeur AWS est attribuée à ce champ par l'analyseur syntaxique. Les relations sont dérivées des champs Instances et OutpostArn, mais ces champs ne sont pas directement mappés à l'objet IDM. La logique de l'analyseur crée des objets de relation en fonction de ces champs et les fusionne dans le tableau relations.
collection_time entity.metadata.collected_timestamp Le collection_time du journal est utilisé comme collected_timestamp de l'événement.

Journal des modifications

Afficher le journal des modifications de cet analyseur

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