Azure Bastion Host

Neste post irei demonstrar o deploy e utilização do Azure Bastion Host.
Azure Bastion Host, nada mais é de que um acesso RDP/SSH via Browser, isso facilita e muito o acesso a suas VMs via WEB, ele pode ser utilizado por consultores, prestadores de serviços, onde eles não possuem acesso a sua infraestrutura internet, com ele podemos dar permissão a uma VMs por exemplo, para um Consultor DBA Acessar um SQL Server, ou um alguém da área de operação/noc poder acessar uma VM com IIS e coletar alguns Logs.
Vamos a nossa topologia.

Agora uma breve explicação sobre nossa topologia:
Iremos criar um Resource Group, uma Vnet, uma Snet, um NSG (Nele iremos criar as Rules de InBound e OutBound), e nosso Azure Bastion, veja que em nosso exemplo não temos nenhuma VM na Vnet do Azure Bastion, gosto de deixar assim, “cada macado no seu galho”, a partir desta Vnet, basta termos Peering com outras Vnets para podermos fazer a conexão com nosso Azure Bastion.

Vamos ao nosso código:

####Explicação####
##Aqui declaramos as varias padrão de resource groupo, subscription name, Ambiente
de Dev/HML/Prd/Shared, nomes de objetos que serão utilizados na momenclatura

##Declarando Variaveis (Obrigatório)
export Subscription_Name="XXXXXXX" Substituir pela sua Subscription
export RG="rg"
export Depto_Corp="sec"
export ObjectBastion="bastion"
export Env="shared"
export Location="eastus"
export RGNameSec="${RG}"-"${Depto_Corp}"-"${Env}"-"${Location}"

####Explicação####
##Aqui declaramos as variaveis para criação da Vnet e Subnet

##Declarando Variaveis de Rede
export vnet="vnet"
export VnetName="${vnet}"-"${Depto_Corp}"-"${Env}"-"${Location}"
export CIDR="10.128.0.0/24"
export Prefix_Bastion="10.128.0.192/26"
export snet="snet"
export SnetNameBastion="AzureBastionSubnet"

####Explicação####
##Aqui declaramos a variavel para nome do nosso Azure Bastion

##Declarando Variaveis de Bastion
export BastionName="${ObjectBastion}"

####Explicação####
##Aqui declaramos as variaveis para criação de IP Publico para ser utilizamos em nosso Azure Bastion

##Declarando Variaveis de IP Publico
export PublicIPObject="pip"
export PublicIPSku="Standard"
export PublicIPName01="${PublicIPObject}"-"${BastionName}"-1

####Explicação####
##Aqui declaramos as variaveis para criação de nosso NSG

##Declarando Variaveis NSG
export NSG_Object_Name="nsg"
export NSGNameBastion="${NSG_Object_Name}"-"${snet}"-"${Depto_Corp}"-"${Env}"-"${Location}"-"${SnetNameBastion}"

####Explicação####
##Aqui declaramos as variaveis da nossas Tags

##Variaveis de Tags
export Description="Departamento"
export Value_Description="${Depto_Corp}"
export Cost_Center="Centro de Custo"
export Cost_Center_Value="${Depto_Corp}"
export Support_Description_Description="E-mail Suporte"
export Support_Description_Value="support"-"${Depto_Corp}""@xpto.com"


####Explicação####
##Aqui selecionamos nossa subscription

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

####Explicação####
##Aqui criamos nosso Resource Group com nossas Tasg

###Criando Resource Group
az group create -n "${RGNameSec}" -l "${Location}" \
--tags "${Description}"="${Value_Description}" "${Cost_Center}"="${Cost_Center_Value}" "${Support_Description_Description}"="${Support_Description_Value}"

####Explicação####
##Aqui criamos nosso NSG com nossas Tasg

###Criando NSG
az network nsg create -g "${RGNameSec}" -n "${NSGNameBastion}" -l "${Location}" \
--tags "${Description}"="${Value_Description}" "${Cost_Center}"="${Cost_Center_Value}" "${Support_Description_Description}"="${Support_Description_Value}"

####Explicação####
##Aqui criamos nossas regras em nosso NSG de InBound

