cli(bash)

Deploy Palo Alto HA Azure CLI (bash) Template ARM

Neste post iremos fazer o deploy de Palo Alto (Version 9) em HA “session synchronization”, utilizando um template modificado (adequado as minhas preferencias para este artigo de exemplo).
Nesta topologia/arquitetura de rede colocamos o Palo Alto para ser a rota default de todas as nossas vnets que estão no azure (neste exemplo somente “Trust”, mas nada impede de colocar varias redes com “Peering”) com isso toda entrada ou saida de dados passa obrigatóriamente pelo Palo Alto, essa arquitetura não esta certa nem errada, ai vai do compliance de cada empresa, time de segurança, time de rede e claro do orçamento de cada um. Mas isso não siginifica que penso como ambiente OnPremises somente, que não penso em nuvem, isso é somente uma arquitetura/topologia que muitas empresas que estão em Cloud (Azure,AWS,GCP) utilizam.

Agora vamos colocar a mão na massa.

Nos teremos os seguintes componentes:

2x VMs (PAN OS) Standard D3 v2 – Availability zone 1
8x Interfaces de rede (4 para cada VM) denomindas eth0/1/2/3, eth0=interface management, eth1=interface UnTrust, eth2= Interface Trust e eth3=interface HA
1x Vnet com CIDR 10.110.0.0/22 (aqui vai da sua rede e crescimento previsto)
1x Network Security Group (anexado a snet mgmt)
2x IPs Publicos (uma para cada VM anexado a eth1 para gerencia), este depende do seu acesso a rede.
3x IPs Publicos, 1 para NAT OUTBOUND, 1 para NAT INBOUND AppGW e 1 para NAT INBOUND JUMP
2x Discos HDD (um para cada VM)

Vamos as nomenclaturas, utilizei a recomendada pela MS Azure link
vmfwedge01
vmfwedge02
pip-vmfwedge001-shared-brazilsouth-mgmt
pip-vmfwedge002-shared-brazilsouth-mgmt
pip-fw-edge-shared-brazilsouth-wan-01
pip-fw-edge-shared-brazilsouth-wan-02
pip-fw-edge-shared-brazilsouth-wan-03
nsg-fw-edge-shared-brazilsouth
nic-fw-edge-vmfwedge001-shared-brazilsouth-eth0
nic-fw-edge-vmfwedge001-shared-brazilsouth-eth1
nic-fw-edge-vmfwedge001-shared-brazilsouth-eth2
nic-fw-edge-vmfwedge001-shared-brazilsouth-eth3
nic-fw-edge-vmfwedge002-shared-brazilsouth-eth0
nic-fw-edge-vmfwedge002-shared-brazilsouth-eth1
nic-fw-edge-vmfwedge002-shared-brazilsouth-eth2
nic-fw-edge-vmfwedge002-shared-brazilsouth-eth3
vmfwedge001_OsDisk_1_xxxxx
vmfwedge002_OsDisk_1_xxxxx
vnet-fw-edge-shared-brazilsouth

Aqui os links para baixar os templates utlizados neste artigo

No arquivo acima teremos uma template.json e dois parameters.jons

No arquivo “parametersFile.json” nos temos todas as referencias para criação da VM, Vnet, RG, etc….
vamos a uma preve explicação sobre o template

Linha 9: IP para liberação de acesso a snet de mgmt (para liberar somente seu bloco coloque neste formato XXX.XXX.XXX.XXX/XX), para liberar tudo colocar 0.0.0.0/0, mas cuidado, isso libera acesso total a interface mgmt do palo alto, não recomendo deixar “any”.
Linha 12: nome do NSG a ser utilizado na snet de mgmt, item obrigatório
Linha 15: Não precisa alterar
Linha 18: Nome da VM (Virtual machine) pode usar a sua escolha, recomendo se alterar esse nome, para alterar os nomes das interfaces de rede para ficar tudo no mesmo padrão.
Linha 21: ultima versão do palo alto, neste caso a 9
Linha 24: Site da VM, neste exemplo “Standard_D3_v2”, pois não iremos precisar de mais que 4 interfaces de rede
Linha 27:: Nome da Vnet a ser criada para utilização no Palo Alto
Linha 33: CIDR da rede neste exemplo “10.110.0.0/22”
Linha 36: nome do Resource Group, neste exemplo “rg-fw-edge-shared-brazilsouth”, pode ser alterado, porém será necessário alterar no script bash abaixo
Linha 39: nome da snet de mgmt snet-fw-edge-shared-brazilsouth-00
Linha 42: nome da snet de UnTrus snet-fw-edge-shared-brazilsouth-01
Linha 45: nome da snet de Trust snet-fw-edge-shared-brazilsouth-02
Linha 48: CIDR snet mgmt 10.110.252.0/25
Linha 51: CIDR snet UnTrust 10.110.252.128/25
Linha 54: CIDR snet Trust 10.110.253.0/25

Agora mais alguns parametros

Linha 57: deixe desta forma, pois iremos utilizar usuário e senha para conectar no Palo Alto
Linha 60: nome do usuário admin, neste exemplo FWSYS (fica a seu critério)
Linha 63: senha, fica a seu critério
Linha 69: nome do resource group a ser utilizado, neste exemplo “rg-fw-edge-shared-brazilsouth”, ele será criado pelo script logo abaixo.
Linha 75: IP Publico da Interface de MGMT, neste exemplo “pip-vmfwedge001-shared-brazilsouth-mgmt”, será criado pelo script logo abaixo, se alterar o nome será necessário alterar no script bash.
Linha 78: Static para utilizar IP fixo
Linha 83: muito importante, neste linha difinimos o “Availability zone”, neste exemplo “1”
As demais linha não precisam se preocupar.

Agora vamos para o arquivos “parametersFiles2.json”

Basicamente deve ser alterado as linhas
Linha 18: nome da vm neste exemplo “vmfwedge02”

Linha 75: nome do IP publico da interface de MGMT neste exemplo “pip-vmfwedge002-shared-brazilsouth-mgmt”

Pronto agora vamos ao deploy via bash (CLI Azure)

Será necessário deixar os arquivos dentro de uma mesma pasta/local

########Declarando variaveis

##Declarando Variaveis (Obrigatório)

###Declarando Variaveis Subscriptions (Nome da sua Subscription Azure)
export Subscription_Name="Santana Corp"

###Variaveis da VM (nomes das VM, igual do template)
export VM_Name_01='vmfwedge001'
export VM_Name_02='vmfwedge002'

###Declarando Variaveis Resource Groups
export RG="rg"
export Name_01="fw-edge"
export Environment="shared"
export Number="0"
export Location_00="brazilsouth"
export RG_Name_FULL_01="${RG}"-"${Name_01}"-"${Environment}"-"${Location_00}"

###Declarando Variaveis Região
export Location="brazilsouth"

###Declarando Variaveis de Rede (Vnet) (Igual do template)
export Vnet="vnet"
export Vnet_Name_FULL="${Vnet}"-"${Name_01}"-"${Environment}"-"${Location}"
export CIDR_01="10.110.252.0/22"
export Subnet_Name_00="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"0
export Subnet_Name_01="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"1
export Subnet_Name_02="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"2
export Subnet_Name_03="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"3
export Subnet_Name_04="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"4
export Subnet_Name_05="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"5
export Subnet_Name_06="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"6
export Subnet_Name_07="snet"-"${Name_01}"-"${Environment}"-"${Location}"-"${Number}"7
export prefix_00="10.110.252.0/25"
export prefix_01="10.110.252.128/25"
export prefix_02="10.110.253.0/25"
export prefix_03="10.110.253.128/25"
export prefix_04="10.110.254.0/25"
export prefix_05="10.110.254.128/25"
export prefix_06="10.110.255.0/25"
export prefix_07="10.110.255.128/25"

###Declarando variaveis da interfaces network
export Interface_NIC='nic'
export Interface_Name="${Name_01}"
export Interface_Environment="${Environment}"
export Interface_Location="${Location_00}"
export Interface_ETH='eth'
export Interface_00='0'
export Interface_01='1'
export Interface_02='2'
export Interface_03='3'
export Interface_04='4'
export Interface_05='5'
export Interface_06='6'
export Interface_07='7'
export Interface_Name_Full_00="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_00}"
export Interface_Name_Full_01="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_01}"
export Interface_Name_Full_02="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_02}"
export Interface_Name_Full_03="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_03}"
export Interface_Name_Full_04="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_04}"
export Interface_Name_Full_05="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_05}"
export Interface_Name_Full_06="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_06}"
export Interface_Name_Full_07="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_01}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_07}"

