Настройка правил NSG с использованием powershell - возникли проблемы с импортом ASG - PullRequest
0 голосов
/ 30 мая 2019

Я нахожусь в процессе или пишу сценарий 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 голосов
/ 30 мая 2019

Для группы -SourceApplicationSecurityGroup вам необходимо получить ASG и сослаться на нее здесь.

Пример:

$ srcAsg = New-AzureRmApplicationSecurityGroup -ResourceGroupName MyResourceGroup -Name srcAsg -Location "Запад США"

{
Get-AzureRmNetworkSecurityGroupGroup.NSG -ResourceGroupName $ rule.resourceGroup |Add-AzureRmNetworkSecurityRuleConfig -Name $rule.ruleName -Описание $ rule.Description -Access $rule.Access -Protocol $ rule.Protocol -Direction $rule.Direction -priority $ rule.Priority -SourceApplicationSecurityGroup $srcAsg -SourcePortRange * -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') -DestinationPortRange ($ rule.DestinationPortRange -spange-$') `|Set-AzureRmNetworkSecurityGroup
}

...