0

Я пытаюсь прочитать существующие правила в группе сетевой безопасности в режиме ARM, но, как ни странно, свойство SourceAddressPrefix, содержащее информацию о белом диапазоне IP, сообщает в виде логического значения (например, «True» или «True», False ") в строковой форме.SourceAddressПреимущество существующих правил группы безопасности сети ARM является логическим?

Я попытался извлекая группу с помощью Get-AzureRmNetworkSecurityGroup и читает ::SecurityRules собственности и также пытался $nsg | Get-AzureRmNetworkSecurityRuleConfig, а также $nsg | Get-AzureRmNetworkSecurityRuleConfig -Name MyRule. В каждом случае возвращаемые правила SourceAddressPrefix являются либо «True», либо «False».

Без этого значения я не могу определить, существует ли уже существующее правило для IP-адреса, который я проверяю. Система позволяет мне устанавливать несколько правил с теми же подробностями, пока имя и приоритет разные, поэтому я создаю дубликаты.

Я предполагаю, что это своего рода функция безопасности? Есть ли способ получить фактические диапазоны IP CIDR, отображаемые на портале?

EDIT - В связи с этим приходит и уходит, я отправляю полный код

Код выхватывает IP-адрес, назначенный для всех сетевых карт в $proxyResGrp и пытается их в белом список групп происхождения ресурсов для порт 80 и 443.

proxyResGrp = "arr" 
originResGrps = "int", "uat", "auth", "live" 

elect-AzureRmSubscription -SubscriptionID $subscriptionId -ErrorAction SilentlyContinue -ErrorVariable err | Out-Null 
f ($err) { 
    Login-AzureRmAccount 
    Select-AzureRmSubscription -SubscriptionID $subscriptionId -ErrorAction Stop | Out-Null 



get the source IPs for the arr 
proxyIPs = Get-AzureRmNetworkInterface -ResourceGroupName $proxyResGrp | % { 
       $_.IpConfigurations | % { 
        if ($_.PublicIpAddress.Id -like '*Microsoft.Network/publicIPAddresses*') 
        { 
         $ipAddress = Get-AzureRmResource -ResourceId ($_.PublicIpAddress.Id) 
         $ip = Get-AzureRmPublicIpAddress -ResourceGroupName $ipAddress.ResourceGroupName -Name $ipAddress.Name 
         return @{ IPAddress = $ip.IpAddress; Name = $_.Name } 
        } 
       } 
      } 

get NSG for each source resourceGroup and add the inbound rules 
originResGrps | % { 
    $originResGrp = $_ 
    Get-AzureRmNetworkSecurityGroup -ResourceGroupName $originResGrp | % { 
     # have to re-get the NSG for some reason 
     $nsg = $_ 

     $nsg.SecurityRules | ? { $_.SourceAddressPrefix = $arrIP.IPAddress -and $_.DestinationPortRange -eq "80" } 
     $rules = $nsg.SecurityRules 

     $maxPriority = $rules | Sort Priority -Descending | select Priority -First 1 | % { $_.Priority } 

     $isChanged = $false 
     foreach ($proxyIP in $proxyIPs) 
     { 
      # HTTP 
      # $rule = $rules | ? { $_.Name -eq "HTTP-$($arrIP.Name.ToUpper())" } 
      $rule = $rules | ? { $_.SourceAddressPrefix -eq $proxyIP.IPAddress -and $_.DestinationPortRange -eq "80" } 
      if (! $rule) 
      { 
       $maxPriority += 100 
       Write-Host "Creating a rule for HTTP-$($proxyIP.Name.ToUpper()) in nsg '$($nsg.Name)'" -ForegroundColor DarkGreen 

       # have to re-get the NSG for some reason 
       #Get-AzureRmNetworkSecurityGroup -ResourceGroupName $originResGrp -Name $nsg.Name | 
       $nsg | 
        Add-AzureRmNetworkSecurityRuleConfig ` 
          -Name "HTTP-$($proxyIP.Name.ToUpper())" ` 
          -Protocol Tcp ` 
          -SourceAddressPrefix $proxyIP.IPAddress ` 
          -SourcePortRange "*" ` 
          -DestinationAddressPrefix "*" ` 
          -DestinationPortRange "80" ` 
          -Access Allow ` 
          -Direction Inbound ` 
          -Priority $maxPriority 
       # Set-AzureRmNetworkSecurityGroup | 
       # Out-Null 
       $isChanged = $true 
      } 
      else 
      { 
       Write-Host "Rule for HTTP-$($proxyIP.Name.ToUpper()) already exists in nsg '$($nsg.Name)'" -ForegroundColor DarkYellow 
      } 

      # HTTPS 
      # $rule = $rules | ? { $_.Name -eq "HTTPS-$($arrIP.Name.ToUpper())" } 
      $rule = $rules | ? { $_.SourceAddressPrefix -eq $proxyIP.IPAddress -and $_.DestinationPortRange -eq "443" } 
      if (! $rule) 
      { 
       $maxPriority += 100 
       Write-Host "Creating a rule for HTTPS-$($proxyIP.Name.ToUpper()) in nsg '$($nsg.Name)'" -ForegroundColor DarkGreen 

       # have to re-get the NSG for some reason 
       #Get-AzureRmNetworkSecurityGroup -ResourceGroupName $originResGrp -Name $nsg.Name | 
       $nsg | 
        Add-AzureRmNetworkSecurityRuleConfig ` 
          -Name "HTTPS-$($proxyIP.Name.ToUpper())" ` 
          -Protocol Tcp ` 
          -SourceAddressPrefix $proxyIP.IPAddress ` 
          -SourcePortRange "*" ` 
          -DestinationAddressPrefix "*" ` 
          -DestinationPortRange "443" ` 
          -Access Allow ` 
          -Direction Inbound ` 
          -Priority $maxPriority 
       # Set-AzureRmNetworkSecurityGroup | 
       # Out-Null 
       $isChanged = $true 
      } 
      else 
      { 
       Write-Host "Rule for HTTPS-$($proxyIP.Name.ToUppeR()) already exists in nsg '$($proxyIP.Name)'" -ForegroundColor DarkYellow 
      } 
     } 

     if ($isChanged) 
     { 
      Write-Host "Updating $($nsg.Name)" -ForegroundColor Green 
      $nsg | Set-AzureRmNetworkSecurityGroup 
     } 

    } 

ответ

0

Так что это работает для меня:

$a = Get-AzureRmNetworkSecurityGroup -Name $NSG_Name -ResourceGroupName $RG_Name 
PS C:\WINDOWS\system32> $a.SecurityRules[1].sourceaddressprefix 
10.0.0.0/23 
PS C:\WINDOWS\system32> $a.SecurityRules[0].sourceaddressprefix 
* 

Я предлагаю вам обновите модули PowerShell.

+0

Интересно, что это сработало и для меня, и после этого начал работать старый код (возвращающий True/False). #smh –

+0

Я честно понятия не имею, что происходит сейчас. Я зацикливал этот код как минимум на 2 часа, пытаясь понять, что я делаю неправильно. Теперь он всегда возвращается правильно. Имейте карму, но я думаю, что это была временная проблема на стороне Лазури. Мой AzureRm.Network модуль v3.0.0 –

+0

ну, не знаю, рад, что вы разобрали это. – 4c74356b41

Смежные вопросы