#### VM02
export Interface_Name_Full_13="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_00}"
export Interface_Name_Full_14="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_01}"
export Interface_Name_Full_15="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_02}"
export Interface_Name_Full_08="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_03}"
export Interface_Name_Full_09="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_04}"
export Interface_Name_Full_10="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_05}"
export Interface_Name_Full_11="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_06}"
export Interface_Name_Full_12="${Interface_NIC}"-"${Interface_Name}"-"${VM_Name_02}"-"${Interface_Environment}"-"${Interface_Location}"-"${Interface_ETH}""${Interface_07}"

###Variaveis de IPs Publicos
export IP_01="pip"
export ZONE="1"
export IP_02="mgmt"
export SKU="Standard"
export Number_01="01"
export Number_02="02"
export Number_03="03"
export IP_03="wan"
export Name_Object01="fw-edge"

###Variaveis da ifconfig eth
export IFCONFIG_Name="ipconfig"
export IFCONFIG_Number01="1"
export IFCONFIG_Number02="2"
export IFCONFIG_Number03="3"
export IFCONFIG_Number04="4"

###Variaveis interface de rede
export INT_01="nic"
export INT_02="${Name_01}"
export INT_03="${VM_Name_01}"
export INT_11="${VM_Name_02}"
export INT_04="${Environment}"
export INT_05="${Location_00}"
export INT_06="eth"
export INT_07="0"
export INT_08="1"
export INT_09="2"
export INT_10="3"
export INT_Name_01="${INT_01}"-"${INT_02}"-"${INT_03}"-"${INT_04}"-"${INT_05}"-"${INT_06}""${INT_08}"
export INT_Name_02="${INT_01}"-"${INT_02}"-"${INT_03}"-"${INT_04}"-"${INT_05}"-"${INT_06}""${INT_09}"
export INT_Name_03="${INT_01}"-"${INT_02}"-"${INT_03}"-"${INT_04}"-"${INT_05}"-"${INT_06}""${INT_07}"
export INT_Name_04="${INT_01}"-"${INT_02}"-"${INT_11}"-"${INT_04}"-"${INT_05}"-"${INT_06}""${INT_07}"


###Declarando Variaveis Tags
export Description="Departamento"
export Value_Description="Redes/Telecom/Segurança/Infraestrutura"
export Cost_Center="Centro de Custo"
export Cost_Center_Value="Redes/Telecom/Segurança/Infraestrutura"
export Support_Description_Description="E-mail Suporte"
export Support_Description_Value="[email protected]"

####Selecionar subscription
az account set --subscription "${Subscription_Name}"

####Criando Resource Group Firewall EDGE Shared
az group create -n "${RG_Name_FULL_01}" -l "${Location}" --tags "${Description}"="${Value_Description}" "${Cost_Center}"="${Cost_Center_Value}" "${Support_Description_Description}"="${Support_Description_Value}"

###Create IPs Publicos
az network public-ip create -g "${RG_Name_FULL_01}" -n "${IP_01}"-"${VM_Name_01}"-"${Environment}"-"${Location_00}"-"${IP_02}" --sku "${SKU}" --zone "${ZONE}"
az network public-ip create -g "${RG_Name_FULL_01}" -n "${IP_01}"-"${VM_Name_02}"-"${Environment}"-"${Location_00}"-"${IP_02}" --sku "${SKU}" --zone "${ZONE}"
az network public-ip create -g "${RG_Name_FULL_01}" -n "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_01}" --sku "${SKU}" --zone "${ZONE}"
az network public-ip create -g "${RG_Name_FULL_01}" -n "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_02}" --sku "${SKU}" --zone "${ZONE}"
az network public-ip create -g "${RG_Name_FULL_01}" -n "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_03}" --sku "${SKU}" --zone "${ZONE}"

####Criando Virtual Network (Vnet)
az network vnet create -g "${RG_Name_FULL_01}" -n "${Vnet_Name_FULL}" --address-prefix "${CIDR_01}" -l $Location --tags "${Description}"="${Value_Description}" "${Cost_Center}"="${Cost_Center_Value}" "${Support_Description_Description}"="${Support_Description_Value}"

####Criando Subnet
az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_00}" --address-prefixes "${prefix_00}"
az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_01}" --address-prefixes "${prefix_01}"
az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_02}" --address-prefixes "${prefix_02}"

####Deploy Palo Alto Template
az deployment group create -g "${RG_Name_FULL_01}" --template-file template.json --parameters @parametersFile.json

###Desalocando a VM (aqui iremos desligar/desalocar a VM)
az vm deallocate -g "${RG_Name_FULL_01}" -n "${VM_Name_01}"

####Criando restantes das Subnets
az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_03}" --address-prefixes "${prefix_03}"
###az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_04}" --address-prefixes "${prefix_04}"
###az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_05}" --address-prefixes "${prefix_05}"
###az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_06}" --address-prefixes "${prefix_06}"
###az network vnet subnet create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}" -n "${Subnet_Name_07}" --address-prefixes "${prefix_07}"

####Criando interfaces de rede v2 (interface de rede HA eth3)
az network nic create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}"  --subnet "${Subnet_Name_03}" -n 

#### Adicionando interfaces Network
az vm nic add --nics "${Interface_Name_Full_03}" -g "${RG_Name_FULL_01}" --vm-name "${VM_Name_01}"

###Iniciando a VM01
az vm start -g "${RG_Name_FULL_01}" -n "${VM_Name_01}"

###################
####Deploy Palo Alto Template segunda VM02
az deployment group create -g "${RG_Name_FULL_01}" --template-file template.json --parameters @parametersFile2.json

###Desalocando a VM02
az vm deallocate -g "${RG_Name_FULL_01}" -n "${VM_Name_02}"

####Criando interfaces de rede v2 (VM02)
az network nic create -g "${RG_Name_FULL_01}" --vnet-name "${Vnet_Name_FULL}"  --subnet "${Subnet_Name_03}" -n "${Interface_Name_Full_08}" --ip-forwarding

#### Adicionando interfaces Network vm2
az vm nic add --nics "${Interface_Name_Full_08}" -g "${RG_Name_FULL_01}" --vm-name "${VM_Name_02}"

###Inciado a VM02
az vm start -g "${RG_Name_FULL_01}" -n "${VM_Name_02}"

###Anexando NSG SNET 00
az network vnet subnet update -g "${RG_Name_FULL_01}" -n "${Subnet_Name_00}" --vnet-name "${Vnet_Name_FULL}" --network-security-group "nsg-fw-edge-shared-brazilsouth"

###Configurando IPs interface eth1
az network nic ip-config create -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --nic-name "${INT_Name_01}" --public-ip-address "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_01}"
az network nic ip-config create -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number03}" --nic-name "${INT_Name_01}" --public-ip-address "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_02}"
az network nic ip-config create -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number04}" --nic-name "${INT_Name_01}" --public-ip-address "${IP_01}"-"${Name_Object01}"-"${Environment}"-"${Location_00}"-"${IP_03}"-"${Number_03}"

##Declaranado Variaveis para Fixar IP (eht1)
NIC_ID001=$(az network nic show --name "${INT_Name_01}" -g "${RG_Name_FULL_01}" --query id --output tsv)

##Declarando varivel para utilizar IP Fixo existente (eht1)
IP_ID001=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --nic-name "${INT_Name_01}" --query privateIpAddress --output tsv)
IP_ID002=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number03}" --nic-name "${INT_Name_01}" --query privateIpAddress --output tsv)
IP_ID003=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number04}" --nic-name "${INT_Name_01}" --query privateIpAddress --output tsv)

###Fixando o IP (eht1)
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --private-ip-address $IP_ID001
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number03}" --private-ip-address $IP_ID002
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number04}" --private-ip-address $IP_ID003

###Configurando IPs interface eth2
az network nic ip-config create -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --nic-name "${INT_Name_02}"

