Azure Flow Logs

⚠️

Previously known as NSG Flow logs, Microsoft deprecated NSG flow logs on June 30, 2025 and plans to retire them on September 30, 2027. In order to migrate to the new Azure Flow (also known as Virtual Net Flow) logs please follow Microsoft’s documentation for migration, https://learn.microsoft.com/en-us/azure/network-watcher/nsg-flow-logs-migrate.

Virtual net flow logs control inbound and outbound traffic to and from Azure resources by defining security rules based on IP address, port, and protocol. Virtual net flow logs capture information about network traffic, including source and destination IP addresses, ports, protocols, and whether traffic was allowed or denied. These logs are useful for monitoring network traffic, troubleshooting connectivity issues, and enhancing network security by detecting suspicious or unauthorized traffic patterns.

Ingest Method

Setup the ingestion of this source using the following guide.

Azure Blob Storage

Virtual Net Flow Log Forwarding

With the storage account created you can now setup Virtual net flow logs to export to it.

Follow along with Microsoft’s documentation on the exact steps required to create a new flow log. https://learn.microsoft.com/en-us/azure/network-watcher/vnet-flow-logs-manage?tabs=portal#create-a-flow-log

RunReveal Source

Go to RunReveal and add a new source selecting Azure Flow Logs.

Give the source a name and fill in the remaining fields with the saved values from setup.

azure blob

You will need the values that were saved from the setup steps.

  • The app Tenant ID and Client ID from the app registration screen.
  • The Client Secret Value that was created when generating a new secret for the app.
  • The Storage Account Name where the logs are exporting to.
  • The Storage Queue Name that holds the blob created notifications.

Once these are supplied and saved, RunReveal will begin to process messages in the queue and then ingest logs stored in the bucket.

Because of how Microsoft exports flow logs to storage accounts, logs are usually delayed until the top of the next hour.

Schema

The following columns are exposed for this source. RunReveal applies schema normalization across all sources, ensuring uniform field names and data types for cross-source queries and reusable detection logic.

Table: nsg_flow_logs (50 columns)

ColumnType
workspaceIDString
sourceIDString
sourceTypeLowCardinality(String)
sourceTTLUInt32
receivedAtDateTime
idString
eventTimeDateTime
eventNameString
eventIDString
srcIPString
srcASCountryCodeString
srcASNumberUInt32
srcASOrganizationString
srcCityString
srcConnectionTypeString
srcISPString
srcLatitudeFloat64
srcLongitudeFloat64
srcUserTypeString
dstIPString
dstASCountryCodeString
dstASNumberUInt32
dstASOrganizationString
dstCityString
dstConnectionTypeString
ColumnType
dstISPString
dstLatitudeFloat64
dstLongitudeFloat64
dstUserTypeString
actorMap(String
tagsMap(String
resourcesArray(String)
serviceNameString
readOnlyBool
rawLogString
systemIDString
categoryString
resourceIdString
operationNameString
flowVersionString
ruleString
macString
protocolString
trafficFlowString
trafficDecisionString
flowStateString
packetsSentInt64
bytesSentString
packetsReceivedInt64
bytesReceivedString

Table: azure_flow_logs (54 columns)

ColumnType
workspaceIDUnknown
sourceIDUnknown
sourceTypeUnknown
sourceTTLUnknown
receivedAtUnknown
idUnknown
eventTimeUnknown
eventNameUnknown
eventIDUnknown
srcIPUnknown
srcASCountryCodeUnknown
srcASNumberUnknown
srcASOrganizationUnknown
srcCityUnknown
srcConnectionTypeUnknown
srcISPUnknown
srcLatitudeUnknown
srcLongitudeUnknown
srcUserTypeUnknown
dstIPUnknown
dstASCountryCodeUnknown
dstASNumberUnknown
dstASOrganizationUnknown
dstCityUnknown
dstConnectionTypeUnknown
dstISPUnknown
dstLatitudeUnknown
ColumnType
dstLongitudeUnknown
dstUserTypeUnknown
actorUnknown
tagsUnknown
resourcesUnknown
serviceNameUnknown
enrichmentsUnknown
readOnlyUnknown
rawLogUnknown
flowLogGUIDUnknown
categoryUnknown
flowLogResourceIDUnknown
targetResourceIDUnknown
operationNameUnknown
ruleUnknown
macAddressUnknown
aclIDUnknown
srcPortUnknown
dstPortUnknown
protocolUnknown
flowDirectionUnknown
flowStateUnknown
flowEncryptionUnknown
packetsSentUnknown
bytesSentUnknown
packetsReceivedUnknown
bytesReceivedUnknown