top of page

Deploy automatizado do Bastion

  • Foto do escritor: fernando freitas do vale
    fernando freitas do vale
  • 14 de jul.
  • 4 min de leitura
ree


1 - O que é o Bastion

2 - Vantagens e desvantagens da automação

3 - Pré requisitos para deploy automatizado do bastion

4 - Logic App

5 - Testes

6 - Automation Account





1 - O que é o Bastion


O Azure Bastion é um serviço de PaaS totalmente gerenciado que você provisiona para se conectar com segurança às máquinas virtuais por meio de um endereço IP privado. Ele fornece conectividade RDP/SSH segura e contínua para suas máquinas virtuais diretamente pelo TLS no portal do Azure ou por meio do cliente SSH ou RDP nativo já instalado no computador local. Ao se conectar por meio do Azure Bastion, suas máquinas virtuais não precisarão de um endereço IP público, nem de um agente e tampouco de um software cliente especial.

O Bastion fornece conectividade RDP e SSH segura a todas as VMs da rede virtual na qual ele é provisionado. O uso do Azure Bastion protege suas máquinas virtuais contra a exposição das portas RDP/SSH ao mundo externo, fornecendo acesso seguro usando o RDP/o SSH.


2 - Vantagens e desvantagens da automação


Custo: O Custo cai significativamente uma vez que o Bastion não tem como ser desligado, ele consome todas as horas enquanto ele existir, com a automação o custo cai significativamente, em alguns cenários tem um saving de 85%.


Deploy: O deploy automatizado com um comando ou um clique reduz o débito técnico a implantação do Bastion, fazendo que toda equipe esteja apta a utilizá-la


Prazo de deploy: O prazo do deploy em determinados cenários pode entrar como ponto negativo, uma vez que leva em torno de 10 minutos (no nosso ambiente), em cenários extremamente críticos isso pode ser um fator a ser levado em consideração.


3 - Pré requisitos para deploy automatizado do bastion


AZ CLI


Nesse tutorial utilizaremos como referência o Az CLI, todos os comandos utilizados podem ser realizados via Powershell ou via Portal.


Virtual Network


Primeiramente precisamos realizar o deploy de um Virtual Network, se vc já tem uma Virtual Network a mesma pode ser reaproveitada basta criar a subnet do Bastion.


Além disso o Bastion conecta em todas as Virtual Networks que possui peering na sua arquitetura.


Criando VNET e Subnet no mesmo comando, lembrando que a subnet tem que ser pelo menos /26:


az network vnet create --name MinhaVNetBastion --resource-group MeuGrupoDeRecursos --location brazilsouth --address-prefix 10.0.0.0/16 --subnet-name AzureBastionSubnet --subnet-prefix 10.0.0.0/26

Criando somente a subnet do bastion em uma Vnet Existente:


az network vnet subnet create --resource-group RGdaVnetExistente --vnet-name VnetExistente --name AzureBastionSubnet --address-prefixes 10.0.2.0/26

Essa configuração pode ser realizada pelo portal e pelo powershell, basta respeitar as configurações do "AzureBastionSubnet"


IP Público:


Um dos pré requisitos é o IP Público Standard, então segue o comando:


az network public-ip create --resource-group MeuGrupoDeRecursos --name PIP-Bastion

4 - Logic App


O deploy é realizado via Logic App então vamos para a criação:


Na primeira tela escolha a opção Multi-tenant, as primeiras 4000 ações do Logic App são free, para esse deploy é mais do que o suficiente para o Logic App não tenha custos.


ree

Crie o LogicApp de acordo com seu ambiente:

ree

Com o Logic App criado vamos configurar a identidade, mudar para "On".


ree
ree

Em seguida dar permissão de Contributor no RG onde será criado o Bastion e também na Vnet, como o ambiente é de Lab a vnet ta no mesmo RG onde será criado o Bastion,


Clicar em Azure Role Assignments da imagem acima:


ree


Vamos criar o Design do Logic App