##Declaranado Variaveis para Fixar IP (eht2)
NIC_ID002=$(az network nic show --name "${INT_Name_02}" -g "${RG_Name_FULL_01}" --query id --output tsv)

##Declarando varivel para utilizar IP Fixo existente (eht2)
IP_ID004=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --nic-name "${INT_Name_02}" --query privateIpAddress --output tsv)

###Fixando o IP (eht1)
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_02}" -n "${IFCONFIG_Name}""${IFCONFIG_Number02}" --private-ip-address $IP_ID004

##Declaranado Variaveis para Fixar IP VM01(eht0)
NIC_ID005=$(az network nic show --name "${INT_Name_03}" -g "${RG_Name_FULL_01}" --query id --output tsv)

##Declarando varivel para utilizar IP Fixo existente (eht0)
IP_ID005=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number01}" --nic-name "${INT_Name_03}" --query privateIpAddress --output tsv)

###Fixando o IP (eht0)
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_03}" -n "${IFCONFIG_Name}""${IFCONFIG_Number01}" --private-ip-address $IP_ID005

############
##Declaranado Variaveis para Fixar IP VM02(eht0)
NIC_ID006=$(az network nic show --name "${INT_Name_04}" -g "${RG_Name_FULL_01}" --query id --output tsv)

##Declarando varivel para utilizar IP Fixo existente (eht0)
IP_ID006=$(az network nic ip-config show -g "${RG_Name_FULL_01}" -n "${IFCONFIG_Name}""${IFCONFIG_Number01}" --nic-name "${INT_Name_04}" --query privateIpAddress --output tsv)

###Fixando o IP (eht0)
az network nic ip-config update -g "${RG_Name_FULL_01}" --nic-name "${INT_Name_04}" -n "${IFCONFIG_Name}""${IFCONFIG_Number01}" --private-ip-address $IP_ID006

Agora nos temos nos objetos criados, vamos acessar via IP da interface MGMT do VM01, sempre com https://XXX.XXX.XXX.XXX
A tela inicial apresentada

Agora vamos as configurações para Palo Alto

1-) Interfaces de rede, clique em “Network” depois “Interfaces”

Agora vamos as configurações
Clique em “ethernet1/1” será nossa interface de “UnTrust”

Em interface Type altere para “Layer3”, depois em IPV4 add o IP da interface eth1, neste caso 10.110.252.132, 10.110.252.134,10.110.252.135,10.110.252.136

Clique OK

Agora vamos para “ethernet1/2” nossa interface “Trust”

Mesmo procedimentos, porém com os IPs 10.110.253.4 e 10.110.253.6

Agora iremos na ethernet1/3, nossa interface de HA

Nesta somente deixa o “Interface Type” como “HA” e clique em “OK”

Agora vamos criar nossas “Zonas”

Clique em “Zone” e depois em “add”

Primeira zona “UnTrust”, Type “L3” interface “ethernet1/1”, clique em “ok”

Segunda “zona”

Name: “Trust” Type “Layer3” interfaces “ethernet1/2”, clique em “ok”

Vamos criar nossa VR (Virtual Routers), vá em “Network” depois em “Virtual Routers”

Vamos utilizar a “Default”, clique em “Default”

Route Settings, Interfaces Add

Depois clique em Static Routes, add

