Azure使用powershell更新多个NSG规则

Azure使用powershell更新多个NSG规则,azure,powershell,security,Azure,Powershell,Security,我想根据不断变化的IP地址列表一次更新多个NSG规则。 例如,我想更新名为ftp、ssh、https(以及其他一些)的规则。 以下是我到目前为止的情况: $ips = @("10.1.1.2", "10.1.1.3", "192.168.0.0/16") $nsgName = "Dev1-nsg" $resourceGroupName = "myResourceGrp1" $nsg = Get-A

我想根据不断变化的IP地址列表一次更新多个NSG规则。 例如,我想更新名为ftp、ssh、https(以及其他一些)的规则。 以下是我到目前为止的情况:

$ips = @("10.1.1.2", "10.1.1.3", "192.168.0.0/16")
$nsgName = "Dev1-nsg"
$resourceGroupName = "myResourceGrp1"
$nsg = Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $resourceGroupName
Set-AzNetworkSecurityRuleConfig -Name "ftp" -NetworkSecurityGroup $nsg -SourceAddressPrefix $ips
Set-AzNetworkSecurityRuleConfig -Name "ssh" -NetworkSecurityGroup $nsg -SourceAddressPrefix $ips
Set-AzNetworkSecurityRuleConfig -Name "https" -NetworkSecurityGroup $nsg -SourceAddressPrefix $ips
Get-AzNetworkSecurityRuleConfig -Name "ftp" -NetworkSecurityGroup $nsg
Get-AzNetworkSecurityRuleConfig -Name "ssh" -NetworkSecurityGroup $nsg
Get-AzNetworkSecurityRuleConfig -Name "https" -NetworkSecurityGroup $nsg
我的问题:

  • 当我在Powershell中运行上述操作时,一切似乎都很好,但当我转到Azure nsg门户并刷新时,规则似乎没有改变
  • 如果我正在更新许多规则(比如15条),那么最好的方法是通过一个规则名列表循环,以使用IP列表更新每个规则名
  • 我们无法在Azure中更新NSG规则,但需要修改本地PowerShell脚本,然后将更改推送到Azure,请参阅

  • 要在规则名称列表中循环以更新每个IP列表,可以这样做

     $ips = @("10.1.1.2", "10.1.1.3", "192.168.0.0/16")
     $nsgName = "ubun-a-nsg"
     $resourceGroupName = "nancy"
     $rule_names = @("NRMS-Rule-103","NRMS-Rule-104","NRMS-Rule-105")
    
     foreach($rule_name in $rule_names)
     {
    
     $nsg = Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $resourceGroupName
     $rule= $nsg | Get-AzNetworkSecurityRuleConfig -Name $rule_name  
    
     Set-AzNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg `
         -Name $rule_name `
         -Access $rule.Access `
         -Protocol $rule.Protocol `
         -Direction $rule.Direction `
         -Priority $rule.Priority `
         -SourceAddressPrefix $ips `
         -SourcePortRange $rule.SourcePortRange `
         -DestinationAddressPrefix $rule.DestinationAddressPrefix `
         -DestinationPortRange $rule.DestinationPortRange `
         -Description $rule.Description
    
     $nsg | Set-AzNetworkSecurityGroup
    
     }
    
  • 测试结果:

  • 我们无法在Azure中更新NSG规则,但需要修改本地PowerShell脚本,然后将更改推送到Azure,请参阅

  • 要在规则名称列表中循环以更新每个IP列表,可以这样做

     $ips = @("10.1.1.2", "10.1.1.3", "192.168.0.0/16")
     $nsgName = "ubun-a-nsg"
     $resourceGroupName = "nancy"
     $rule_names = @("NRMS-Rule-103","NRMS-Rule-104","NRMS-Rule-105")
    
     foreach($rule_name in $rule_names)
     {
    
     $nsg = Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $resourceGroupName
     $rule= $nsg | Get-AzNetworkSecurityRuleConfig -Name $rule_name  
    
     Set-AzNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg `
         -Name $rule_name `
         -Access $rule.Access `
         -Protocol $rule.Protocol `
         -Direction $rule.Direction `
         -Priority $rule.Priority `
         -SourceAddressPrefix $ips `
         -SourcePortRange $rule.SourcePortRange `
         -DestinationAddressPrefix $rule.DestinationAddressPrefix `
         -DestinationPortRange $rule.DestinationPortRange `
         -Description $rule.Description
    
     $nsg | Set-AzNetworkSecurityGroup
    
     }
    
  • 测试结果:


    是的,工作正常!测试时我遇到的唯一问题是,在包含参数[-Description$rule.Description]时,它返回了一个错误:“无法验证参数'Description'上的参数。该参数为null或空。请提供一个非null或空的参数,然后重试该命令。”但是如果我将该行注释掉,则一切正常。是的,工作正常!测试时我遇到的唯一问题是,在包含参数[-Description$rule.Description]时,它返回了一个错误:“无法验证参数‘Description’上的参数。该参数为null或空。请提供一个非null或空的参数,然后重试该命令。”但如果我注释掉该行,则一切正常。