@@ -4,7 +4,7 @@ description: Learn how to filter and view Azure DNS traffic
4
4
author : greg-lindsay
5
5
ms.service : azure-dns
6
6
ms.topic : how-to
7
- ms.date : 11/14 /2024
7
+ ms.date : 11/19 /2024
8
8
ms.author : greglin
9
9
---
10
10
@@ -190,74 +190,160 @@ The failed query is recorded in log analytics:
190
190
191
191
## [ PowerShell] ( #tab/sign-powershell )
192
192
193
- Set up a local PowerShell repository and install the Az.DnsResolver PowerShell module
193
+ Set up a local PowerShell repository and install the Az.DnsResolver PowerShell module. This is only needed if you aren't using Cloud Shell.
194
194
195
195
1 . Create a new folder on your disk to act as a local PowerShell repository. In this example, ` C:\bin\PSRepo ` is used.
196
196
2 . Download [ Az.DnsResolver.0.2.6.nupkg] ( https://github.com/sfiguemsft/privateresolver/blob/main/Az.DnsResolver.0.2.6.nupkg ) into this directory.
197
197
3 . Set up your local repository by running the following command:
198
198
199
- ``` PowerShell
200
- # Register the repository
201
- Register-PSRepository -Name LocalPSRepo -SourceLocation 'C:\bin\PSRepo' -ScriptSourceLocation 'C:\bin\PSRepo' -InstallationPolicy Trusted
199
+ ``` PowerShell
200
+ # Register the repository
201
+ Register-PSRepository -Name LocalPSRepo -SourceLocation 'C:\bin\PSRepo' -ScriptSourceLocation 'C:\bin\PSRepo' -InstallationPolicy Trusted
202
202
203
- # Install the Az.DnsResolver module
204
- Install-Module -Name Az.DnsResolver -RequiredVersion 0.2.6
203
+ # Install the Az.DnsResolver module
204
+ Install-Module -Name Az.DnsResolver -RequiredVersion 0.2.6 -SkipPublisherCheck
205
205
206
- # If you already installed Az.DnsResolver, update your version to 0.2.6
207
- Update-Module -Name Az.DnsResolver
206
+ # If you already installed Az.DnsResolver, update your version to 0.2.6
207
+ Update-Module -Name Az.DnsResolver
208
208
209
- # Confirm that the Az.DnsResolver module was installed properly
210
- Get-InstalledModule -Name Az.DnsResolver
211
- ```
209
+ # Confirm that the Az.DnsResolver module was installed properly
210
+ Get-InstalledModule -Name Az.DnsResolver
211
+ ```
212
212
213
213
4. Set the subscription context
214
214
215
- ``` PowerShell
216
- # Connect PowerShell to Azure cloud
217
- Connect-AzAccount -Environment AzureCloud
215
+ ```PowerShell
216
+ # Connect PowerShell to Azure cloud
217
+ Connect-AzAccount -Environment AzureCloud
218
+
219
+ # Set your default subscription
220
+ Select-AzSubscription -SubscriptionObject (Get-AzSubscription -SubscriptionId <your-sub-id>)
221
+ ```
218
222
219
- # Set your default subscription
220
- Select-AzSubscription -SubscriptionObject (Get-AzSubscription -SubscriptionId <your-sub-id>)
223
+ 5. Create a DNS security policy with PowerShell.
221
224
222
- # Register your subscription for Microsoft.Network
223
- # Even if your subscription is already registered, re-register the subscription to ensure access to Azure DNS security policy resource types.
224
- $result = Register-AzProviderFeature -ProviderNamespace Microsoft.Network $result.ResourceTypes | Where-Object { $_.ResourceTypeName.Contains("dnsResolverPolicies") -or $_.ResourceTypeName.Contains("dnsResolverDomainLists") }
225
- ```
225
+ ```PowerShell
226
+ $ErrorActionPreference = "Stop"
226
227
227
- 4 . Create a DNS security policy with PowerShell
228
-
229
- ``` PowerShell
230
- $ErrorActionPreference = "Stop"
231
- $resourceNumber = 1 # Customize this if needed $region = "centraluseuap" $name = "$($env:username)" $nameSuffix = "prod-$($region)-$($name)-securitypolicytest$($resourceNumber)-bugbash"
232
- $resourceGroupName = "rg-$($nameSuffix)" $virtualNetworkName = "vnet-$($nameSuffix)" $securityPolicyName = "dnssecuritypolicy-$($nameSuffix)" $storageAccountName = "storageaccount$name" $diagnosticSettingName = "diagnosticsetting-$($nameSuffix)" $vnetId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Network/virtualNetworks/$virtualNetworkName"
233
- Write-Host "Creating resource group"
234
- $rg = New-AzResourceGroup -Name $resourceGroupName -Location $region Write-Host ($rg | ConvertTo-Json -Depth 64)
235
- Write-Host "Creating virtual network" $defaultSubnet = New-AzVirtualNetworkSubnetConfig -Name "default" -AddressPrefix "10.$resourceNumber.0.0/24" $vnet = New-AzVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $resourceGroupName -Location $region -AddressPrefix "10.$resourceNumber.0.0/16" -Subnet $defaultSubnet Write-Host ($vnet | ConvertTo-Json -Depth 64)
236
- Write-Host "Creating storage account" $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -Location $region -SkuName Standard_GRS Write-Host $securityPolicy.ToJsonString()
237
- ################################
238
- # DO PUTS
239
- ################################
240
- Write-Host "Creating security policy" $securityPolicy = New-AzDnsResolverPolicy -Location $region -ResourceGroupName $resourceGroupName -Name $securityPolicyName Write-Host $securityPolicy.ToJsonString()
241
- Write-Host "Creating security policy virtual network link" $link = New-AzDnsResolverPolicyVirtualNetworkLink -Location $region -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $securityPolicyName -Name test-policy-link -VirtualNetworkId $vnetId Write-Host $link.ToJsonString()
242
- $log = New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category DnsResponse
243
- Write-Host "Creating diagnostic setting" $diagnosticSetting = New-AzDiagnosticSetting -Name $diagnosticSettingName -ResourceId $securityPolicy.id -Log $log -StorageAccountId $storageAccount.id Write-Host $diagnosticSetting.ToJsonString()
244
- ################################
245
- # DO UPDATES
246
- ################################
247
- Write-Host "Updating security policy" $securityPolicy = Update-AzDnsResolverPolicy -ResourceGroupName $resourceGroupName -Name $securityPolicyName -Tag @{"key0" = "value0"} Write-Host $securityPolicy.ToJsonString()
248
- Write-Host "Updating security policy virtual network link" $link = Update-AzDnsResolverPolicyVirtualNetworkLink -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $securityPolicyName -Name test-policy-link -Tag @{"key1" = "value1"} Write-Host $link.ToJsonString()
249
- $log = New-AzDiagnosticSettingLogSettingsObject -Enabled $false -Category DnsResponse
250
- Write-Host "Updating diagnostic setting by disabling log category" $diagnosticSetting = New-AzDiagnosticSetting -Name $diagnosticSettingName -ResourceId $securityPolicy.id -Log $log -StorageAccountId $storageAccount.id Write-Host $diagnosticSetting.ToJsonString()
251
- ################################
252
- # DO GETS
253
- ################################
254
- Write-Host "Getting security policy" $securityPolicy = Get-AzDnsResolverPolicy -ResourceGroupName $resourceGroupName -Name $securityPolicyName Write-Host $securityPolicy.ToJsonString()
255
- Write-Host "Getting security policy virtual network link"
256
- $link = Get-AzDnsResolverPolicyVirtualNetworkLink -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $securityPolicyName -Name test-policy-link Write-Host $link.ToJsonString()
257
- Write-Host "Getting diagnostic setting" $diagnosticSetting = Get-AzDiagnosticSetting -ResourceId $securityPolicy.id Write-Host $diagnosticSetting.ToJsonString()
258
- ```
228
+ ################################################################
229
+ # Configure resource names and locations
230
+ ################################################################
231
+
232
+ $resourceNumber = 1 # Customize this if needed
233
+ $region = "centralus" # Change this region to your preference
234
+ if ($env:username) {$name = "$($env:username)"} else {$name = "$($env:USER)"} # The environment variable is different in Cloud Shell vs local PowerShell
235
+ $nameSuffix = "test-$($region)-$($name)-resolverpolicytest$($resourceNumber)-test"
236
+ $resourceGroupName = "rg-$($nameSuffix)"
237
+ $virtualNetworkName = "vnet-$($nameSuffix)"
238
+ $resolverPolicyName = "dnsresolverpolicy-$($nameSuffix)"
239
+ $domainListName = "domainlist-$($nameSuffix)"
240
+ $securityRuleName = "securityrule-$($nameSuffix)"
241
+ $resolverPolicyLinkName = "dnsresolverpolicylink"
242
+ $storageAccountName = "stor-$($name)" # Customize this, taking care that the name is not too long
243
+ $diagnosticSettingName = "diagnosticsetting-$($nameSuffix)"
244
+ $vnetId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Network/virtualNetworks/$virtualNetworkName"
245
+
246
+ ################################################################
247
+ # Create resource group, virtual network, and storage account
248
+ ################################################################
249
+
250
+ Write-Host "Creating resource group"
251
+ $rg = New-AzResourceGroup -Name $resourceGroupName -Location $region
252
+ Write-Host ($rg | ConvertTo-Json -Depth 64)
253
+
254
+ Write-Host "Creating virtual network"
255
+ $defaultSubnet = New-AzVirtualNetworkSubnetConfig -Name "default" -AddressPrefix "10.$resourceNumber.0.0/24"
256
+ $vnet = New-AzVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $resourceGroupName -Location $region -AddressPrefix "10.$resourceNumber.0.0/16" -Subnet $defaultSubnet
257
+ Write-Host ($vnet | ConvertTo-Json -Depth 64)
258
+
259
+ Write-Host "Creating storage account"
260
+ $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -Location $region -SkuName Standard_GRS
261
+ Write-Host $storageAccount.ToString()
262
+
263
+ ################################
264
+ # Create DNS security policy
265
+ ################################
266
+
267
+ Write-Host "Creating DNS resolver policy"
268
+ $resolverPolicy = New-AzDnsResolverPolicy -Location $region -ResourceGroupName $resourceGroupName -Name $resolverPolicyName
269
+ Write-Host $resolverPolicy.ToJsonString()
270
+
271
+ Write-Host "Creating DNS resolver policy virtual network link"
272
+ $link = New-AzDnsResolverPolicyVirtualNetworkLink -Location $region -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $resolverPolicyName -Name $resolverPolicyLinkName -VirtualNetworkId $vnetId
273
+ Write-Host $link.ToJsonString()
274
+
275
+ $log = New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category DnsResponse
276
+
277
+ Write-Host "Creating diagnostic setting"
278
+ $diagnosticSetting = New-AzDiagnosticSetting -Name $diagnosticSettingName -ResourceId $resolverPolicy.id -Log $log -StorageAccountId $storageAccount.id
279
+ Write-Host $diagnosticSetting.ToJsonString()
280
+
281
+ Write-Host "Creating domain list"
282
+ $domainList = New-AzDnsResolverDomainList -Location $region -ResourceGroupName $resourceGroupName -Name $domainListName -Domain @("contoso.com.", "example.com.")
283
+ Write-Host $domainList.ToJsonString()
284
+
285
+ Write-Host "Creating DNS security policy rule"
286
+ $rule = New-AzDnsResolverPolicyDnsSecurityRule -ResourceGroupName $resourceGroupName -Name $securityRuleName -DnsResolverDomainList @{id = $domainList.Id;} -DnsSecurityRuleState "Enabled" -ActionType "Block" -ActionBlockResponseCode "SERVFAIL" -Priority 100 -DnsResolverPolicyName $resolverPolicyName -Location $region
287
+ Write-Host $rule.ToJsonString()
288
+ ```
289
+
290
+ 6. Optional: Update DNS resolver policies with new values.
291
+
292
+ ```PowerShell
293
+ ################################
294
+ # Update DNS security policy
295
+ ################################
296
+
297
+ Write-Host "Updating DNS resolver policy"
298
+ $resolverPolicy = Update-AzDnsResolverPolicy -ResourceGroupName $resourceGroupName -Name $resolverPolicyName -Tag @{"key0" = "value0"}
299
+ Write-Host $resolverPolicy.ToJsonString()
300
+
301
+ Write-Host "Updating DNS resolver policy virtual network link"
302
+ $link = Update-AzDnsResolverPolicyVirtualNetworkLink -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $resolverPolicyName -Name $resolverPolicyLinkName -Tag @{"key1" = "value1"}
303
+ Write-Host $link.ToJsonString()
304
+
305
+ $log = New-AzDiagnosticSettingLogSettingsObject -Enabled $false -Category DnsResponse
306
+
307
+ Write-Host "Updating diagnostic setting by disabling log category"
308
+ $diagnosticSetting = New-AzDiagnosticSetting -Name $diagnosticSettingName -ResourceId $resolverPolicy.id -Log $log -StorageAccountId $storageAccount.id
309
+ Write-Host $diagnosticSetting.ToJsonString()
310
+
311
+ Write-Host "Updating domain list"
312
+ $domainList = Update-AzDnsResolverDomainList -ResourceGroupName $resourceGroupName -Name $domainListName -Tag @{"key2" = "value2"}
313
+ Write-Host $domainList.ToJsonString()
314
+
315
+ Write-Host "Updating DNS security policy rule"
316
+ $rule = Update-AzDnsResolverPolicyDnsSecurityRule -ResourceGroupName $resourceGroupName -Name $securityRuleName -DnsResolverDomainList @{id = $domainList.Id;} -DnsResolverPolicyName $resolverPolicyName
317
+ Write-Host $rule.ToJsonString()
318
+ ```
319
+
320
+ 7. Review the DNS security policy configuration.
321
+
322
+ ```PowerShell
323
+ ################################
324
+ # Get DNS security policy
325
+ ################################
326
+
327
+ Write-Host "Getting DNS resolver policy"
328
+ $resolverPolicy = Get-AzDnsResolverPolicy -ResourceGroupName $resourceGroupName -Name $resolverPolicyName
329
+ Write-Host $resolverPolicy.ToJsonString()
330
+
331
+ Write-Host "Getting DNS resolver policy virtual network link"
332
+ $link = Get-AzDnsResolverPolicyVirtualNetworkLink -ResourceGroupName $resourceGroupName -DnsResolverPolicyName $resolverPolicyName -Name $resolverPolicyLinkName
333
+ Write-Host $link.ToJsonString()
334
+
335
+ Write-Host "Getting diagnostic setting"
336
+ $diagnosticSetting = Get-AzDiagnosticSetting -ResourceId $resolverPolicy.id
337
+ Write-Host $diagnosticSetting.ToJsonString()
338
+
339
+ Write-Host "Getting domain list"
340
+ $domainList = Get-AzDnsResolverDomainList -ResourceGroupName $resourceGroupName -Name $domainListName
341
+ Write-Host $rule.ToJsonString()
259
342
260
- Configuration for domain list and traffic rules is coming.
343
+ Write-Host "Getting DNS security policy rule"
344
+ $rule = Get-AzDnsResolverPolicyDnsSecurityRule -ResourceGroupName $resourceGroupName -Name $securityRuleName -DnsResolverPolicyName $resolverPolicyName
345
+ Write-Host $rule.ToJsonString()
346
+ ```
261
347
262
348
---
263
349
0 commit comments