Name: UnTrust (Nossa zona não segura “Internet”
Destionation: 0.0.0.0/0 tudo que ele não conhecer irá mandar para esta ROTA
Interface: “ethernet1/1”
Next Hop: IP Address
IP: 10.110.252.129
Agora pórque este IP? Vamos a explicação, a subnet (snet) utilizada nesta interface foi a: “snet-fw-edge-shared-brazilsouth-01” que tem seu CIDR “10.110.252.128/25” ou seja:

Temos o ID da rede 10.110.252.128/25
Inicia em 10.110.252.129 e vai até 10.110.252.254
Brodcast 10.110.252.255
No Azure ele toma para si (se apodera) dos 3 primeiros IPs, neste exemplo:
10.110.252.129
10.110.252.130
10.110.252.131

O IP 10.110.252.132 esta em nossa interface eth1, por isso o gateway neste snet (Subnet) é o primeiro IP da rede neste caso 10.110.252.129, clique em OK

Vamos add nossa rota interna (Nossa rede interna) Neste exemplo, somente iremos add a snet (subnet snet-fw-edge-shared-brazilsouth-02 10.110.253.0/25)

Aqui a lógica para o IP é a mesma

Agora vamos efetivar nossas configurações, clique em “Commit”

Agora veja em “network”

As interfaces estão “up”

Agora vamos as configurações na segunda VM (caixa)

Vamos em “network” e depois em “interfaces”, neste só iremos configurar isso nada mais.

Em “ethernet1/1”

Interface Type: Layer3
IP: 10.110.252.133, seguindo nossa CIDR:
snet-fw-edge-shared-brazilsouth-01 10.110.252.128/25, clique em OK

Em “ethernet1/2”

Interface Type: layer3
IP: 10.110.253.5 seguindo nossa CIDR
snet-fw-edge-shared-brazilsouth-02 10.110.253.0/25

Vamos em “ethernet1/3”

Interface Type: “HA”, clique em ok

Vamos efetivar nossas configurações, clique em “Commit”

Vejam as interfaces “up”

Agora vamos configurar nosso HA, para isso será necessário criar um “Service Principal” (App Registration no Azure)

Segue link de referencia

https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal

Veja o permissionamento que este App teve ter

Referencia

https://docs.paloaltonetworks.com/vm-series/9-0/vm-series-deployment/set-up-the-vm-series-firewall-on-azure/configure-activepassive-ha-for-vm-series-firewall-on-azure.html

Neste exemplo que deixei como “Contributor”

Com nosso AppRegistration criado, vamos add em nossa Palo Alto, VM01
Vamos em “Devices”

VM Series

Azure HA Configuration, clique na roda dentada

Vamos iniciar o preenchimento

Resource Group: é o que criamos em nosso script, clique em validade

Se tudo ocorreu certo, deve recever essa mensagem

Clique em “close” depois em “ok”

Continuemos a nossa configuração de HA

Em “High Availability”

Setup, clique na roda dentada

Habilite “Enable HA”
Group ID “1”
Description “HA Azure”
Mode “Active Passive”
Habilite “Enable Config Sync”
Peer HA1 IP Address “10.110.252.5” *IP da interfaces mgmt da segunda VM”
Clique em “ok”

Em “Data Link (HA2), clique na roda dentada


Seguindo a mesma lógica para endereçamento IP Azure

Port “ethernet1/3
IPv4 “10.110.253.132” IP da interface eth3 da VM01
Netmask “255.255.255.128” mascara da snet
Gateway “10.110.253.129” gateway da snet
Clique em “ok”

Se tudo deu certo, teremos esta tela

Vamos efetivar nossas configurações

Clique em “Commit”

Agora vamos em “Dashbord”

Vamos add “Widgets” de HA

Estamos quase lá

Agora vamos confirar a segunda VM

Na segunda VM vamos em “Devices” “High Availability”

Setup, clique na roda dentada

Habilite “Enable HA”
Group ID “1”
Description “HA Azure”
Mode “Active Passive”
Habilite “Enable Config Sync”
Peer HA1 IP Address: 10.110.252.4 *IP da interface mgmt da vm01
Clique em OK

Em “Data Link (HA2), clique na roda dentada

Port “ethernet1/3”
IPv4 “10.110.253.133” ip da inteface eth3
Netmask: 255.255.255.128
Gateway “10.110.253.129”

Seguindo a mesma lógica de endereçamento azure

Clique em OK

Agora vamos efetivas nossas configurações, clique em “Commit”

Em “Dashbord”

Vamos add “Widgets” HA

Veja como esta

Agora vamos na VM01 em Dashbord

Vamos fazer o Sync, clique em “Sync to peer”

Clique em “yes”

Pronto, nossa HA esta completo

Veja em Dashbord da VM01 e VM02

Agora vamos criar uma regra de NAT para saída (OUTBOUND) para internet

Vamos em “Policies” depois em “Nat” e clique em ADD

General Name “Trust-To-UnTrust”
Description “NAT para acesso a internet utilizando o IP Publico 20.206.248.193” este IP esta na eth1
Tags “NAT, UnTrust, Internet”
NAT Type “ipv4”

Original Packet

Souce Zone “Trust” nossa rede interna
Destination Zone “UnTrust” Internet
Destination Interface “ethernet1/1” nossa interface UnTrust
Source Address “10.110.253.0/25” neste momento somente a “snet” “Trust”
Destionation Address “Any” neste exemplo, fica a seu critério esta liberação

Translated Packet

Translation Type “Dynamic IP And Port”
Address Type “Interface Address”
Interface “ethernet1/1” nossa interface “UnTrust” onde temos algums IPs
IP Address “10.110.252.134” este IP esta atribuido a interface eth1, no azure não atribuimos o IP publico diretamente e sim o privado que tem o publico associado

Veja na interface eth1 o IP 10.110.252.134 esta associado ao IP 20.206.248.193

Clique em “ok”

Agora vamos criar uma regra de saida no firewall para acessar a internet

Vamos em “Security”, clique em “add”

General
Name “Trust-To-UnTrust”
Rule Type “universal (default)
Description “Regra de acesso a internet somente http e https”
Tags “acesso a internet, internet, rule, security, police”

Agora em Source
Source Zone “Trust”
Source Address “10.110.253.0/25”

Não itemos utilizar “User”, vamos direto para “Destination”
Destination Zone “UnTrust”
Destination Address “Any” fica a seu critério liberar “any” ou não

Agora vamos para “Application”

Principio de segurança, mas fica a seu critério liberar ou não
Application “ssl” “telnet” “web-browsing”

Vamos para “Service/URL Category”

Mais uma vez fica a seu critério tal liberação
Service “http” “https”
URL Category “internet-communication-and-telephony” “online-storage-and-backup” “web-hosyting”

Vamos para action

Action “Allow”

Log Setting “Log at Session Start”
Log Setting “Log at Session End”

Clique em “ok”

Agora vamos efetivar nossas configurações, clique em “commit”

Agora vamos dar continuidade em nossa configuração da arquitetura/topologia de rede Azure

Agora precisamos criar um arquivo de roteamento (Route Table”

Criar Azure

Escolha sua subscription
Resource Group
Region
Name
Propagate gateway routes “yes”

Agora vamos configurar nosso arquivo de roteamento

Vamos criar uma unica rota, pois nesta arquitetura/topologia tudo passa pelo Palo Alto em HA

Name “Default”
Address Prefix “0.0.0.0/0”
Virtual Applicance “10.110.253.6” segundo IP da nossa interface eth2 (Trust)

Agora vamos add um subnet (snet), neste exemplo somente a:
vnet-fw-edge-shared-brazilsouth 10.110.253.0/25

Nosso arquivo de roteamento ficou desta forma

Agora qualquer solicitação da snet 10.110.253.0/25 vai para “Trust” no palo alto para ser tratada (liberado ou não), um simples “ping” terá que ter regra para liberação.

Neste exemplo liberamos somente o acesso a internet utilizar http e https

*Toda configuração feita na VM01 replica para VM02″

Veja como esta nossa arquitetura/topologia

Agora vamos criar uma regra de NAT para INBOUND, isso mesmo, vamos publica uma aplicação neste exemplo denomina “Site” que esta atrás de um “Application Gateway” (Rede Interna).

Vamos lá (A parte de criação/configuração do AppGw não será apresentanda aqui, pode ser usar um load balance tradicional)

Vamos ao objetos

Application Gateway (IP: 10.110.253.126)

VMs com a Aplicação denominada “Site6”

VMWEBBR01 10.110.253.10
VMWEBBR02 10.110.253.10
VMWEBBR03 10.110.253.11

Vamos as regras no Palo Alto, em “Policies” “Nat”, clique em “add

Vamos criar um NAT de INBOUND

Name “UnTrust-To-AppGW”
Description “Regra para publicação da app “Site”
Tags “UnTrust”, “NAT”, “Internet”

Original Packet

Source Zone “Untrust”
Destination Zone “UnTrus”
Destination Interface “Any”
Source Address “Any” pois estamos publicando para internet
Destination Address “10.110.252.135” IP da interface eth1 (segundo IP com IP publico)

Translated Packet

Translation Type “Static IP”
Translation Address “10.110.253.126” IP do AppGw
Translation port “” deixar em branco (NAT 1:1)

Clique em “ok”

Se tudo esta correto verá tera essa visão

Agora vamos criar a regra de seguranã/firewall

Em “Seguriry”, add

General

Name “UnTrus-To-AppGw”
Rule Type “universal”
Description “Regra para publicação da aplicação Site6”
Tags “UnTrust” “Internet” “Rule”

Source

Source Zone “UnTrust”
Source Address “Any” publicando para internet

Destination

Destination “Trust”
Destionation Address “10.110.253.135” IP que esta na interface eth1 com IP publico

Application

Applications “web-browsing” principio de segurança

Servive/URL Category

Service “http’ e “https” “principio de segurança”
URL Category “any”

Action

Action “Allow”
log Setting “Log at Session Start” “Log at Session End”

Clique em “ok”

Se tudo correu bem esta vendo esta tela

Agora vamos efetivar nossas configurações, clique em “Commit”

Pronto, agora qual alguém chamar nossa aplicação “site6” https://site6.supportbrazil.com irá para interface eth1 do nosso Palo Alto, dentro dele fará um NAT para nosso AppGw com IP 10.110.253.126 e a partir dai o AppGw irá enviar os pacotes para as VMs.

VMWEBBR01 10.110.253.10
VMWEBBR02 10.110.253.10
VMWEBBR03 10.110.253.11

Veja nosso arquitetura/topologia

E se por algum motivo a VM01 (Caixa principal do Palo Alto) ficar indisponivel, todos os IPs secundarios das interfaces ETH1 e ETH2 seram migrados automaticamente para a caixa secundaria

Links de referencias

https://docs.paloaltonetworks.com/vm-series/9-0/vm-series-deployment/set-up-the-vm-series-firewall-on-azure/configure-activepassive-ha-for-vm-series-firewall-on-azure.html

https://docs.paloaltonetworks.com/pan-os/7-1/pan-os-admin/networking/nat/nat-configuration-examples/destination-nat-exampleone-to-one-mapping.html#ide31f0849-78d6-4859-9607-ca308386fdf4

Espero ter contribuido para sua arquitetura/Topologia mais segura e concentrada em um unico ponto, lembrando que estamos com Palo Alto HA e Availability Zone.

Seja Feliz!!!!



Criando Web Site com alta disponibilidade Azure CLI (Bash)

Neste artigo iremos criar Web Site em alta disponibilidade, composto por duas VM Windows Server 2019 com IIS habilitado e um load balance, não iremos abordar aqui segurança como Application Gateway, WAF, API MAN, etc. Este artigo visa somente a criação via scritp de toda a infraestrutura (também não iremos abordar o deploy de qualquer aplicação neste artigo).

#!/bin/bash

##Declarando Variaveis (Obrigatório)

export Subscription_Name=”Santana-Corp”
export RG_Name=”WEBSERVER-PRD-EAST”
export Location=”eastus”
export Object_Name=”WEBSERVER”

##Storage Accout

export Storage=”stgdiag${Object_Name,,}”
export SKU_Storage=”Standard_LRS” ##Exemplo Standard_LRS##

##Grupo de Disponibiliade Availability Set

export Name_AV_SET=”AV-SET”-“${Object_Name}”

##Network Security Group NSG

export NSG_Name=”NSG”-“${Object_Name}”
export Fault_Domain=”3″
export Update_Domain=”20″
export Rule01=”HTTP”
export Rule02=”HTTPS”

##Vnet Existente (Variaveis para utilizar Vnet Existente)

export RG_Vnet=”Resource Group da Vnet existente”
export Subnet_Name=”Subnet da Vnet existente”
export Vnet_Name=”Vnet existente”

##Variaveis de Rede (Obrigatório)

export NIC_Name1=”NIC”-“${Object_Name}”1
export NIC_Name2=”NIC”-“${Object_Name}”2
export Accelerated=”False”
export PublicIP=”PUBLIC-IP”-“${Object_Name}”
export PublicIP_Method=”Static”
export ELB_Name=”ELB”-“${Object_Name}”
export SKU=”Basic”
export Frontend_Name=”FE”-“${Object_Name}”
export BackendPool_Name=”BEP”-“${Object_Name}”
export ProbeName01=”Probe-http”
export ProbeName02=”Probe-https”
export Protocol01=”tcp”
export Port01=”80″
export Port02=”443″

##Variavel para criacao da VM (Obrigatório)

export Image_SO=”Win2019Datacenter”
export VM_Name1=”VM”-“${Object_Name}”1
export VM_Name2=”VM”-“${Object_Name}”2
export User_Name=”azroot”
export PWD=”#!49_WelCome_Az@#”
export Size=”Standard_D2S_v3″
export SKU_STG=”Standard_LRS” ## Disco ##
export DiskName_01=”DISK”-“${Object_Name}”01
export DiskName_02=”DISK”-“${Object_Name}”02
export SizeDisk_01=”256″
export SizeDisk_02=”512″
export Disk_Data01=”DISK-DATA”-“${Object_Name}”1
export Disk_Data02=”DISK-DATA”-“${Object_Name}”2

##Variaveis TAGs (Não Obrigatório)

export Costacenter=”Centro de Custos”
export Value_Costcenter=”111245″
export Environment=”Environment”
export Environment_Value=”Produção”
export Depto=”Departamento”
export Depto_Value=”Recursos Humanos”

###Execução do Script

###Selecionar subscription

az account set –subscription “${Subscription_Name}”

###Criando Resource Group

az group create -n “${RG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Storage Accout

az storage account create -g “${RG_Name}” -n “${Storage}” -l “${Location}” –sku “${SKU_Storage}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criano IP Publico

az network public-ip create -g “${RG_Name}” -n “${PublicIP}” -l “${Location}” –allocation-method “${PublicIP_Method}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Network Security Group NSG

az network nsg create -g “${RG_Name}” -n “${NSG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criar regras NSG

az network nsg rule create -g “${RG_Name}” –nsg-name “${NSG_Name}” -n “${Rule01}” –protocol tcp –priority 100 –source-address-prefixes 0.0.0.0/0 –destination-port-range 80 –access allow
az network nsg rule create -g “${RG_Name}” –nsg-name “${NSG_Name}” -n “${Rule02}” –protocol tcp –priority 101 –source-address-prefixes 0.0.0.0/0 –destination-port-range 443 –access allow

###Criar Grupo de Disponibilidade

az vm availability-set create -g “${RG_Name}” -n “${Name_AV_SET}” –platform-fault-domain-count “${Fault_Domain}” –platform-update-domain-count “${Update_Domain}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declarando varivel para utilizar Vnet existente (Obrigatório)

SUBNET_ID001=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
SUBNET_ID002=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
export IPConfig_Name=”ipconfig1″

###Criando NIC (Interface de rede)

az network nic create –name “${NIC_Name1}” -g “${RG_Name}” –subnet $SUBNET_ID001 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”
az network nic create –name “${NIC_Name2}” -g “${RG_Name}” –subnet $SUBNET_ID002 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declaranado Variaveis para Fixar IP

NIC_ID001=$(az network nic show –name “${NIC_Name1}” -g “${RG_Name}” –query id –output tsv)
NIC_ID002=$(az network nic show –name “${NIC_Name2}” -g “${RG_Name}” –query id –output tsv)

###Declarando varivel para utilizar IP Fixo existente (Obrigatório)

IP_ID001=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name1}” –query privateIpAddress –output tsv)
IP_ID002=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name2}” –query privateIpAddress –output tsv)

