Internal process and deduplication method
All events are fetched via Azure Resource Graph API queries and filtered/ordered by their created datetime. The collector continually pulls new events since the last recorded timestamp. A unique hash value is computed for each event and used for deduplication purposes to ensure events are not fetched multiple times in subsequent pulls.
Devo categorization and destination
All events of this service are ingested into the table
edr.microsoft_defender.iot_security.alert
Setup output
A successful run has the following output messages for the setup module:
2023-11-03T18:59:50.822 WARNING InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Waiting until setup will be executed
2023-11-03T18:59:50.823 WARNING InputProcess::IotPullerSetup(defender_for_iot,defender_for_iot#23453,iot_security_alerts#predefined) -> The token/header/authentication has not been created yet
2023-11-03T18:59:52.042 INFO InputProcess::IotPullerSetup(defender_for_iot,defender_for_iot#23453,iot_security_alerts#predefined) -> Successfully tested fetch for microsoft.iotsecurity/locations/devicegroups/alerts. Source is pullable.
2023-11-03T18:59:52.043 INFO InputProcess::IotPullerSetup(defender_for_iot,defender_for_iot#23453,iot_security_alerts#predefined) -> Setup for module <IotPuller> has been successfully executed
Puller output
A successful initial run has the following output messages for the puller module:
Note that the PrePull
action is executed only one time before the first run of the Pull
action.
2023-11-03T18:59:52.824 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) Starting the execution of pre_pull()
2023-11-03T18:59:52.826 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Reading persisted data
2023-11-03T18:59:52.829 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Data retrieved from the persistence: {'@persistence_version': 1, 'start_time_in_utc': '2023-10-01T09:03:00Z', 'last_event_time_in_utc': '2023-10-31T20:38:57Z', 'last_ids': ['c0deba5fa6d4ac957551b33665f5ff508c5c31f3791fff7bae2b68777a131a98'], 'skip_token': None}
2023-11-03T18:59:52.831 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Running the persistence upgrade steps
2023-11-03T18:59:52.833 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Running the persistence corrections steps
2023-11-03T18:59:52.834 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Running the persistence corrections steps
2023-11-03T18:59:52.841 WARNING InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Some changes have been detected and the persistence needs to be updated. Previous content: {'@persistence_version': 1, 'start_time_in_utc': '2023-10-01T09:03:00Z', 'last_event_time_in_utc': '2023-10-31T20:38:57Z', 'last_ids': ['c0deba5fa6d4ac957551b33665f5ff508c5c31f3791fff7bae2b68777a131a98'], 'skip_token': None}. New content: {'@persistence_version': 1, 'start_time_in_utc': '2023-10-01T09:01:00Z', 'last_event_time_in_utc': '2023-10-01T09:01:00Z', 'last_ids': [], 'skip_token': None}
2023-11-03T18:59:52.862 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Updating the persistence
2023-11-03T18:59:52.863 WARNING InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Persistence has been updated successfully
2023-11-03T18:59:52.864 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) Finalizing the execution of pre_pull()
2023-11-03T18:59:52.864 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Starting data collection every 60 seconds
2023-11-03T18:59:52.865 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Pull Started
2023-11-03T18:59:52.866 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Fetching all iotsecurityresources - microsoft.iotsecurity/locations/devicegroups/alerts records since 2023-10-01T09:01:00Z
2023-11-03T18:59:53.421 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> No skip_token returned. All records fetched.
2023-11-03T18:59:53.423 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> (Partial) Statistics for this pull cycle (@devo_pulling_id=1699034392824):Number of requests made: 1; Number of events received: 30; Number of duplicated events filtered out: 0; Number of events generated and sent: 30; Average of events per second: 53.834.
2023-11-03T18:59:53.423 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Statistics for this pull cycle (@devo_pulling_id=1699034392824):Number of requests made: 1; Number of events received: 30; Number of duplicated events filtered out: 0; Number of events generated and sent: 30; Average of events per second: 53.789.
2023-11-03T18:59:53.424 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> The data is up to date!
After a successful collector’s execution (that is, no error logs found), you will see the following log message:
2023-11-03T18:59:53.424 INFO InputProcess::IotPuller(defender_for_iot,23453,iot_security_alerts,predefined) -> Data collection completed. Elapsed time: 0.600 seconds. Waiting for 59.400 second(s) until the next one