Raccogli i log degli host AWS EC2
Parser Version: 1.0
Questo documento spiega come integrare i log degli host AWS EC2 in Google Security Operations per il monitoraggio e l'analisi. L'integrazione prevede l'analisi e la mappatura dei log host EC2 nel modello Unified Data Model (UDM), l'esecuzione della trasformazione dei dati e la creazione di relazioni tra host e istanze EC2. I log forniscono informazioni preziose su istanze, proprietà host, tipi di istanza e metriche sul rendimento che possono essere utilizzate per il monitoraggio della sicurezza, l'audit e la conformità.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi ad AWS.
Configura AWS IAM e S3
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
- Salva il nome e la regione del bucket per utilizzarli in un secondo momento.
- Crea un utente seguendo questa guida: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per un utilizzo successivo.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Criteri di autorizzazione.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente le norme.
- Cerca e seleziona il criterio AmazonS3FullAccess.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configura CloudTrail per AWS KMS
- Accedi alla console di gestione AWS.
- Nella barra di ricerca, digita e seleziona CloudTrail dall'elenco dei servizi.
- Fai clic su Crea percorso.
- Fornisci un nome del trail, ad esempio
EC2-Activity-Trail. - Seleziona la casella di controllo Attiva per tutti gli account della mia organizzazione.
- Digita l'URI del bucket S3 creato in precedenza (il formato deve essere:
s3://your-log-bucket-name/) o crea un nuovo bucket S3. - Se SSE-KMS è abilitato, fornisci un nome per l'alias AWS KMS o scegli una chiave AWS KMS esistente.
- Puoi lasciare invariate le altre impostazioni predefinite.
- Fai clic su Avanti.
- Seleziona Eventi di gestione ed Eventi di dati in Tipi di eventi per acquisire l'attività dell'host EC2.
- Fai clic su Avanti.
- Rivedi le impostazioni in Rivedi e crea.
- Fai clic su Crea percorso.
- (Facoltativo) Se hai creato un nuovo bucket, continua con la seguente procedura:
- Vai a S3.
- Identifica e seleziona il bucket di log appena creato.
- Seleziona la cartella AWSLogs.
- Fai clic su Copia URI S3 e salvalo.
Configura un feed in Google SecOps per importare gli host AWS EC2
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio AWS EC2 Hosts Logs.
- Seleziona Amazon S3 V2 come Tipo di origine.
- Seleziona AWS EC2 Hosts come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- URI S3: l'URI del bucket.
s3://your-log-bucket-name/- Sostituisci
your-log-bucket-namecon il nome effettivo del bucket.
- Sostituisci
Opzioni di eliminazione delle fonti: seleziona l'opzione di eliminazione in base alle tue preferenze.
Età massima file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.
Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
- URI S3: l'URI del bucket.
Fai clic su Avanti.
Controlla la nuova configurazione del feed di notizie nella schermata Finalizza, quindi fai clic su Invia.
Formati dei log degli host AWS EC2 supportati
Il parser degli host AWS EC2 supporta i log in formato JSON.
Log di esempio degli host AWS EC2 supportati
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 }
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
AllocationTime |
entity.metadata.creation_timestamp |
Il campo AllocationTime viene analizzato come timestamp e mappato al campo creation_timestamp. Il parser tenta vari formati (aaaa-MM-gg HH:mm:ss, RFC 3339, UNIX, ISO8601). |
AllowsMultipleInstanceTypes |
entity.entity.asset.attribute.labels.value |
Il valore di AllowsMultipleInstanceTypes del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su allows_multiple_instance_types. |
AutoPlacement |
entity.entity.asset.attribute.labels.value |
Il valore di AutoPlacement del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su auto_placement. |
AvailabilityZone |
entity.entity.asset.attribute.cloud.availability_zone |
Il campo AvailabilityZone è mappato direttamente al campo availability_zone. |
AvailabilityZoneID |
entity.entity.asset.attribute.labels.value |
Il valore di AvailabilityZoneID del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su availability_zone_id. |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity |
entity.entity.asset.attribute.labels.value |
Il valore di AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (o AvailableCapacity.Instance.Available dopo la ridenominazione) viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su available_instance_capacity_available_capacity. |
AvailableCapacity.AvailableInstanceCapacity.InstanceType |
entity.entity.asset.attribute.labels.value |
Il valore di AvailableCapacity.AvailableInstanceCapacity.InstanceType (o AvailableCapacity.Instance.Type dopo la ridenominazione) viene utilizzato come valore di un'etichetta. La chiave è impostata su available_instance_capacity_instance_type. |
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity |
entity.entity.asset.attribute.labels.value |
Il valore di AvailableCapacity.AvailableInstanceCapacity.TotalCapacity (o AvailableCapacity.Instance.Total dopo la ridenominazione) viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su total_capacity. |
AvailableCapacity.AvailableVCpus |
entity.entity.asset.attribute.labels.value |
Il valore di AvailableCapacity.AvailableVCpus (o AvailableCapacity.VCPUs dopo la ridenominazione) viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su available_v_cpus. |
ClientToken |
entity.entity.asset.attribute.labels.value |
Il valore di ClientToken del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su client_token. |
HostID |
entity.metadata.product_entity_id |
Il campo HostID (o ID dopo la ridenominazione) viene mappato direttamente al campo product_entity_id. |
HostID |
entity.entity.asset.asset_id |
Il campo HostID (o ID dopo la ridenominazione) viene mappato direttamente al campo asset_id. |
HostMaintenance |
entity.entity.asset.attribute.labels.value |
Il valore di HostMaintenance (o Maintenance dopo la ridenominazione) del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su host_maintenance. |
HostProperties.Cores |
entity.entity.asset.hardware.cpu_number_cores |
Il valore di HostProperties.Cores viene convertito in un numero intero senza segno e mappato a cpu_number_cores. |
HostProperties.InstanceFamily |
entity.entity.asset.attribute.labels.value |
Il valore di HostProperties.InstanceFamily del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su host_properties_instance_family. |
HostProperties.InstanceType |
entity.entity.asset.attribute.labels.value |
Il valore di HostProperties.InstanceType del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su host_properties_instance_type. |
HostProperties.Sockets |
entity.entity.asset.attribute.labels.value |
Il valore di HostProperties.Sockets viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su host_properties_sockets. |
HostProperties.TotalVCpus |
entity.entity.asset.attribute.labels.value |
Il valore di HostProperties.TotalVCpus (o HostProperties.TotalVCPUs dopo la ridenominazione) viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su host_properties_total_v_cpus. |
HostRecovery |
entity.entity.asset.attribute.labels.value |
Il valore di HostRecovery (o Recovery dopo la ridenominazione) del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su host_recovery. |
HostReservationID |
entity.entity.asset.attribute.labels.value |
Il valore di HostReservationID (o ReservationID dopo la ridenominazione) del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su host_reservation_id. |
MemberOfServiceLinkedResourceGroup |
entity.entity.asset.attribute.labels.value |
Il valore di MemberOfServiceLinkedResourceGroup viene convertito in una stringa e utilizzato come valore di un'etichetta. La chiave è impostata su member_of_service_linked_resource_group. |
OwnerID |
entity.entity.asset.attribute.labels.value |
Il valore di OwnerID del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su owner_id. |
ReleaseTime |
entity.entity.asset.attribute.labels.value |
Il valore di ReleaseTime del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su release_time. |
State |
entity.entity.asset.attribute.labels.value |
Il valore di State del log non elaborato viene utilizzato come valore di un'etichetta. La chiave per questa etichetta è impostata su state. |
TagSet |
entity.entity.asset.attribute.labels |
Viene eseguita l'iterazione dell'array TagSet e Key e Value di ogni tag vengono utilizzati rispettivamente come chiave e valore di un'etichetta. Il valore AMAZON_WEB_SERVICES viene assegnato a questo campo dal parser. collection_time del log non elaborato viene mappato al campo collected_timestamp. Il valore ASSET viene assegnato a questo campo dal parser. Il valore AWS EC2 HOSTS viene assegnato a questo campo dal parser. Il valore AWS viene assegnato a questo campo dal parser. Le relazioni derivano dai campi Instances e OutpostArn, ma questi campi non sono mappati direttamente all'oggetto IDM. La logica del parser crea oggetti relazione in base a questi campi e li unisce all'array relations. |
collection_time |
entity.metadata.collected_timestamp |
Il collection_time del log viene utilizzato come collected_timestamp dell'evento. |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.