###Fixando IP na interface de rede#Fixando IP

az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name1}” -n “${IPConfig_Name}” –private-ip-address $IP_ID001
az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name2}” -n “${IPConfig_Name}” –private-ip-address $IP_ID002

###Criando Virtual Machine Windows Server 2019

az vm create –name “${VM_Name1}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –os-disk-name “${DiskName_01}” –os-disk-size-gb “${SizeDisk_01}” –image “${Image_SO}” –nics $NIC_ID001 –admin-username “${User_Name}” –admin-password “${PWD}” –size “${Size}” –storage-sku “${SKU_STG}”
az vm create –name “${VM_Name2}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –os-disk-name “${DiskName_02}” –os-disk-size-gb “${SizeDisk_01}” –image “${Image_SO}” –nics $NIC_ID002 –admin-username “${User_Name}” –admin-password “${PWD}” –size “${Size}” –storage-sku “${SKU_STG}”

###Criando disco de dados

az disk create -g “${RG_Name}” -n “${Disk_Data01}” –size-gb “${SizeDisk_02}”
az disk create -g “${RG_Name}” -n “${Disk_Data02}” –size-gb “${SizeDisk_02}”

###Anexando Disco a VM existente

az vm disk attach -g “${RG_Name}” –vm-name “${VM_Name1}” –name “${Disk_Data01}”
az vm disk attach -g “${RG_Name}” –vm-name “${VM_Name2}” –name “${Disk_Data02}”

###Habilitando IIS Windows Server

az vm extension set –publisher Microsoft.Compute –version 1.8 –name CustomScriptExtension –vm-name “${VM_Name1}” -g “${RG_Name}” –settings ‘{“commandToExecute”:”powershell.exe Install-WindowsFeature -Name Web-Server”}’
az vm extension set –publisher Microsoft.Compute –version 1.8 –name CustomScriptExtension –vm-name “${VM_Name2}” -g “${RG_Name}” –settings ‘{“commandToExecute”:”powershell.exe Install-WindowsFeature -Name Web-Server”}’

###Criando Load Balance

az network lb create -g “${RG_Name}” -n “${ELB_Name}” –sku “${SKU}” –public-ip-address “${PublicIP}” –frontend-ip-name “${Frontend_Name}” –backend-pool-name “${BackendPool_Name}”

###Create health probe on port 80/443

az network lb probe create -g “${RG_Name}” –lb-name “${ELB_Name}” -n “${ProbeName01}” –protocol “${Protocol01}” –port “${Port01}”
az network lb probe create -g “${RG_Name}” –lb-name “${ELB_Name}” -n “${ProbeName02}” –protocol “${Protocol01}” –port “${Port02}”

###Create load balancer rule for port 80/443

az network lb rule create -g “${RG_Name}” –lb-name “${ELB_Name}” -n “${Rule01}” –protocol “${Protocol01}” –frontend-port “${Port01}” –backend-port “${Port01}” –frontend-ip-name “${Frontend_Name}” –backend-pool-name “${BackendPool_Name}” –probe-name “${ProbeName01}”
az network lb rule create -g “${RG_Name}” –lb-name “${ELB_Name}” -n “${Rule02}” –protocol “${Protocol01}” –frontend-port “${Port02}” –backend-port “${Port02}” –frontend-ip-name “${Frontend_Name}” –backend-pool-name “${BackendPool_Name}” –probe-name “${ProbeName02}”

###Adicionando Inteface REDE ao pool de backend Load Balance

az network nic ip-config address-pool add -g “${RG_Name}” –nic-name “${NIC_Name1}” -n “${IPConfig_Name}” –lb-name “${ELB_Name}” –address-pool “${BackendPool_Name}”
az network nic ip-config address-pool add -g “${RG_Name}” –nic-name “${NIC_Name2}” -n “${IPConfig_Name}” –lb-name “${ELB_Name}” –address-pool “${BackendPool_Name}”

###fim do scrip.

Criando Virtual Machine Azure (Windows Server) CLI (bash)

Neste artigo iremos criar uma Maquina Virtual com Windows utilizando uma Vnet existente e fixando IP (rede interna), criaremos também um NSG para esta VM, um storage account para diagnostico de boot e conjunto de disponibilidade.

Vamos ao script

#!/bin/bash

##Declarando variaveis
export Subscription_Name=”Subscription Azure”
export RG_Name=”Nome do Resource Group”
export Location=”Azure Region”
export Object_Name=”Nome do Objeto”

##Storage Accout

##Conjunto de Disponibiliade Availability Set
export Name_AV_SET=”Nome do Grupo de Disponibilidade”