ree

ree


{
        "properties": {
            "Action": {
                "type": "string"
            }
        },
        "type": "object"
}

Em Request Body JSON Schema preencher com o código acima:


ree

Em seguida Salve e volte para a tela de Parameters,


ree

No futuro usaremos o HTTP URL


ree

Na janela que abrir clique em "Control"

ree

Em Seguida em "Switch"


ree

Ao lado de "On" clique no raio.

ree

Escolha a opção "Action"

ree

ree

Selecione a opção "+" a esquerda


ree

Digite "Deploy" (vai ser o comando no post http) e em seguida clique no adicionar


ree

Procure por Create or Update a template deployment

ree

Logue com sua conta


ree

Preencha com suas informações:


ree

Em seguida vamos preencher os Parâmetros e os Conteúdos:


PARÂMETROS (PARAMETERS)


{
      "bastionHosts_name": {
        "value": "BAS-TESTE-DEV
      },
      "publicIPAddresses_externalid": {
        "value": "/subscriptions/*{$SubID}*/resourceGroups/*{SEURGAQUI}*/providers/Microsoft.Network/publicIPAddresses/*{SEUPUBLICIPAQUI}*"
      },
      "virtualNetworks__externalid": {
        "value": "/subscriptions/*{$SubID}*/resourceGroups/*{SEURGAQUI}*/providers/Microsoft.Network/virtualNetworks/*{SUAVNETAQUI}*"
      },
      "bastion_location": {
            "value": "canadacentral"
      }
}

Em seguida o conteúdo (Content)


Basta alterar os valores, ou copiar o ResourceID da Vnet e do PublicIP e substituir.



Agora vamos começar a definir no app


ree
ree
ree

Clique no Add entre Case e Default


ree

Coloque Delete (vai ser a palavra para deletar o ambiente) nos parâmetros e vá em add

ree

Digite HTTP e escolha conforme a imagem:


ree

Edite a url conforme seu ambiente:



Cole conforme a imagem:


ree

5 - Testes


Para realizar os testes podemos utilizar o Curl no Bash (ou cmd porém com adaptações) ou Invoke no powershell.


Bash


curl --location --request POST "https://prod-28.brazilsouth.logic.azure.com:443/workflows/1e91071791ca46f8bb69204a5b9b6e66/triggers/When_a_HTTP_request_is_received/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig=QzXKlvrgl1h7i126_GIxcXXk24pv9-ERQm6OqT2titE" --header 'Content-Type: application/json' --data-raw '{"Action":"Deploy"}'

CMD



Powershell


$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$body = "{`"Action`":`"Deploy`"}"
$response = Invoke-RestMethod $RequestURL -Method 'POST' -Headers $headers -Body $body

ree


ree

Agora para o remover o bastion basta usar o mesmo comando trocando a action Deploy por Delete.


O tempo do run de Deploy e Delete são diferentes no Logic App, no Deploy ele da como sucesso somente o ato de mandar criar o Bastion, já no delete ele da sucesso somente quando remove o recurso.


ree


6 - Automation Account


A automation account serve para criar recorrência do Delete e para ter uma tela de Deploy sem precisar utilizar Curl ou Invoke.


Para isso crie um runbook com powershell 5.1 com os seguintes códigos:


Deploy


$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"

$headers.Add("Content-Type", "application/json")

$body = "{`"Action`":`"Deploy`"}"


$RequestURL = "url do seu logicapp"


$response = Invoke-RestMethod $RequestURL -Method 'POST' -Headers $headers -Body $body


Delete

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"

$headers.Add("Content-Type", "application/json")

$body = "{`"Action`":`"Delete`"}"


$RequestURL = "url do seu logicapp"


$response = Invoke-RestMethod $RequestURL -Method 'POST' -Headers $headers -Body $body


É bacana também fazer um schedule para o delete caso esqueça de remover depois do deploy.


Enjoy!!!!


 
 
 

Comments


bottom of page