Collecter les journaux des hôtes AWS EC2
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 consiste à analyser et à mapper les journaux des hôtes EC2 sur le modèle de données unifié (UDM), à effectuer une transformation des données et à créer des 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
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur: Créer un bucket.
- Enregistrez le nom et la région du bucket pour une utilisation ultérieure.
- Créez un utilisateur en suivant le guide de l'utilisateur Créer un utilisateur IAM.
- Sélectionnez le compte utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif: ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Download CSV file (Télécharger le fichier CSV) pour enregistrer la clé d'accès et la clé d'accès secrète pour les utiliser ultérieurement.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer CloudTrail pour AWS KMS
- Connectez-vous à l'AWS Management Console.
- Dans la barre de recherche, saisissez CloudTrail, puis sélectionnez-le dans la liste des services.
- Cliquez sur Créer un parcours.
- Indiquez un nom de sentier, par exemple
EC2-Activity-Trail
. - Cochez la case Activer pour tous les comptes de mon organisation.
- Saisissez l'URI du bucket S3 créé précédemment (au format
s3://your-log-bucket-name/
) ou créez un bucket S3. - Si le chiffrement côté serveur (SSE-KMS) est activé, fournissez un nom pour l'alias AWS KMS ou choisissez une clé AWS KMS existante.
- Vous pouvez conserver les autres paramètres par défaut.
- Cliquez sur Suivant.
- Sous Types d'événements, sélectionnez Événements de gestion et Événements de données pour enregistrer l'activité de l'hôte EC2.
- Cliquez sur Suivant.
- Vérifiez les paramètres dans Vérifier et créer.
- Cliquez sur Créer un parcours.
- 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 Copier l'URI S3, puis enregistrez-le.
Configurer un flux dans Google SecOps pour ingérer des hôtes AWS EC2
- Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux, par exemple Journaux des hôtes AWS EC2.
- Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez Hôtes AWS EC2 comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants:
- Region (Région) : région dans laquelle se trouve le bucket Amazon S3.
- URI S3: URI du bucket.
s3://your-log-bucket-name/
- Remplacez
your-log-bucket-name
par le nom réel du bucket.
- Remplacez
- Un URI est: sélectionnez Répertoire ou Répertoire incluant des sous-répertoires.
Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
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 des éléments: espace de noms des éléments.
Libellés d'ingestion: libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
AllocationTime |
entity.metadata.creation_timestamp |
Le champ AllocationTime est analysé en tant que code temporel et mappé sur le champ creation_timestamp . L'analyseur tente 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'un libellé. La clé de ce libellé 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'un libellé. La clé de ce libellé est définie sur auto_placement . |
AvailabilityZone |
entity.entity.asset.attribute.cloud.availability_zone |
Le champ AvailabilityZone est directement mappé sur le champ availability_zone . |
AvailabilityZoneID |
entity.entity.asset.attribute.labels.value |
La valeur de AvailabilityZoneID du journal brut est utilisée comme valeur d'un libellé. La clé de ce libellé est définie sur availability_zone_id . |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity |
entity.entity.asset.attribute.labels.value |
La valeur de AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (ou de AvailableCapacity.Instance.Available après le renommage) est convertie en chaîne et utilisée comme valeur d'un libellé. 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 le 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 de AvailableCapacity.Instance.Total après le renommage) est convertie en chaîne et utilisée comme valeur d'un libellé. La clé est définie sur total_capacity . |
AvailableCapacity.AvailableVCpus |
entity.entity.asset.attribute.labels.value |
La valeur de AvailableCapacity.AvailableVCpus (ou de AvailableCapacity.VCPUs après le renommage) est convertie en chaîne et utilisée comme valeur d'un libellé. 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'un libellé. La clé de ce libellé est définie sur client_token . |
HostID |
entity.metadata.product_entity_id |
Le champ HostID (ou ID après le renommage) est mappé directement sur le champ product_entity_id . |
HostID |
entity.entity.asset.asset_id |
Le champ HostID (ou ID après le renommage) est mappé directement sur le champ asset_id . |
HostMaintenance |
entity.entity.asset.attribute.labels.value |
La valeur de HostMaintenance (ou Maintenance après le renommage) du journal brut est utilisée comme valeur d'un libellé. La clé de ce libellé est définie sur host_maintenance . |
HostProperties.Cores |
entity.entity.asset.hardware.cpu_number_cores |
La valeur de HostProperties.Cores est convertie en entier sans signature et mappée sur 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'un libellé. La clé de ce libellé 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'un libellé. La clé de ce libellé 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'un libellé. La clé est définie sur host_properties_sockets . |
HostProperties.TotalVCpus |
entity.entity.asset.attribute.labels.value |
La valeur de HostProperties.TotalVCpus (ou de HostProperties.TotalVCPUs après le renommage) est convertie en chaîne et utilisée comme valeur d'un libellé. 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 le renommage) du journal brut est utilisée comme valeur d'un libellé. La clé de ce libellé est définie sur host_recovery . |
HostReservationID |
entity.entity.asset.attribute.labels.value |
La valeur de HostReservationID (ou ReservationID après le renommage) du journal brut est utilisée comme valeur d'un libellé. La clé de ce libellé 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'un libellé. 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'un libellé. La clé de ce libellé 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'un libellé. La clé de ce libellé 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'un libellé. La clé de ce libellé est définie sur state . |
TagSet |
entity.entity.asset.attribute.labels |
Le tableau TagSet est itéré, et les Key et Value de chaque balise sont utilisés comme clé et valeur d'un libellé, respectivement. La valeur AMAZON_WEB_SERVICES est attribuée à ce champ par l'analyseur. Le collection_time du journal brut est mappé sur le champ collected_timestamp . La valeur ASSET est attribuée à ce champ par l'analyseur. La valeur AWS EC2 HOSTS est attribuée à ce champ par l'analyseur. La valeur AWS est attribuée à ce champ par l'analyseur. Les relations sont dérivées des champs Instances et OutpostArn , mais ces champs ne sont pas mappés directement à 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. |
Modifications
2024-01-31
- Ajout de la compatibilité avec le nouveau schéma.
2023-12-14
- Analyseur nouvellement créé.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.