##Network Security Group NSG
export NSG_Name=”Nome do NSG##Exemplo NSG-VM-Frontend##
export Fault_Domain=”3″
export Update_Domain=”20″

##Vnet Existente (Variaveis para utilizar Vnet Existente)
export RG_Vnet=”Resource Grupo Vnet existente”
export Subnet_Name=”subnet-existente”
export Vnet_Name=”Vnet existente”

##Variaveis de Rede (Obrigatório)
export NIC_Name=”NIC”-“${Object_Name}”
export Accelerated=”False”

##Variavel para criacao da VM (Obrigatório)
export Image_SO=”Win2019Datacenter”
export VM_Name=”SRVWEBSERVER01″
export User_Name=”azroot”
export PWD=”@edRc%2010T$3U”
export Size=”Standard_D2S_v3″
export SKU_STG=”Standard_LRS” ## Disco ##

##Variaveis TAGs (Não Obrigatório)
export Costacenter=”Centro de Custos”
export Value_Costcenter=”111245″
export Environment=”Environment”
export Environment_Value=”Produção”
export Depto=”Departamento”
export Depto_Value=”Recursos Humanos”

###Execução do Script

###Selecionar subscription
az account set –subscription “${Subscription_Name}”

###Criando Resource Group
az group create -n “${RG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Storage Accout
az storage account create -g “${RG_Name}” -n “${Storage}” -l “${Location}” –sku “${SKU_Storage}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Network Security Group NSG
az network nsg create -g “${RG_Name}” -n “${NSG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criar Grupo de Disponibilidade
az vm availability-set create -g “${RG_Name}” -n “${Name_AV_SET}” –platform-fault-domain-count “${Fault_Domain}” –platform-update-domain-count “${Update_Domain}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declarando varivel para utilizar Vnet existente (Obrigatório)
SUBNET_ID001=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
export IPConfig_Name=”ipconfig1″

###Criando NIC (Interface de rede)
az network nic create –name “${NIC_Name}” -g “${RG_Name}” –subnet $SUBNET_ID001 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declaranado Variaveis para Fixar IP
NIC_ID001=$(az network nic show –name “${NIC_Name}” -g “${RG_Name}” –query id –output tsv)

###Declarando varivel para utilizar IP Fixo existente (Obrigatório)
IP_ID001=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name}” –query privateIpAddress –output tsv)

###Fixando IP na interface de rede
###Fixando IP
az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name}” -n “${IPConfig_Name}” –private-ip-address $IP_ID001

###Criando Virtual Machine Windows Server 2019
az vm create –name “${VM_Name}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –image “${Image_SO}” –nics $NIC_ID001 –admin-username “${User_Name}” –admin-password “${PWD}” –size “${Size}” –storage-sku “${SKU_STG}”

Links de referencia

https://docs.microsoft.com/pt-br/cli/azure/

https://docs.microsoft.com/pt-br/azure/virtual-machines/availability-set-overview

https://docs.microsoft.com/pt-br/azure/virtual-network/network-security-groups-overview

Adicionando Vnet a infraestrutura existente com Peering e propagação BGP, via CLI (Bash) Azure

Como vimos em nossa seria de artigos de criação de vnet, peering, bgp e VPN IPSec com BGP, vamos criar mais uma vnet em nossa infraestrutura já existente. Veja nossos artigos nas sequencia:

Criando Vnet com Tags via CLI (Bash) Azure
Criando Virtual Network Gateway (VPN com BGP) Azure via CLI (Bash)
Criando Virtual Network com Peering via CLI (Bash) Azure
Criando Peering Virtual Network (Azure) via CLI (Bash) com Gateway de propagação.
Criando Local Network Gateway com BGP – VPN IPSec Fortigate.

Vamos ao script

#!/bin/bash
#Declarando variaveis
##Selecionar subscription

export Subscription_01=’Santana-Corp’

##região
export Location=brazilsouth

##Environmont
export Environment_01=’backend-Prodution’

##Resouce Group
export RG_Name01=”${Environment_01}”-Network

##Vnet Name
export Vnet_01=vnet-“${Environment_01}”

##Nome do Objeto
export NameObject_01=”${Vnet_01}”

##Projeto
export Projecto_01=’Backend’
export ID_Object=’678654789′

##Centro de Custo
export Costcenter_Team=’Team Backend’
export Costcenter_Number=’78954′

##Suporte Acionamento
export Support_Team=’[email protected]
export Support_Number=’+55 11 3000-XXXX’

##CIDR Network (Prefixo da Rede)
export CIDR_01=’172.29.226.0/24′

##Nome subnet
export Subnet_01=sub01-“${NameObject_01}”
export Subnet_02=sub02-“${NameObject_01}”
export Subnet_03=sub03-“${NameObject_01}”
export Subnet_04=sub04-“${NameObject_01}”

##CIDR Subnet
export prefix_01=’172.29.226.0/26′
export prefix_02=’172.29.226.64/26′
export prefix_03=’172.29.226.128/26′
export prefix_04=’172.29.226.192/26′

##Tags
export Tag01_Key=”${Environment_01}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”
export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’
export Name_Value_05=’Centro de Custo Number’
export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’

#Seleciona Subscription
az account set –subscription “$Subscription_01”

#Criando Resource Groups
az group create –name “${RG_Name01}” –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

#Criando Virtual Network (Vnet)
az network vnet create -g “${RG_Name01}” -n “${NameObject_01}” –address-prefix $CIDR_01 –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}” 

#Criando Subnet
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_01 –address-prefixes $prefix_01
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_02 –address-prefixes $prefix_02
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_03 –address-prefixes $prefix_03
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_04 –address-prefixes $prefix_04

##Variaveis para criação do Peering

#Subscriptions
export Subscription_01=’Santana-COrp’

#Resouce Group
export RG_Name01=”Shared-Prodution-Network”export RG_Name02=”backend-Prodution-Network”

#Name Object
export NameObject_01=”${Vnet_01}”-“${Subscription_01}”-“${Environment_01}”

#Peering
export Vnet_Name_01=”vnet-Shared-Prodution”
export Vnet_Name_02=”vnet-backend-Prodution”
export Peering_01=”Peering-vnet-Shared-Prodution2″
export Peering_02=”Peering-backend-Prodution-Network”

#export Vnet_Remote=$(az network vnet show –resource-group Shared-Prodution-Network -n vnet-Shared-Prodution –query id –output tsv)

#Vnet Remote
export Vnet_Remote_01=”/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/backend-Prodution-Network/providers/Microsoft.Network/virtualNetworks/vnet-backend-Prodution”
export Vnet_Remote_02=”/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/Shared-Prodution-Network/providers/Microsoft.Network/virtualNetworks/vnet-Shared-Prodution”

#Selecionar subscription
az account set –subscription “${Subscription_01}”

#Criando Peering
## Vnet Shared Prodution

az network vnet peering create -g “${RG_Name01}” -n “${Peering_01}” –vnet-name “${Vnet_Name_01}” –remote-vnet “${Vnet_Remote_01}” –allow-vnet-access –allow-forwarded-traffic –allow-gateway-transit –allow-vnet-access

## Vnet Backend Prodution
az network vnet peering create -g “${RG_Name02}” -n “${Peering_02}” –vnet-name “${Vnet_Name_02}” –remote-vnet “${Vnet_Remote_02}” –allow-vnet-access –allow-forwarded-traffic –allow-vnet-access –use-remote-gateways

Veja o resultado

Em nosso fortigate

Com isso concluimos nossa seria de Vnet com peering e propagação BGP, a cada vnet nova criada com peering (utilizando as configuração aqui exibidas) não é necessário fazer mais nada em nosso fortigate ou Gateway de VPN, um lembrete muito importante as redes não podem se sobscrever (Over lapping).

Criando Local Network Gateway com BGP – VPN IPSec Fortigate.

Neste artigo iremos criar nossa conexão de VPN IPSec com BGP entre nosso Gateway BGP e nosso ambiente OnPremises com Fortigate.

#!/bin/bash
#Declarando variaveis
##Selecionar subscription

