@@ -4,7 +4,7 @@ resource "azurerm_policy_definition" "deploy_nsg_flowlogs" {
4
4
policy_type = " Custom"
5
5
mode = " All"
6
6
display_name = " Deploy-Nsg-FlowLogs"
7
- description = " null "
7
+ description = " Deploys NSG flow logs and traffic analytics "
8
8
9
9
management_group_name = var. management_group_name
10
10
policy_rule = << POLICYRULE
@@ -20,11 +20,18 @@ resource "azurerm_policy_definition" "deploy_nsg_flowlogs" {
20
20
"roleDefinitionIds": [
21
21
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
22
22
],
23
- "name": "[concat('NetworkWatcher_', field('location'), '/', 'Microsoft.Network', resourceGroup().name, field('name'))]",
24
23
"resourceGroupName": "NetworkWatcherRG",
25
24
"existenceCondition": {
26
- "field": "Microsoft.Network/networkWatchers/flowLogs/enabled",
27
- "equals": "true"
25
+ "allOf": [
26
+ {
27
+ "field": "Microsoft.Network/networkWatchers/flowLogs/enabled",
28
+ "equals": "true"
29
+ },
30
+ {
31
+ "field": "Microsoft.Network/networkWatchers/flowLogs/flowAnalyticsConfiguration.networkWatcherFlowAnalyticsConfiguration.enabled",
32
+ "equals": "[parameters('flowAnalyticsEnabled')]"
33
+ }
34
+ ]
28
35
},
29
36
"deployment": {
30
37
"properties": {
@@ -44,6 +51,15 @@ resource "azurerm_policy_definition" "deploy_nsg_flowlogs" {
44
51
},
45
52
"retention": {
46
53
"value": "[parameters('retention')]"
54
+ },
55
+ "flowAnalyticsEnabled": {
56
+ "value": "[parameters('flowAnalyticsEnabled')]"
57
+ },
58
+ "trafficAnalyticsInterval": {
59
+ "value": "[parameters('trafficAnalyticsInterval')]"
60
+ },
61
+ "logAnalytics": {
62
+ "value": "[parameters('logAnalytics')]"
47
63
}
48
64
},
49
65
"template": {
@@ -63,16 +79,24 @@ resource "azurerm_policy_definition" "deploy_nsg_flowlogs" {
63
79
"type": "string"
64
80
},
65
81
"retention": {
66
- "type": "int",
67
- "defaultValue": 5
82
+ "type": "int"
83
+ },
84
+ "flowAnalyticsEnabled": {
85
+ "type": "bool"
86
+ },
87
+ "trafficAnalyticsInterval": {
88
+ "type": "int"
89
+ },
90
+ "logAnalytics": {
91
+ "type": "string"
68
92
}
69
93
},
70
94
"variables": {},
71
95
"resources": [
72
96
{
73
97
"type": "Microsoft.Network/networkWatchers/flowLogs",
74
- "apiVersion": "2019-11 -01",
75
- "name": "[concat('NetworkWatcher_', toLower(parameters('location')), '/', 'flowLogs' )]",
98
+ "apiVersion": "2020-05 -01",
99
+ "name": "[take( concat('NetworkWatcher_', toLower(parameters('location')), '/', parameters('networkSecurityGroupName'), '-', parameters('resourceGroupName'), '-flowlog' ), 80 )]",
76
100
"location": "[parameters('location')]",
77
101
"properties": {
78
102
"targetResourceId": "[resourceId(parameters('resourceGroupName'), 'Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroupName'))]",
@@ -85,6 +109,15 @@ resource "azurerm_policy_definition" "deploy_nsg_flowlogs" {
85
109
"format": {
86
110
"type": "JSON",
87
111
"version": 2
112
+ },
113
+ "flowAnalyticsConfiguration": {
114
+ "networkWatcherFlowAnalyticsConfiguration": {
115
+ "enabled": "[bool(parameters('flowAnalyticsEnabled'))]",
116
+ "trafficAnalyticsInterval": "[parameters('trafficAnalyticsInterval')]",
117
+ "workspaceId": "[if(not(empty(parameters('logAnalytics'))), reference(parameters('logAnalytics'), '2020-03-01-preview', 'Full').properties.customerId, json('null')) ]",
118
+ "workspaceRegion": "[if(not(empty(parameters('logAnalytics'))), reference(parameters('logAnalytics'), '2020-03-01-preview', 'Full').location, json('null')) ]",
119
+ "workspaceResourceId": "[if(not(empty(parameters('logAnalytics'))), parameters('logAnalytics'), json('null'))]"
120
+ }
88
121
}
89
122
}
90
123
}
@@ -104,13 +137,37 @@ POLICYRULE
104
137
"type": "Integer",
105
138
"metadata": {
106
139
"displayName": "Retention"
107
- }
140
+ },
141
+ "defaultValue": 5
108
142
},
109
143
"storageAccountResourceId": {
110
144
"type": "String",
111
145
"metadata": {
112
- "displayName": "Storage Account Resource Id"
146
+ "displayName": "Storage Account Resource Id",
147
+ "strongType": "Microsoft.Storage/storageAccounts"
113
148
}
149
+ },
150
+ "trafficAnalyticsInterval": {
151
+ "type": "Integer",
152
+ "metadata": {
153
+ "displayName": "Traffic Analytics processing interval mins (10/60)"
154
+ },
155
+ "defaultValue": 60
156
+ },
157
+ "flowAnalyticsEnabled": {
158
+ "type": "Boolean",
159
+ "metadata": {
160
+ "displayName": "Enable Traffic Analytics"
161
+ },
162
+ "defaultValue": false
163
+ },
164
+ "logAnalytics": {
165
+ "type": "String",
166
+ "metadata": {
167
+ "strongType": "omsWorkspace",
168
+ "displayName": "Resource ID of Log Analytics workspace"
169
+ },
170
+ "defaultValue": ""
114
171
}
115
172
}
116
173
PARAMETERS
0 commit comments