gpt4 book ai didi

azure - 优化 Azure NSG 的 Powershell 脚本

转载 作者:行者123 更新时间:2023-12-03 02:41:14 25 4
gpt4 key购买 nike

我有一个脚本,用于查找 Azure NSG 中的所有入站、允许规则,其来源为任何。它正在完成他的工作,但需要花费大量时间来迭代 Azure 中每个可用 NSG 中的每条规则。

问题是有什么办法可以优化它,让它运行得更快吗?谢谢!

function nsg {

# List of default rules which are skipped

$array =
'Default rules'

# Get all RG with NSG

$RGS = (Get-AzureRmResource -ODataQuery "`$filter=resourcetype eq 'Microsoft.Network/networkSecurityGroups'").ResourceGroupName | Sort-Object -Unique

foreach ($RG in $RGS) {

# List of all NSG names

$NSG_Names = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $RG).Name

# Get NSG rules

foreach ($NSG_Name in $NSG_Names){

$Rules = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig | Select-Object -ExpandProperty Name

# Check if rule is not default

foreach ($Rule in $Rules){

if ($array.contains($Rule)){

Write-Verbose "$Rule excluded because it is default!"

}
else {

Write-Verbose "$NSG_Name - $Rule"

#$DestinationAddressPrefix = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty DestinationAddressPrefix
$DestinationPortRange = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty DestinationPortRange
$SourceAddrPref = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty SourceAddressPrefix
$SourcePortRange = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty SourcePortRange
$Access = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty Access
$Direction = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG | Get-AzureRmNetworkSecurityRuleConfig -Name $Rule | Select-Object -ExpandProperty Direction

# Chek rule for every criterion, access type, etc.

if ($Direction -eq "Inbound" -and $SourceAddrPref -eq "*" -and $Access -eq "Allow"){ #-and $DestinationAddressPrefix -eq "*" -and $DestinationPortRange -eq "*") {

$message = "Warning! RG: $RG; NSG: $NSG_Name has SOURCE ANY Rule: $Rule to Destionation Port: $DestinationPortRange"
$message

}}}}}}

最佳答案

我认为您不需要迭代所有数据。所有这些嵌套循环+排序都是导致速度变慢的原因。

在我看来,您只想输出方向为 Inbound 的所有 NSG,访问为 Allow,源地址前缀为 * 。如果是这种情况,您可以这样做:

$nsgs = Get-AzureRmNetworkSecurityGroup

foreach ($nsg in $nsgs.SecurityRules)
{
if ($nsg.Direction -eq "Inbound" -and $nsg.Access -eq "Allow" -and $nsg.SourceAddressPrefix -eq "*")
{
$nsg
}
}

这里我们只是迭代您从 $nsgs.SecurityRules 制定的安全规则。默认值位于 $nsgs.DefaultSecurityRules 中。您可以通过管道连接到 Get-Member 来查找这些属性。

关于azure - 优化 Azure NSG 的 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61184096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com