export Subscription_01=’Santana-Corp’
##região
export Location=brazilsouth
##Resouce Group
export RG_Name01=”${Environment_01}”-Network
##Projeto
export Projecto_01=’VPN Produção BGP’
export ID_Object=’789654741′
##Centro de Custo
export Costcenter_Team=’Team Network’
export Costcenter_Number=’78954′
##Suporte Acionamento
export Support_Team=’[email protected]
export Support_Number=’+55 11 3000-XXXX’
##Environmont
export Environment_01=’VPN-BGP-Prodution’
export LGW_01=’lgw-fgt-operadora-01′
##Variaveis de Conexão
export IP_Peer_01=’xxx.xxx.xxx.xxx’ ##peer da VPN do firewall onpremises
export Local_Network_01=’192.168.0.0/16′ ##rede local do ambiente onpremises
export ASN_01=’65010′ ##este ASN é privado, você pode utilizar seu proprio ASN ou um disponivel pelo azure, neste exemplo iremos utilizar 65010 para ser o ASN local
export Peer_BGP_01=’169.254.21.11′ ##este é o IP que será utilizado na interface do firewall


##Tags
export Tag01_Key=”${Environment_01}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”
export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’
export Name_Value_05=’Centro de Custo Number’
export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’

##Criando Local Network Gateway
az network local-gateway create -g “${RG_Name01}” -n “${LGW_01}” -l “${Location}” –gateway-ip-address “${IP_Peer_01}” –local-address-prefixes “${Local_Network_01}” –asn “${ASN_01}” –bgp-peering-address “${Peer_BGP_01}” –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

Temos esse resutado

Agora iremos criar a conexão “connection”

#!/bin/bash
#Declarando variaveis
##Selecionar subscription

export Subscription_01=’Santana-Corp’
##região
export Location=brazilsouth
##Environment
export Environment_01=”${Shared-Prodution}”
##Resouce Group
export RG_Name01=’Shared-Prodution-Network’
##Variaveis da conexão
export Conenction_01=’connection-fgt-01′
export Gateway_Value_01=’GWVPNPROBGP’
export LGW_01=’lgw-fgt-operadora-01′
export PSK=’123vfe56TFr’
##Tags
export Tag01_Key=”${Environment_02}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”
export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’export Name_Value_05=’Centro de Custo Number’export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’
#Selecionar subscription
az account set –subscription “${Subscription_01}”
##Criando a conexão
az network vpn-connection create -g “${RG_Name01}” -n “${Conenction_01}” –vnet-gateway1 “${Gateway_Value_01}” –local-gateway2 “${LGW_01}” –shared-key “${PSK}” –enable-bgp -l “${Location}” –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

Resultado

Agora vamos para as configurações no Fortigate (neste exemplo iremos utilizar Fortinet, mas pode ser qualquer appliance com suport a BGP)

##Aqui definimos as Phase1

config vpn ipsec phase1-interface
edit AZU-HA-VPN-INT0
set interface port1 ## porta WAN
set ike-version 2
set keylife 28800
set peertype any
set proposal aes256-sha1 3des-sha1 aes256-sha256
set dhgrp 2
set remote-gw xxx.xxx.xxx.xxx ##IP 01 do Gateway que foi criado em nossos artigo
set psksecret 123vfe56TFr
next
end

##Aqui definimos a Phase2
config vpn ipsec phase2-interface
edit AZU-HA-VPN-INT0
set phase1name AZU-HA-VPN-INT0
set proposal aes256-sha1 3des-sha1 aes256-sha256 aes256gcm
set pfs disable

set keylifeseconds 27000
next
end

##Aqui editamos a interface que criamos com o endereçamento IP que criamos anteriormente em nossos artigos
config system interface
edit AZU-HA-VPN-INT0
set ip 169.254.21.11 255.255.255.255
set remote-ip 169.254.21.10 255.255.255.255
next
end

##Aqui configuramos o BGP
config router bgp
set as 65010
set router-id XXX.XXX.XXX.XXX ##IP Publico da interface da VPN

##Aqui configuramos o PAR BGP que configuramos no Azure
config neighbor
edit 169.254.21.10
set soft-reconfiguration enable
set remote-as 65512
next
end

##Aqui anunciamos nossas redes OnPremises, neste exemplo 192.168.0.0/16
config router bgp
config network
edit 1
set prefix 192.168.0.0 255.255.0.0
next
end

##Aqui configuramos uma ZONA para ter varias interfaces na mesma zona,
config system zone
edit Cloud
set interface AZU-HA-VPN-INT0
set intrazone allow
next
end

## Aqui configuramos as regras de firewall de INBOUND e OUTBOUND
config firewall policy
edit 1
set name LAN-TO-CLOUD

set srcintf port2
set dstintf Cloud
set srcaddr all
set dstaddr all
set action accept
set schedule always
set service ALL
next
edit 2
set name CLOUD-TO-LAN
set srcintf Cloud
set dstintf port2
set srcaddr all
set dstaddr all
set action accept
set schedule always
set service ALL
end

Resultado


Aqui verificamos que as rotas BGP ja estão sendo anunciadas e recebidas


Nesta série de artigos vimos com criar vnet/gateway BGP/local network/connection com BGP.

Agora cada vnet criada com peering com nossa Vnet Shared-PRO, teremos propagada a CIDR de forma automatica para nossa BGP.

Para criação da segunda VPN com outra operadora basta seguir os passos novamente.

Criando Virtual Network com Peering via CLI (Bash) Azure

Continuando nossa infraestrutura de rede relembrando nestes artigos:

Criando Vnet e Criando GW VPN BGP

Neste artigo iremos criar uma Vnet em outro Resource Group e na mesa Region do nosso Gateway de VPN BGP (Isso não é um pré-requisito) e fazer um peering deixando nossa vnet onde esta nosso Gateway de VPN BGP como Gateway.

Nesta infraestrutura de rede não iremos precisar criar um vnet “gatewayvnet”

#!/bin/bash

#Declarando variaveis

#Selecionar subscription

export Subscription_01=’Santana-Corp’

#região

export Location=brazilsouth

#Environmont

export Environment_01=’databases-Prodution’

#Resouce Group

export RG_Name01=”${Environment_01}”-Network#

#Vnet Name

export Vnet_01=vnet-“${Environment_01}”

#Nome do Objeto

export NameObject_01=”${Vnet_01}”

#Projeto

export Projecto_01=’Data Bases Pro’
export ID_Object=’789654789′

#Centro de Custo

export Costcenter_Team=’Team Databases’
export Costcenter_Number=’78954′

#Suporte Acionanento

export Support_Team=’[email protected]
export Support_Number=’+55 11 3000-XXXX’

#CIDR Network (Prefixo da Rede)

export CIDR_01=’172.29.228.0/24′

#Nome subnet

export Subnet_01=sub01-“${NameObject_01}”
export Subnet_02=sub02-“${NameObject_01}”
export Subnet_03=sub03-“${NameObject_01}”
export Subnet_04=sub04-“${NameObject_01}”

#CIDR Subnet

export prefix_01=’172.29.228.0/26′
export prefix_02=’172.29.228.64/26′
export prefix_03=’172.29.228.128/26′
export prefix_04=’172.29.228.192/26′

#Tags

export Tag01_Key=”${Environment_01}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”

export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’
export Name_Value_05=’Centro de Custo Number’
export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’

#Seleciona Subscription

az account set –subscription “$Subscription_01”

#Criando Resource Groups

az group create –name “${RG_Name01}” –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

#Criando Virtual Network (Vnet)

az network vnet create -g “${RG_Name01}” -n “${NameObject_01}” –address-prefix $CIDR_01 –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

#Criando Subnet

az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_01 –address-prefixes $prefix_01
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_02 –address-prefixes $prefix_02
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_03 –address-prefixes $prefix_03
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_04 –address-prefixes $prefix_04

##Criando Peering entre a Vnet que acabamos de criar e a Vnet criada em nosso artigo anterior, clique aqui, para criação do Peering veja neste artigo.

Criando Virtual Network Gateway (VPN com BGP) Azure via CLI (Bash)

Neste artigo iremos criar um Gateway de VPN com BGP no Azure via CLI (Bash), utilizando Resource Group e Virtual Network existente criada neste artigo.

Esta infraestrutura de rede esta sendo preparada (criada) para abrigar outros projetos com outras Vnets.

