Desligar o Azure Firewall para economizar custos

Fala pessoal tudo bem com vocês?

Aconteceu nessa semana o evento Microsoft Security Week! www.secweek.com.br se você perdeu, corre lá e assista as gravações porque só tem faixa preta palestrando, só gente fera.

Lá eu falei um pouco sobre Azure Firewall e comentei que era possível desalocar o firewall para economizar custos. Existem ambientes que funcionam apenas em horário comercial, do mesmo jeito que você consegue desligar a vm e economizar, é possível fazer isso com Azure Firewall. Afinal, não teria sentido você desligar as máquinas virtuais e manter o firewall ligado, já que não teria “nada para proteger”

Vamos ao mapa de nosso cenário:

Arquitetura Hubspoke com Azure Firewall

Nessa arquitetura conhecida como Hubspoke, nós utilizamos apenas uma implantação de firewall para controlar todas as nossas VNETS na assinatura, basta que todas estejam emparelhadas com a Vnet do firewall, conforme imagem acima. Isso ajuda a reduzir custo, visto que não precisamos utilizar um firewall exclusivo para cada VNET.

Agora vamos ao nosso tutorial:

Você pode executar os comandos via cli do Azure, mas a intenção é deixar tudo automatizado. Vamos criar então um runbook para executar os comandos agendados.

1 – CRIAR CONTA DE AUTOMAÇÃO E IMPORTAR MÓDULOS

Primeiro passo é criar uma conta de automação, para isso vá ao Market place do Azure e procure pelo recurso chamado “Automação”

Criar conta de automação

Colocar a conta de automação no mesmo grupo de recursos que está localizado o Azure Firewall:

Colocar no mesmo grupo de recursos do Firewall

Assim que o recurso for provisionado, vamos importar os módulos Az.Accounts e Az.Network para o funcionamento de nosso script, para isso vá na conta de automação recém criada, depois vá em Recursos Compartilhados e clique em Galeria de Módulos. Lá vamos procurar pela primeira dependência que é o módulo Az.Accounts:

Adicionando Módulo Az.Accounts pela Galeria

Vamos abrir o módulo e clicar em Importar:

Importando Módulo Az.Accounts

Depois de aguardar a importação, vamos fazer o mesmo processo para o módulo Az.Network

Adicionando Módulo Az.Network pela Galeria

Basta fazer o mesmo processo que fez no Az.Accounts e importar o módulo! Agora nossa conta está pronta para executar os scripts de runbook

2 – CRIAR O RUNBOOK PARA DESLIGAR O FIREWALL

vamos abrir a Conta de automação e clicar em Runbooks:

Criar um Runbook

Vamos criar um runbook do tipo powershell:

Runbook tipo Powershell

Agora chegamos na parte principal, vamos criar o script que vai desalocar o firewall, abaixo segue o script:

# Definindo a variavel de conexao

$connection = Get-AutomationConnection -Name AzureRunAsConnection

# Repeticao de autenticacao caso falha de rede
$logonAttempt = 0
while(!($connectionResult) -and ($logonAttempt -le 10))
{
    $LogonAttempt++
    # Logging in to Azure...
    $connectionResult = Connect-AzAccount `
                            -ServicePrincipal `
                            -Tenant $connection.TenantID `
                            -ApplicationId $connection.ApplicationID `
                            -CertificateThumbprint $connection.CertificateThumbprint

    Start-Sleep -Seconds 30
}

# Fazendo a conexao na sua assinatura
$AzureContext = Get-AzSubscription -SubscriptionId $connection.SubscriptionID

# Parar o Azure Firewall
$azfw = Get-AzFirewall -Name "NOME-DO-FW" -ResourceGroupName "GRUPO-DE-RECURSOS”
$azfw.Deallocate()
Set-AzFirewall -AzureFirewall $azfw

No meu caso ficou assim:

Script para desligar o Azure Firewall

Agora só clicar em Publicar

3 – CRIAR O RUNBOOK PARA INICIAR O FIREWALL

Terceiro passo é criar o script para realocar o Azure Firewall, aqui vão alguns pontos a serem considerados.

1º Quando você desaloca o Azure Firewall ele desassocia a VNET e o endereço público do Firewall então o script deverá associar novamente esses dois itens, veja o exemplo abaixo:

Firewall ligado com endereçamento IP

Azure Firewall online

Firewall após desligar com Script:

2º O Firewall demora cerca de 10 minutos para realocar novamente, então coloque isso no seu cronograma ao colocar o agendamento do script para iniciar.

Vamos agora criar o script para desligar o Azure firewall, vamos fazer o mesmo processo de criar um novo runbook do tipo powershell

Runbook tipo Powershell

Vamos criar o script que vai realocar o firewall, abaixo segue o script:

# Definindo a variavel de conexao

$connection = Get-AutomationConnection -Name AzureRunAsConnection

# Repeticao de autenticacao caso falha de rede
$logonAttempt = 0
while(!($connectionResult) -and ($logonAttempt -le 10))
{
    $LogonAttempt++
    # Logging in to Azure...
    $connectionResult = Connect-AzAccount `
                            -ServicePrincipal `
                            -Tenant $connection.TenantID `
                            -ApplicationId $connection.ApplicationID `
                            -CertificateThumbprint $connection.CertificateThumbprint

    Start-Sleep -Seconds 30
}

# Fazendo a conexao na sua assinatura
$AzureContext = Get-AzSubscription -SubscriptionId $connection.SubscriptionID


# Iniciar o Azure Firewall

$azfw = Get-AzFirewall -Name "Nome FW" -ResourceGroupName "Nome Grupo de Recursos"
$vnet = Get-AzVirtualNetwork -ResourceGroupName "Nome Grupo Recursos" -Name "Nome da VNET"
$publicip1 = Get-AzPublicIpAddress -Name "IP Publico do Firewall" -ResourceGroupName "Nome do Grupo de recursos"
$azfw.Allocate($vnet,@($publicip1))

Set-AzFirewall -AzureFirewall $azfw

No meu caso ficou assim:

Script para Ligar o Azure Firewall

Com os dois scripts prontos, basta criar uma agenda com o horário desejado para iniciar as vms (caso tenha dúvida de como fazer isso, explico nesse link aqui/)

 e aqui vai a última dica de hoje

Coloque o Firewall para iniciar aproximadamente 20 minutos antes de suas vms, pois é o tempo de ele leva para provisionar a estrutura.

Pronto! A partir de momento que o firewall estiver desligado, não incidirá mais em cobrança e você poderá economizar custos pagando somente a hora que utilizou o recurso.

Nos vemos nos próximos posts
Até mais 😉