Control: 6.1.1.7 Ensure that virtual network flow logs are captured and sent to Log Analytics
Description
Ensure that virtual network flow logs are captured and fed into a central log analytics workspace.
Virtual network flow logs provide critical visibility into traffic patterns. Sending logs to a Log Analytics workspace enables centralized analysis, correlation, and alerting for faster threat detection and response.
Remediation
Remediate from Azure Portal
- Go to
Network Watcher. - Under
Logs, clickFlow logs. - Click
+ Create. - Select a
subscription. - Next to
Flow log type,selectVirtual network. - Click
+ Select target resource. - Select
Virtual network. - Select a virtual network.
- Click
Confirm selection. - Select a storage account, or create a new storage account.
- Set the retention in days for the storage account.
- Click
Next. - Under
Analytics, forFlow logs version, selectVersion 2. - Check the box next to
Enable traffic analytics. - Select a processing interval.
- Select a
Log Analytics Workspace. - Click
Next. - Optionally, add
Tags. - Click
Review + create. - Click
Create. - Repeat steps 1-20 for each subscription or virtual network requiring remediation.
Usage
Run the control in your terminal:
powerpipe control run azure_compliance.control.cis_v500_6_1_1_7Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run azure_compliance.control.cis_v500_6_1_1_7 --shareSQL
This control uses a named query:
with virtual_network_watcher_flow_log as ( select subscription_id, count(*) as vn_flow_log_count from azure_network_watcher_flow_log where traffic_analytics -> 'workspaceId' is not null and target_resource_id like '%/Microsoft.Network/virtualNetworks/%' group by subscription_id)select sub.id resource, case when vn_flow_log_count > 0 then 'ok' else 'alarm' end as status, case when vn_flow_log_count > 0 then sub.display_name || ' has ' || vn_flow_log_count || ' virtual network flow log(s) captured and sent to log analytics.' else sub.display_name || ' has no virtual network flow log captured and sent to log analytics.' end as reason , display_name as subscriptionfrom azure_subscription as sub left join virtual_network_watcher_flow_log as vn_flow_log on vn_flow_log.subscription_id = sub.subscription_id;