Functions/Azure/Confirm-AzNsgRule.ps1
function Confirm-AzNsgRule { <# .SYNOPSIS Tests for the existence of an NSG rule and (optionally) its specific configuration in Azure. .DESCRIPTION The Confirm-AzNsgRule function takes several parameters and returns $true if it is found and matches the specified configuration, otherwise it returns $false. .PARAMETER Name The name of the NSG rule to look for. This parameter is required. .PARAMETER ResourceGroupName The name of the Resource Group that the NSG is supposed to be in. This parameter is required. .PARAMETER NsgName The name of the Network Security Group. This parameter is required. .PARAMETER Priority The priority of the NSG rule. This parameter is optional. .PARAMETER SourceAddressPrefix The source address prefix of the NSG rule. This parameter is optional. .PARAMETER SourcePortRange The source port range of the NSG rule. This parameter is optional. .PARAMETER DestinationAddressPrefix The destination address prefix of the NSG rule. This parameter is optional. .PARAMETER DestinationPortRange The destination port range of the NSG rule. This parameter is optional. .PARAMETER Protocol The protocol of the NSG rule. This parameter is optional. .PARAMETER Access The access type of the NSG rule (Allow/Deny). This parameter is optional. .PARAMETER Direction The direction of the NSG rule (Inbound/Outbound). This parameter is optional. .EXAMPLE # Check if an NSG rule named "MyNsgRule01" exists in the resource group "MyResourceGroup01" in the NSG "MyNsg01" Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" .EXAMPLE # Check if an NSG rule named "MyNsgRule01" exists in the resource group "MyResourceGroup01" in the NSG "MyNsg01" and # store the result in a variable. $exists = Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" if ($exists) { Write-Output "MyNsgRule01 exists in the MyResourceGroup01 Resource Group." } else { Write-Output "MyNsgRule01 does not exist in the MyResourceGroup01 Resource Group." } .EXAMPLE # Check with a specific priority Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" -Priority 100 .EXAMPLE # Check with a specific SourceAddressPrefix Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" ` -SourceAddressPrefix '192.168.1.0/24' .EXAMPLE # Check with a specific SourcePortRange Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" ` -SourcePortRange "80" .EXAMPLE # Check with a specific DestinationAddressPrefix Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" ` -DestinationAddressPrefix ' .EXAMPLE # Check with a specific DestinationPortRange Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" ` -DestinationPortRange "80" .EXAMPLE # Check with a specific Protocol Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" -Protocol "TCP" .EXAMPLE # Check with a specific Access Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" -Access "Allow" .EXAMPLE # Check with a specific Direction Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" -Direction "Inbound" .EXAMPLE # How to use this in a Pester test Describe "MyNsgRule01 NSG Rule" { It "Should exist in the MyResourceGroup01 Resource Group" { Confirm-AzNsgRule -Name "MyNsgRule01" -ResourceGroupName "MyResourceGroup01" -NsgName "MyNsg01" ` | Should -Be $true } } .NOTES Author: Doug Seelinger #> [CmdletBinding()] param ( [Parameter(Mandatory=$true)] [string]$Name, [Parameter(Mandatory=$true)] [string]$ResourceGroupName, [Parameter(Mandatory=$true)] [string]$NsgName, [Parameter(Mandatory=$false)] [int]$Priority, [Parameter(Mandatory=$false)] [string]$SourceAddressPrefix, [Parameter(Mandatory=$false)] [string]$SourcePortRange, [Parameter(Mandatory=$false)] [string]$DestinationAddressPrefix, [Parameter(Mandatory=$false)] [string]$DestinationPortRange, [Parameter(Mandatory=$false)] [string]$Protocol, [Parameter(Mandatory=$false)] [string]$Access, [Parameter(Mandatory=$false)] [string]$Direction ) begin { Import-Module Az.Accounts Import-Module Az.Network if (-not (Get-AzContext)) { Connect-AzAccount } } process { $nsg = Get-AzNetworkSecurityGroup -Name $NsgName -ResourceGroupName $ResourceGroupName if (-not $nsg) { return $false } $rule = $nsg.SecurityRules | Where-Object { $_.Name -eq $Name } if (-not $rule) { return $false } if ($Priority -and $rule.Priority -ne $Priority) { return $false } if ($SourceAddressPrefix -and $rule.SourceAddressPrefix -ne $SourceAddressPrefix) { return $false } if ($SourcePortRange -and $rule.SourcePortRange -ne $SourcePortRange) { return $false } if ($DestinationAddressPrefix -and $rule.DestinationAddressPrefix -ne $DestinationAddressPrefix) { return $false } if ($DestinationPortRange -and $rule.DestinationPortRange -ne $DestinationPortRange) { return $false } if ($Protocol -and $rule.Protocol -ne $Protocol) { return $false } if ($Access -and $rule.Access -ne $Access) { return $false } if ($Direction -and $rule.Direction -ne $Direction) { return $false } return $true } end { } } |