如何获取应用程序安全组/资源组的NIC详细信息

时间:2019-01-15 16:04:52

标签: azure powershell azure-resource-group

我正在寻找一个PowerShell命令,该命令用于列出网络接口卡及其关联的应用程序安全组/资源组之间的关系。我使用以下命令,它仅显示VMName,IPAddress。无法显示“应用程序安全组”。

我已经使用-ExpandProperty ApplicationSecurityGroups,但仍然无法使用。

$nics =Get-AzureRmNetworkInterface -ResourceGroupName "My-RG" 

foreach($nic in $nics)
{
    $vm = $vms | where-object -Property Id -EQ $nic.VirtualMachine.id
    $Name = $nic.Name
    $prv =  $nic.IpConfigurations | select-object -ExpandProperty PrivateIpAddress
    $alloc =  $nic.IpConfigurations | select-object -ExpandProperty PrivateIpAllocationMethod
    $asc =  $nic.IpConfigurations | select-object -ExpandProperty ApplicationSecurityGroups
    Write-Output "$Name, $prv , $asc"
}

2 个答案:

答案 0 :(得分:0)

我刚刚测试了您的命令,并且可以从配置有ASG的计算机上成功获取应用程序安全组。但是,只有将VM放在ASG中才有效,ASG可以在子网内提供微分段,因此您可以将应用程序服务器,数据库等分组在一起,然后将NSG规则应用于组而不是单个服务器

如果相反,您想知道VM所在的NSG,则需要使用其他命令。 NSG是连接到VM或NIC并充当防火墙的资源。如果需要,则需要运行:

$nsg =  $nic | select-object -ExpandProperty NetworkSecurityGroup

但是,这只会使您将NSG应用于VM,您也可以将其应用于VM级别,因此最好运行以下命令:

$effectiveRules=Get-AzureRmEffectiveNetworkSecurityGroup -NetworkInterfaceName <nicName> -ResourceGroupName <resourceGroup>
$effectiveRules.NetworSecurityGroup

这将列出在NIC或子网级别应用的所有NSG。

答案 1 :(得分:0)

问题是,您只能从IpConfigurationsText属性获取ASG信息作为字符串,因此您需要将查询更新为:

$nics = Get-AzureRmNetworkInterface -ResourceGroupName "My-RG"

foreach($nic in $nics)
{
    $GetAzureNIC = Get-AzureRmNetworkInterface -ResourceGroupName "My-RG" -Name $nic.Name
    $Name = $nic.Name
    $prv =  $nic.IpConfigurations.PrivateIpAddress
    $alloc =  $nic.IpConfigurations.PrivateIpAllocationMethod
    $asgResourceID = ($GetAzureNIC.IpConfigurationsText | ConvertFrom-Json).ApplicationSecurityGroups.Id
    $asgName = (Get-AzureRmResource -ResourceId $asgResourceID).Name
    Write-Output "$Name, $prv, $alloc, $asgName, $asgResourceID"
}

编辑:我注意到您还希望获得分配方法,但不要在Write-Output中使用它,而是更新查询以包括ASG名称和ASG资源ID,请选择所需的任何一种。