###Nome final iremos ter que fazer uma intervenção manual via portal do Azure, pois ainda não descobri com inserir um IP APIPA (via CLI, PowerShell ou Terraform).

###Neste artigo estou partindo do principio que todos os objetos estão na mesma subscription e no mesmo resource group, se sua vnet estiver em outra subscription ou outro resource group será necessário alguns ajustes no script cli (bash), mostrarei em outra oportunidade.

Segue script

#!/bin/bash
#Declarando variaveis
##Selecionar subscription

export Subscription_01=’Santana-Corp’


##Environmont
export Environment_01=’Shared-Prodution’

##região
export Location=brazilsouth

##Resouce Group
export RG_Name01=”${Environment_01}”-Network

##Nome do Objeto
export NameObject_01=”${Vnet_01}”

##Projeto
export Projecto_01=’Rede HUB Pro’export ID_Object=’789654753′

##Centro de Custo
export Costcenter_Team=’Team Network’
export Costcenter_Number=’46852′

##Suporte Acionanento
export Support_Team=’[email protected]’export Support_Number=’+55 11 3000-XXXX’


##Tags
export Tag01_Key=”${Environment_01}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”
export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’
export Name_Value_05=’Centro de Custo Number’
export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’

##Projeto
export Projecto_01=’Rede HUB Pro’export ID_Object=’789654753′

##Centro de Custo
export Costcenter_Team=’Team Network’
export Costcenter_Number=’46852′

##Suporte Acionanento
export Support_Team=’[email protected]’export Support_Number=’+55 11 3000-XXXX’

##Gateway VPN BGP IP
export Gateway_Value_01=’GWVPNPROBGP’
export Public_IP_01=”${Gateway_Value_01}”-IP01
export Public_IP_02=”${Gateway_Value_01}”-IP02
export Generation_01=’Generation1′

##Vnet utilizada no ambiente anterior
export Vnet_01=vnet-“${Environment_01}”

##Criando IP Publico “tem que ser dinamico”
az network public-ip create -n “${Public_IP_01}” -g “${RG_Name01}” -l “${Location}” –allocation-method Dynamic –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

az network public-ip create -n “${Public_IP_02}” -g “${RG_Name01}” -l “${Location}” –allocation-method Dynamic –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

##Criando Gateway VPN BGP
az network vnet-gateway create -n “${Gateway_Value_01}” -l “${Location}” –public-ip-address “${Public_IP_01}” “${Public_IP_02}” -g “${RG_Name01}” –vnet “${Vnet_01}” –gateway-type ‘Vpn’ –sku ‘VpnGw1’ –vpn-type ‘RouteBased’ –vpn-gateway-generation “${Generation_01}” –client-protocol ‘IkeV2’ –asn ‘65512’ –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

Resultado, teremos nosso gateway de vpn bgp com nos IPs publicos

Lembra que falei que teremos que fazer um intervenção manual, então vamos em “configuration”
*Na verdade este procedimento só é necessário se seu equipamento que vai estabelecer o BGP exigir o Peer BGP com APIPA, mas eu prefiro utilizar neste formato.

Em Custom Azure APIPA IP adress, veja que temos 2 campos para preenchimento, o azure aceita utlizar os seguintes IP:

169.254.21.xxx e 169.24.22.xxx

Esse seram os Peer BGP onde seu equipamento irá estabelecer a conexão, neste exemplo utilizaremos os IPs abaixo na ponta Azure
1º 169.254.21.10
2º 169.254.22.10

Após ha alteração clique em salvar.

No próximo artigo iremos criar um “Local Network Gateway” com BGP enable e Fortigate.

link de referencia
https://docs.microsoft.com/en-us/cli/azure/network/vnet-gateway?view=azure-cli-latest#az_network_vnet_gateway_create

Criando banco de dados PaaS (SQL Server) Azure via CLI (bash)

Neste artigo vamos criar um banco de dados PaaS (SQL Server) no Azure via CLI bash.

#Login no conta do Azure
az login

#Seleciona Subscription
az account set –subscription “Santana Corp”

#Criando Resource Groups
az group create –name db-sql-prd –location brazilsouth –tags costcenter=projeto-x enviroment=producao squad=xxx

#Create DB SQL

##Criando server com user e senha
az sql server create -l brazilsouth -g db-sql-prd -n db-sql-prd -u ‘admindb’ -p ‘$N@taL56devDBaz’ –tags costcenter=projeto-x Environment=producao Squad=xxxx

##Criando data base
az sql db create -g db-sql-prd -s db-sql-prd -n db-sql-prd –service-objective Basic –tags costcenter=projeto-x Environment=producao Squad=xxxx

##Liberando acesso a servidor via firewall sql
###Liberando serviços do azure para acessar o servidor sql
az sql server firewall-rule create -g db-sql-prd  -s db-sql-prd  -n azureservice –start-ip-address 0.0.0.0 –end-ip-address 0.0.0.0

###Liberando o acesso ao sql da sua rede (internet)
az sql server firewall-rule create -g db-sql-prd -s db-sql-prd -n LinkOperadora –start-ip-address 200.200.200.1 –end-ip-address 200.200.200.10

links de referencias
https://docs.microsoft.com/pt-br/cli/azure/sql/server?view=azure-cli-latest
https://docs.microsoft.com/pt-br/cli/azure/sql/db?view=azure-cli-latest

Script Bash

#!/bin/bash

#Seleciona Subscription

az account set –subscription “Santana Corp”

#Criando Resource Groups

az group create –name db-sql-prd –location brazilsouth –tags costcenter=projeto-x Environment=producao Squad=xxxx

#Create DB SQL (Server)

az sql server create -l brazilsouth -g db-sql-prd -n db-sql-prdv -u ‘admindb’ -p ‘$N@taL56devDB’ –tags costcenter=projeto-x Environment=producao Squad=xxxx

#Create Data Base

az sql db create -g db-sql-prd -s db-sql-prd -n db-sql-prd–service-objective Basic –tags costcenter=projeto-x Environment=producao Squad=xxxx

#Create rule firewall
##Liberando o acesso a partir dos serviços do Azure
az sql server firewall-rule create -g db-sql-prd -s db-sql-prdv -n azureservice –start-ip-address 0.0.0.0 –end-ip-address 0.0.0.0

##Liberando o acesso para o Public IP especifico
az sql server firewall-rule create -g db-sql-prd -s db-sql-prdv -n LinkOperado –start-ip-address 200.200.200.1 –end-ip-address 200.200.200.10

*Somente em alguns casos devemos expor o banco de dados para internet, sempre recomendo utilizando via rede interna com private link, mas tem casos que realmente não tem como.



Criando entradas Azure DNS via CLI (bash)

Muitas vezes precisamos criar varios entradas em nosso DNS, utilizando o portal do Azure é bem simples, agora imagina ter que repitir a mesma ação por 20 vezes por exemplo para poder criar 20 entras diferentes? Com isso criei este post para ajudar no dia a dia da administração do Azure DNS, isso será feito via CLI, veja como instalar o azure cli aqui.

Primeiramente iremos nos conectar (usarei neste exemplo ubuntu linux como subsystem windows 10)

#Conectar no Azure
az login (enter)

#Selecionando a subscription (supondo que tenha mais de uma)
az account set –subscription “Santana Corp”

az network dns record-set a add-record –resource-group dns \
–zone-name charlessantana.com –record-set-name hello \
–ttl 300 –ipv4-address 192.0.78.24

Resultado

Agora vamos verificar se funcionou, com um simples nslookup

nslookup hello.charlessantana.com


Agora vamos criar uma entrada do tipo CNAME

az network dns record-set cname set-record –resource-group dns \
–zone-name charlessantana.com –record-set-name ww2 –cname ‘www.charlessantana.com.br

Script simples em bash

#!/bin/bash

#Seleciona Subscription

az account set –subscription “Santana Corp”

#Criando entrada DNS do Tipo A

az network dns record-set a add-record –resource-group dns \
–zone-name charlessantana.com –record-set-name hello –ttl 300 –ipv4-address 192.0.78.24

#Criando entrada DNS do Tipo CNAME

az network dns record-set cname set-record –resource-group dns \
–zone-name charlessantana.com –record-set-name ww2 –cname ‘www.charlessantana.com.br’