Compartir a través de


Automatización de la auditoría de NSG con la vista de grupo de seguridad de Azure Network Watcher

Nota:

La API de vista de grupo de seguridad ya no se mantiene y quedará en desuso pronto. Use la característica Reglas de seguridad vigentes, que proporciona la misma funcionalidad.

Los clientes a menudo se enfrentan al desafío de comprobar la posición de seguridad de su infraestructura. Este desafío es similar para sus máquinas virtuales en Azure. Es importante tener un perfil de seguridad similar basado en las reglas del grupo de seguridad de red (NSG) aplicadas. Mediante la vista de grupo de seguridad, ahora puede obtener la lista de reglas que se aplican a una máquina virtual dentro de un NSG. Puede definir un perfil de seguridad principal del NSG e iniciar la vista del grupo de seguridad con un ritmo semanal, comparar el resultado con el perfil principal y crear un informe. De este modo, puede identificar con facilidad todas las máquinas virtuales que no cumplen con el perfil de seguridad recomendado.

Para más información acerca de los grupos de seguridad de red, consulte Filtrado del tráfico de red con grupos de seguridad de red.

Requisitos previos

Escenario

En este escenario, se compara una línea base buena conocida con los resultados de la vista de grupo de seguridad devueltos para una máquina virtual.

En este escenario:

  • Recuperar un conjunto de buenas reglas conocidas
  • Recuperar una máquina virtual con una API de REST
  • Obtención de la vista de grupos de seguridad para una máquina virtual
  • Evaluar la respuesta

Recuperación del conjunto de reglas

El primer paso en este ejemplo es trabajar con una línea base existente. El ejemplo siguiente es un json extraído de un grupo de seguridad de red existente mediante el cmdlet Get-AzNetworkSecurityGroup que se utiliza como línea de base para este ejemplo.

[
    {
        "Description":  null,
        "Protocol":  "TCP",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "3389",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1000,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "default-allow-rdp",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/default-allow-rdp"
    },
    {
        "Description":  null,
        "Protocol":  "*",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "111",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1010,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "MyRuleDoNotDelete",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/MyRuleDoNotDelete"
    },
    {
        "Description":  null,
        "Protocol":  "*",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "112",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1020,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "My2ndRuleDoNotDelete",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/My2ndRuleDoNotDelete"
    },
    {
        "Description":  null,
        "Protocol":  "TCP",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "5672",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Deny",
        "Priority":  1030,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "ThisRuleNeedsToStay",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/ThisRuleNeedsToStay"
    }
]

Conversión de los conjuntos de reglas en objetos de PowerShell

En este paso, leemos un archivo JSON que se creó anteriormente con las reglas que se espera que estén en el grupo de seguridad de red para este ejemplo.

$nsgbaserules = Get-Content -Path C:\temp\testvm1-nsg.json | ConvertFrom-Json

Recuperación de Network Watcher

El siguiente paso es recuperar la instancia de Network Watcher. La variable $networkWatcher se pasa al cmdlet AzNetworkWatcherSecurityGroupView.

$networkWatcher = Get-AzResource | Where {$_.ResourceType -eq "Microsoft.Network/networkWatchers" -and $_.Location -eq "WestCentralUS" } 

Recuperación de la configuración de máquina virtual

Se necesita una máquina virtual para ejecutar el cmdlet Get-AzNetworkWatcherSecurityGroupView. En el ejemplo siguiente se obtiene un objeto de máquina virtual.

$VM = Get-AzVM -ResourceGroupName "testrg" -Name "testvm1"

Recuperación de la vista de grupos de seguridad

El siguiente paso es recuperar el resultado de la vista de grupos de seguridad. Este resultado se compara con el json de "línea base" que se mostró anteriormente.

$secgroup = Get-AzNetworkWatcherSecurityGroupView -NetworkWatcher $networkWatcher -TargetVirtualMachineId $VM.Id

Análisis de los resultados

La respuesta se agrupa por interfaces de red. Los diferentes tipos de reglas devueltas son reglas de seguridad efectivas y predeterminadas. El resultado se desglosa más por la forma en la que se aplica, bien en una subred o en una NIC virtual.

El siguiente script de PowerShell compara los resultados de la vista de grupo de seguridad con una salida existente de un NSG. El siguiente es un ejemplo sencillo de cómo se puedan comparar los resultados con el cmdlet Compare-Object.

Compare-Object -ReferenceObject $nsgbaserules `
-DifferenceObject $secgroup.NetworkInterfaces[0].NetworkInterfaceSecurityRules `
-Property Name,Description,Protocol,SourcePortRange,DestinationPortRange,SourceAddressPrefix,DestinationAddressPrefix,Access,Priority,Direction

El ejemplo siguiente es el resultado. Puede ver que dos de las reglas que estaban en el primer conjunto de reglas no estaban presentes en la comparación.

Name                     : My2ndRuleDoNotDelete
Description              : 
Protocol                 : *
SourcePortRange          : *
DestinationPortRange     : 112
SourceAddressPrefix      : *
DestinationAddressPrefix : *
Access                   : Allow
Priority                 : 1020
Direction                : Inbound
SideIndicator            : <=

Name                     : ThisRuleNeedsToStay
Description              : 
Protocol                 : TCP
SourcePortRange          : *
DestinationPortRange     : 5672
SourceAddressPrefix      : *
DestinationAddressPrefix : *
Access                   : Deny
Priority                 : 1030
Direction                : Inbound
SideIndicator            : <=

Pasos siguientes

Consulte Creación, modificación o eliminación de un grupo de seguridad de red para realizar un seguimiento del grupo de seguridad de red y las reglas de seguridad que pueden estar afectados.