DeveloZombie

Quemadas de un programador para muertos vivientes

Cómo crear reglas de comunicación entre Azure subnets bajo el modelo de 4 capas usando PowerShell

Queridos muertos vivientes, si lo que necesitas es proteger tu red y aplicar las mejores prác

Queridos muertos vivientes, si lo que necesitas es proteger tu red y aplicar las mejores prácticas para ganar mayor control y menos dolores de cabeza, usualmente pensamos en algo así:

Sin embargo, lograrlo es distinto a pensarlo :) es por eso que les traigo este script para asegurar tu entorno sin morir en el intento, no olvides completar las variables.

nsgazure.ps1

##################################################################################################################
# REGISTRAR LOS PARAMETROS CORRECTOS
##################################################################################################################
$NombreVNET = "VNETEU2DEMO01" #NOMBRE DE VNET
$ResourceGroup = "RGName" #NOMBRE DE GRUPO DE RECURSOS DE VNET
$Location = "eastus2" #CODIGO DE REGION
$FrontEndName = "EU2DESAFrontEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$FrontEndSubnet = "10.0.0.0/24" #SEGMENTO DE RED DE FrontEnd
$BackEndName = "EU2DESABackEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$BackEndSubnet = "10.1.0.0/24" #SEGMENTO DE RED DE BackEnd
$DataEndName = "EU2DESADataEnd02" #NOMENCLATURA SIN INCLUIR TIPO DE RECURSO
$DataEndSubnet = "10.2.0.0/24" #SEGMENTO DE RED DE DataEnd
$ADMSubnet = "10.3.0.0/24" #SEGMENTO DE RED DE ADMINISTRACION
##################################################################################################################
# RED DataEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_BackEnd_ALLOW -Description "RULE_IN_BackEnd_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix $BackEndSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$DataEndName" `
    -SecurityRules $rule1,$rule2,$rule3,$rule4
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$DataEndName" `
    -AddressPrefix $DataEndSubnet -NetworkSecurityGroup $nsg
##################################################################################################################
# RED BackEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_FrontEnd_ALLOW -Description "RULE_IN_FrontEnd_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix $FrontEndSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_DataEnd_ALLOW -Description "RULE_OUT_DataEnd_ALLOW" `
    -Access Deny -Protocol * -Direction Outbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix $DataEndSubnet -DestinationPortRange *
$rule5 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$BackEndName" `
    -SecurityRules $rule1,$rule2,$rule3,$rule4,$rule5
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$BackEndName" `
    -AddressPrefix $BackEndSubnet -NetworkSecurityGroup $nsg
##################################################################################################################
# RED FrontEnd
##################################################################################################################
##################################################################################################################
# INBOUND
##################################################################################################################
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_HTTP_ALLOW -Description "RULE_IN_HTTP_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange 80 `
    -DestinationAddressPrefix * -DestinationPortRange 80
$rule1A = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_HTTPS_ALLOW -Description "RULE_IN_HTTPS_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 110 `
    -SourceAddressPrefix * -SourcePortRange 443 `
    -DestinationAddressPrefix * -DestinationPortRange 443
$rule2 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ADM_ALLOW -Description "RULE_IN_ADM_ALLOW" `
    -Access Allow -Protocol * -Direction Inbound -Priority 120 `
    -SourceAddressPrefix $ADMSubnet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
$rule3 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_IN_ALL_DENY -Description "RULE_IN_ALL_DENY" `
    -Access Deny -Protocol * -Direction Inbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# OUTBOUND
##################################################################################################################
$rule4 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_DataEnd_ALLOW -Description "RULE_OUT_BackEnd_ALLOW" `
    -Access Deny -Protocol * -Direction Outbound -Priority 100 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix $BackEndSubnet -DestinationPortRange *
$rule5 = New-AzureRmNetworkSecurityRuleConfig -Name RULE_OUT_ALL_DENY -Description "RULE_OUT_ALL_DENY" `
    -Access Deny -Protocol * -Direction Outbound -Priority 3000 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange *
##################################################################################################################
# CREAR NSG
##################################################################################################################
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name "NSG$FrontEndName" `
    -SecurityRules $rule1,$rule1A,$rule2,$rule3,$rule4,$rule5
##################################################################################################################
# ASOCIAR NSG A SUBNET
##################################################################################################################
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroup -Name $NombreVNET
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name "SNET$FrontEndName" `
    -AddressPrefix $FrontEndSubnet -NetworkSecurityGroup $nsg

##################################################################################################################
# GUARDANDO CAMBIOS                                                                                             #
##################################################################################################################
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
##################################################################################################################
# FIN DE SCRIPT                                                                                                  #
##################################################################################################################