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:
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”
Colocar a conta de automação no mesmo grupo de recursos que está localizado o Azure 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:
Vamos abrir o módulo e clicar em Importar:
Depois de aguardar a importação, vamos fazer o mesmo processo para o módulo Az.Network
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:
Vamos criar um runbook do 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:
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:
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
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:
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 no blog do Azure Academy, basta clicar 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 😉