###Criando Regras NSG Bastion InBound
az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowHttpsInBound' \
--protocol 'tcp' --direction 'inbound' --source-address-prefix 'internet' --source-port-range '*' \
--destination-address-prefix '*' --destination-port-range '443' --access 'Allow' --priority '120'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowGatewayManagerInBound' \
--protocol 'tcp' --direction 'inbound' --source-address-prefix 'GatewayManager' --source-port-range '*' \
--destination-address-prefix '*' --destination-port-range '443' --access 'Allow' --priority '130'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowAzureLoadBalancerInBound' \
--protocol 'tcp' --direction 'inbound' --source-address-prefix 'AzureLoadBalancer' --source-port-range '*' \
--destination-address-prefix '*' --destination-port-range '443' --access 'Allow' --priority '140'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowbastionHostCommunication' \
--protocol '*' --direction 'inbound' --source-address-prefix 'VirtualNetwork' --source-port-range '*' \
--destination-address-prefix '*' --destination-port-range '8080' '5701' --access 'Allow' --priority '150'

####Explicação####
##Aqui criamos nossas regras em nosso NSG de OutBound

###Criando Regras NSG Bastion OutBound
az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowSshRdpOutBound' \
--protocol '*' --direction 'outbound' --source-address-prefix '*' --source-port-range '*' \
--destination-address-prefix 'VirtualNetwork' --destination-port-range '22' '3389' --access 'Allow' --priority '100'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowAzureCloudOutBound' \
--protocol 'tcp' --direction 'outbound' --source-address-prefix '*' --source-port-range '*' \
--destination-address-prefix 'AzureCloud' --destination-port-range '443' --access 'Allow' --priority '110'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowBastionCommunication' \
--protocol '*' --direction 'outbound' --source-address-prefix 'VirtualNetwork' --source-port-range '*' \
--destination-address-prefix 'VirtualNetwork' --destination-port-range '443' --access 'Allow' --priority '120'

az network nsg rule create -g "${RGNameSec}" --nsg-name "${NSGNameBastion}" --name 'AllowGetSessionInformation' \
--protocol '*' --direction 'outbound' --source-address-prefix 'VirtualNetwork' --source-port-range '*' \
--destination-address-prefix 'Internet' --destination-port-range '80' --access 'Allow' --priority '130'

####Explicação####
##Aqui criamos nossa Vnet

###Criando Vnet
az network vnet create -g "${RGNameSec}" -n "${VnetName}" --address-prefix "${CIDR}" \
-l "${Location}" --tags "${Description}"="${Value_Description}" "${Cost_Center}"="${Cost_Center_Value}" "${Support_Description_Description}"="${Support_Description_Value}"

####Explicação####
##Aqui criamos nossa Subnet

###Criando Snet
az network vnet subnet create -g "${RGNameSec}" --vnet-name "${VnetName}" \
-n "${SnetNameBastion}" --address-prefixes "${Prefix_Bastion}"

####Explicação####
##Aqui anexamos nosso NSG a subnet do Azure bastion

###Anexando NSG a Snet
az network vnet subnet update -g "${RGNameSec}" --vnet-name "${VnetName}" \
-n "${SnetNameBastion}" --network-security-group "${NSGNameBastion}"

####Explicação####
##Aqui criamos nosso IP Publico para ser utilizado em nosso Azure Bastion

###Criando IP Publico
az network public-ip create -g "${RGNameSec}" -n "${PublicIPName01}" --sku "${PublicIPSku}"

####Explicação####
##Aqui Criamos nosso Azure Bastion

###Criando Bastion Host
az network bastion create -g "${RGNameSec}" --name "${BastionName}" \
--public-ip-address "${PublicIPName01}" --vnet-name "${VnetName}" --location "${Location}"

Agora veja ele em funcionado (pelo menos as imgens rs..)

Temos uma VM-1 (Windows Server 2016) na mesma região porém em outra vnet 10.1.0.0/16, nela temos um peering com a vnet do nosso Azure Bastion
A partir deste peering nosso Azure Bastion consegue chegar nesta VM e conseguimos ter o acesso, veja abaixo

Agora acessamos a VM via portal do Azure

Veja que ela esta em outra Vnet

Agora no menu, vamos até “Bastion”

Após será exibido uma tela solicitando usuário e senha

Clique com “connect”

Agora temos total acesso a nossa VM (Neste exemplo Windows Server), se fosse uma VM em linux, teriamos o acesso via SSH pelo próprio Browser.

Espero ter ajudado

Links de referencia

https://docs.microsoft.com/en-us/cli/azure/network/nsg/rule?view=azure-cli-latest#az-network-nsg-rule-create
https://docs.microsoft.com/en-us/azure/bastion/bastion-nsg
https://docs.microsoft.com/en-us/cli/azure/network/bastion?view=azure-cli-latest
https://docs.microsoft.com/en-us/cli/azure/network/vnet?view=azure-cli-latest
https://docs.microsoft.com/en-us/cli/azure/network/vnet/subnet?view=azure-cli-latest

Seja Feliz!!!

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.