使用Powershell进行NSG规则配置–导入ASG时遇到问题

时间:2019-05-30 06:58:28

标签: azure azure-powershell

我正在处理或编写Powershell脚本来配置NSG规则。大多数规则都包含IP地址作为源,但是其他一些源则由ASG定义。如果源是IP地址,我的脚本可以正常运行,但是如果源是ASG,则脚本会抛出错误。

错误消息如下。

  

Add-AzureRmNetworkSecurityRuleConfig:无法绑定参数   “ SourceApplicationSecurityGroup”。无法转换“ xxxx-fw-asg”   要键入的类型“ System.String”的值   “ Microsoft.Azure.Commands.Network.Models.PSApplicationSecurityGroup”。

根据错误消息,脚本期望ASG处于某种数据类型,而实际上它是一个字符串。 我找不到将此字符串转换为Powershell期望的类型的方法。 感谢转换数据类型的任何帮助(或通过其他任何方式解决此问题)。

$nsgCsv = Import-Csv .\NSG-rule-list.csv

foreach ($rule in $nsgCsv) {
    if ($rule.SourceAddressPrefix) {            
        Get-AzureRmNetworkSecurityGroup -Name  $rule.NSG -ResourceGroupName $rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig `
            -Name $rule.ruleName `
            -Description $rule.Description `
            -Access $rule.Access `
            -Protocol $rule.Protocol `
            -Direction $rule.Direction `
            -priority $rule.Priority `
            -SourceAddressPrefix ($rule.SourceAddressPrefix -split ',') `
            -SourcePortRange * `
            -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') `
            -DestinationPortRange ($rule.DestinationPortRange -split ',') `
        | Set-AzureRmNetworkSecurityGroup           
    }
    else {            
        Get-AzureRmNetworkSecurityGroup -Name  $rule.NSG -ResourceGroupName $rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig `
            -Name $rule.ruleName `
            -Description $rule.Description `
            -Access $rule.Access `
            -Protocol $rule.Protocol `
            -Direction $rule.Direction `
            -priority $rule.Priority `
            -SourceApplicationSecurityGroup  $rule.sourceASG `
            -SourcePortRange * `
            -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') `
            -DestinationPortRange ($rule.DestinationPortRange -split ',') `
        | Set-AzureRmNetworkSecurityGroup         
    }
}

以下是CSV内容

resourceGroup,NSG,ruleName,Description,Protocol,SourcePortRange,DestinationPortRange,SourceAddressPrefix,sourceASG,DestinationAddressPrefix,DestinationASG,Access,Priority,Direction
poc-network-rg,poc-dmz-nsg,Test7,test rule 7,TCP,*,443,,tes-fw-asg,192.168.0.0/24,NA,Allow,609,inbound

1 个答案:

答案 0 :(得分:0)

对于-SourceApplicationSecurityGroup,您需要获取ASG并在此处引用它。

示例:

$ srcAsg = New-AzureRmApplicationSecurityGroup -ResourceGroupName MyResourceGroup -Name srcAsg-位置“美国西部”

{
        Get-AzureRmNetworkSecurityGroup-名称$ rule.NSG -ResourceGroupName $ rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig -Name $rule.ruleName             -说明$ rule。说明 -Access $rule.Access             -协议$ rule。协议 -Direction $rule.Direction             -priority $ rule.Priority -SourceApplicationSecurityGroup $srcAsg             -SourcePortRange * -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',')             -DestinationPortRange($ rule.DestinationPortRange -split',')`         | Set-AzureRmNetworkSecurityGroup
    }