Pular para o conteúdo principal

[AZ-104] Grand Labs - Heliostar Energia S.A.

Ambiente Cumulativo de Implantação Real


Narrativa Central

Empresa: Heliostar Energia S.A. Setor: Energia solar e distribuição elétrica Prefixo de recursos: HELIOSTAR

Situação de negócio

A Heliostar Energia S.A. opera usinas solares em três estados brasileiros e acaba de receber aporte para expandir sua infraestrutura de TI para o Azure. A empresa possui atualmente um servidor on-premises Windows Server 2022 com Active Directory e um servidor de arquivos legado. O time de TI é composto por 12 pessoas divididas em três grupos funcionais: Administradores de Infraestrutura, Desenvolvedores e Analistas de Dados.

O diretor de TI exigiu que toda a infraestrutura Azure siga as melhores práticas: identidade gerenciada centralmente, governança com políticas, armazenamento seguro e redundante, VMs provisionadas com automação, rede segmentada com controles de acesso, monitoramento ativo e recuperação de desastres para as aplicações críticas.

Este laboratório percorre cada fase desse projeto do início ao fim, de forma cumulativa, onde cada etapa depende das anteriores.


Ambiente Inicial

Recursos pré-existentes (criar antes do início do laboratório)

Nome do recursoTipoEspecificação mínimaComo provisionar
Subscription HELIOSTAR-SUBAzure SubscriptionPay-as-you-go ou Visual StudioPortal Azure, conta com Owner
Resource Group HELIOSTAR-RG-INFRAResource GroupEast USPortal Azure antes do início
Resource Group HELIOSTAR-RG-APPResource GroupEast USPortal Azure antes do início
Resource Group HELIOSTAR-RG-DRResource GroupBrazil SouthPortal Azure antes do início
Entra ID TenantMicrosoft Entra IDTenant padrão da subscriptionExistente
Usuário admin heliostar-admin@[tenant].onmicrosoft.comEntra ID UserGlobal AdministratorCriado antes do início

Credenciais de laboratório

ContaTipoSenha padrãoObservação
heliostar-admin@[tenant].onmicrosoft.comEntra ID Global AdminHeliostar@2024!Admin principal
usr-infra01@[tenant].onmicrosoft.comEntra ID UserUsrInfra@2024!Membro do grupo Infra
usr-dev01@[tenant].onmicrosoft.comEntra ID UserUsrDev@2024!Membro do grupo Dev
usr-dados01@[tenant].onmicrosoft.comEntra ID UserUsrDados@2024!Membro do grupo Dados
usr-externo01@parceiro.comEntra ID B2BExtUser@2024!Usuário externo (usar conta que você controla)
VM admin localLocal OSHeliostarVM@2024!Admin SSH/RDP nas VMs

Ferramentas necessárias

  • Azure CLI: versão 2.50+
  • Azure PowerShell (Az module): versão 10+
  • PowerShell: versão 7.x
  • AzCopy: versão 10+ (baixar de https://aka.ms/downloadazcopy-v10-windows)
  • Azure Storage Explorer: versão mais recente
  • Acesso ao portal Azure: portal.azure.com

Topologia inicial

[ Heliostar Energia S.A. ]

Microsoft Entra ID (a configurar)
Usuarios e grupos (a criar)

Azure Subscription: HELIOSTAR-SUB

Resource Groups (ja criados):
HELIOSTAR-RG-INFRA (East US)
HELIOSTAR-RG-APP (East US)
HELIOSTAR-RG-DR (Brazil South)

Todos os demais recursos serao criados durante o laboratorio.

Etapa 1 — Manage Microsoft Entra users and groups (Objetivo 1.1)

Contexto da etapa

A Heliostar precisa estruturar sua identidade no Microsoft Entra ID antes de qualquer recurso Azure ser configurado. Esta etapa cria os usuários dos três grupos funcionais da empresa, configura licenças, habilita o Self-service Password Reset (SSPR) para reduzir chamados ao helpdesk, e convida o usuário externo de um parceiro de instalação solar que precisa de acesso limitado ao portal de relatórios.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar usuários e grupos de segurança [Portal Azure] [PowerShell]

No portal Azure > Microsoft Entra ID > Users > New user, crie os seguintes usuários com a opção Create new user:

  • usr-infra01: Display name Infra User 01, Usage location Brazil
  • usr-dev01: Display name Dev User 01, Usage location Brazil
  • usr-dados01: Display name Dados User 01, Usage location Brazil

Em Microsoft Entra ID > Groups > New group, crie os grupos:

  • HELIOSTAR-GRP-INFRA: Security, Assigned, adicione usr-infra01
  • HELIOSTAR-GRP-DEV: Security, Assigned, adicione usr-dev01
  • HELIOSTAR-GRP-DADOS: Security, Assigned, adicione usr-dados01

Confirme via PowerShell:

Get-AzADGroup -DisplayName "HELIOSTAR-GRP-INFRA" | Get-AzADGroupMember | Select-Object DisplayName

2. Gerenciar propriedades de usuário e licenças [Portal Azure]

Para o usuário usr-infra01, atualize as propriedades:

  • Job title: Infraestrutura
  • Department: TI
  • Manager: heliostar-admin

Se a subscription incluir licenças Microsoft Entra ID P1 ou P2 (ou trial), atribua uma licença a usr-infra01 via Microsoft Entra ID > Users > usr-infra01 > Licenses > Assignments.

Se não houver licenças disponíveis, ative o trial de Microsoft Entra ID P2 via Microsoft Entra ID > Overview > Start free trial.

3. Convidar usuário externo (B2B) [Portal Azure]

Em Microsoft Entra ID > Users > Invite external user:

  • Email: use uma conta de email que você controla (simula parceiro@solar.com.br)
  • Display name: Parceiro Solar
  • Message: Acesso ao portal Heliostar Energia

Após aceitar o convite, adicione o usuário guest ao grupo HELIOSTAR-GRP-DADOS para acesso de leitura aos relatórios.

4. Configurar Self-service Password Reset (SSPR) [Portal Azure]

Em Microsoft Entra ID > Password reset:

  • Self service password reset enabled: Selected
  • Group: HELIOSTAR-GRP-INFRA
  • Authentication methods: Number required to reset = 1, Methods = Email e Mobile phone
  • Registration: Require registration when signing in = Yes
  • Notifications: Notify users on password resets = Yes

Valor capturado

ValorOnde encontrarUsado na etapa
Object ID do grupo HELIOSTAR-GRP-INFRAEntra ID > Groups > PropertiesEtapas 2 e 3
Object ID do grupo HELIOSTAR-GRP-DEVEntra ID > Groups > PropertiesEtapas 2 e 3
Object ID do grupo HELIOSTAR-GRP-DADOSEntra ID > Groups > PropertiesEtapas 2 e 3
UPN do usuário guest B2BEntra ID > Users > PropertiesEtapa 3

Critérios de validação

1. Execute:

Get-AzADUser -DisplayName "Infra User 01" | Select-Object DisplayName, UserPrincipalName, UserType

Resultado esperado: UserType = Member, UPN com domínio @[tenant].onmicrosoft.com.

2. No portal > Entra ID > Groups > HELIOSTAR-GRP-INFRA > Members, confirme que usr-infra01 está listado.

3. No portal > Entra ID > Password reset > Properties, confirme que o status é Selected e o grupo HELIOSTAR-GRP-INFRA está configurado.

4. No portal > Entra ID > Users, filtre por User type = Guest e confirme que o usuário externo aparece com status Invitation accepted ou PendingAcceptance.


Etapa 2 — Manage access to Azure resources (Objetivo 1.2)

Contexto da etapa

Com os usuários e grupos criados na Etapa 1, a Heliostar precisa definir o controle de acesso RBAC para que cada grupo funcional tenha exatamente as permissões necessárias nos resource groups criados antes do laboratório. Esta etapa atribui roles nos escopos corretos e interpreta as permissões efetivas.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Atribuir roles RBAC nos escopos corretos [Portal Azure] [CLI]

Atribua os seguintes roles via Access control (IAM) > Add role assignment em cada escopo:

GrupoRoleEscopo
HELIOSTAR-GRP-INFRAContributorHELIOSTAR-RG-INFRA
HELIOSTAR-GRP-INFRAReaderSubscription HELIOSTAR-SUB
HELIOSTAR-GRP-DEVContributorHELIOSTAR-RG-APP
HELIOSTAR-GRP-DADOSReaderSubscription HELIOSTAR-SUB
HELIOSTAR-GRP-DADOSStorage Blob Data ReaderHELIOSTAR-RG-INFRA (será usado quando o storage for criado)

Confirme uma atribuição via CLI:

az role assignment list --resource-group HELIOSTAR-RG-INFRA --assignee [OBJECT_ID_GRP_INFRA] --output table

2. Verificar permissões efetivas e interpretar access assignments [Portal Azure]

No portal > HELIOSTAR-RG-INFRA > Access control (IAM) > Check access. Selecione usr-infra01 e verifique as permissões efetivas. Documente quais ações estão permitidas e quais estão negadas.

Execute para verificar o que o usr-infra01 pode fazer na subscription:

Get-AzRoleAssignment -SignInName "usr-infra01@[tenant].onmicrosoft.com" | Select-Object RoleDefinitionName, Scope

Demonstre o conceito de herança: confirme que usr-infra01 herda o role Reader da subscription em todos os resource groups.

3. Criar e atribuir um custom role [Portal Azure] [PowerShell]

No portal > Microsoft Entra ID > Roles and administrators > New custom role OU crie via PowerShell usando New-AzRoleDefinition com um objeto JSON contendo:

  • Nome: HELIOSTAR-Role-VMOperator
  • Description: Pode iniciar, parar e reiniciar VMs sem poder criar ou deletar
  • Actions: Microsoft.Compute/virtualMachines/start/action, Microsoft.Compute/virtualMachines/deallocate/action, Microsoft.Compute/virtualMachines/restart/action, Microsoft.Compute/virtualMachines/read
  • AssignableScopes: subscription HELIOSTAR-SUB

Atribua o custom role ao usuário usr-infra01 no escopo HELIOSTAR-RG-INFRA.

Valor capturado

ValorOnde encontrarUsado na etapa
Role Definition ID do HELIOSTAR-Role-VMOperatorGet-AzRoleDefinition -Name HELIOSTAR-Role-VMOperatorValidação global
Lista de roles efetivos de usr-infra01Get-AzRoleAssignmentEtapa 3

Critérios de validação

1. Execute:

az role assignment list --resource-group HELIOSTAR-RG-APP --assignee [OBJECT_ID_GRP_DEV] --query "[].{Role:roleDefinitionName,Scope:scope}" --output table

Resultado esperado: HELIOSTAR-GRP-DEV com role Contributor no escopo HELIOSTAR-RG-APP.

2. Execute:

Get-AzRoleDefinition -Name "HELIOSTAR-Role-VMOperator" | Select-Object Name, IsCustom, Actions

Resultado esperado: IsCustom = True, com as três actions de VM listadas.


Etapa 3 — Manage Azure subscriptions and governance (Objetivo 1.3)

Contexto da etapa

Com identidade e RBAC configurados, a Heliostar precisa de governança: políticas que garantam conformidade (todas as VMs devem ter tag Environment), resource locks para proteger recursos críticos, gerenciamento de custos e um management group para organizar subscriptions futuras.

Diagrama da etapa

[ Management Group: HELIOSTAR-MG ]
|
+-- HELIOSTAR-SUB (Subscription)
|
Policies aplicadas:
- HELIOSTAR-Policy-Tags (Deny: sem tag Environment)
- HELIOSTAR-Policy-Locations (Deny: fora de eastus e brazilsouth)
|
Resource Locks:
- HELIOSTAR-RG-INFRA: CanNotDelete

Budget: HELIOSTAR-BUDGET ($200/mes)

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar Management Group e mover subscription [Portal Azure] [PowerShell]

No portal > Management groups > Start using management groups > Create:

  • Management group ID: heliostar-mg
  • Display name: HELIOSTAR-MG

Mova a subscription HELIOSTAR-SUB para dentro do HELIOSTAR-MG. Confirme via:

Get-AzManagementGroup -GroupId "heliostar-mg" -Expand -Recurse | Select-Object DisplayName, Children

2. Criar e atribuir Azure Policies [Portal Azure] [CLI]

No portal > Policy > Definitions > + Policy definition, crie a policy customizada HELIOSTAR-Policy-RequireTagEnvironment:

  • Rule: se a tag Environment não estiver presente no recurso, negar a criação
  • Effect: Deny
  • Mode: Indexed

Atribua-a no escopo HELIOSTAR-MG. Use também a policy built-in Allowed locations: configure para permitir apenas ["eastus", "brazilsouth"] e atribua no escopo HELIOSTAR-MG.

Demonstre a eficácia: tente criar um Resource Group em westus e confirme o erro. Documente a mensagem de erro recebida.

3. Aplicar Resource Lock e gerenciar tags [Portal Azure] [CLI]

No portal > HELIOSTAR-RG-INFRA > Locks > Add:

  • Lock name: HELIOSTAR-LOCK-INFRA
  • Lock type: Delete

Tente deletar o Resource Group HELIOSTAR-RG-INFRA e confirme que o lock impede a ação. Documente o erro.

Adicione as tags obrigatórias nos três Resource Groups:

  • Environment = Production
  • CostCenter = TI-HELIOSTAR
  • Owner = heliostar-admin@[tenant].onmicrosoft.com

Confirme via:

az group show --name HELIOSTAR-RG-INFRA --query "tags" --output json

4. Configurar Budget e revisar Azure Advisor [Portal Azure]

No portal > Cost Management + Billing > Budgets > Add:

  • Scope: Subscription HELIOSTAR-SUB
  • Name: HELIOSTAR-BUDGET
  • Reset period: Monthly
  • Budget amount: $200
  • Alerts: 80% actual cost e 100% forecasted cost
  • Alert recipients: heliostar-admin@[tenant].onmicrosoft.com

Acesse Azure Advisor > Cost e documente ao menos uma recomendação de custo presente na subscription (se não houver recursos ainda, documente as recomendações disponíveis após as etapas seguintes).

Valor capturado

ValorOnde encontrarUsado na etapa
ID do Management Group HELIOSTAR-MGPortal > Management Groups > PropertiesEtapas 9, 11
Nome das policies atribuídasPortal > Policy > AssignmentsValidação global
Budget IDPortal > Cost Management > BudgetsValidação global

Critérios de validação

1. Tente criar um RG em westus:

az group create --name test-lock --location westus

Resultado esperado: erro RequestDisallowedByPolicy.

2. Tente deletar HELIOSTAR-RG-INFRA e confirme o erro de lock no portal ou via CLI.

3. Execute:

az group show --name HELIOSTAR-RG-INFRA --query "tags.Environment"

Resultado esperado: "Production".


Etapa 4 — Configure access to storage (Objetivo 2.1)

Contexto da etapa

A Heliostar precisa de um Storage Account para armazenar relatórios de produção solar, backups e dados de telemetria dos painéis fotovoltaicos. Esta etapa cria o Storage Account, configura firewalls, gera SAS tokens com escopo limitado e implementa SSPR e políticas de acesso armazenadas.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar Storage Account e configurar firewall [Portal Azure] [CLI]

Crie o Storage Account:

  • Nome: heliostarstore (lowercase, globalmente único; se indisponível, use heliostar[4 dígitos aleatórios])
  • Resource Group: HELIOSTAR-RG-INFRA
  • Região: East US
  • Performance: Standard
  • Redundancy: GRS (Geo-redundant storage)
  • Tags: Environment = Production, CostCenter = TI-HELIOSTAR

Configure o firewall do Storage Account:

  • Public network access: Enabled from selected virtual networks and IP addresses
  • Adicione seu IP público atual na seção Firewall > Add your client IP address
  • Anote que as VMs que serão criadas nas Etapas seguintes precisarão de acesso via Service Endpoint (a ser configurado na Etapa 7)

2. Gerar SAS tokens com escopos específicos [Portal Azure] [CLI]

No portal > heliostarstore > Shared access signature. Gere dois SAS tokens:

SAS Token 1 (leitura de containers):

  • Allowed services: Blob
  • Allowed resource types: Container, Object
  • Allowed permissions: Read, List
  • Expiry: 7 dias a partir de hoje
  • Anote o token gerado

SAS Token 2 (escrita de blobs):

  • Allowed services: Blob
  • Allowed resource types: Object
  • Allowed permissions: Write, Create
  • Expiry: 1 hora a partir de agora
  • Anote o token gerado

Confirme que o SAS Token 1 (read) não permite upload e que o SAS Token 2 (write) não permite listar containers.

3. Configurar Stored Access Policy [Portal Azure] [CLI]

No portal > heliostarstore > Containers > Create um container chamado relatorios. Nas propriedades do container, acesse Access policy e crie uma Stored Access Policy:

  • Identifier: HELIOSTAR-SAP-Relatorios
  • Permissions: Read, List
  • Start: now
  • Expiry: 30 dias

Gere um Service SAS usando esta Stored Access Policy via CLI:

az storage container generate-sas --account-name heliostarstore --name relatorios --policy-name HELIOSTAR-SAP-Relatorios --output tsv

4. Configurar acesso baseado em identidade para Azure Files [Portal Azure]

Acesse heliostarstore > Configuration > Azure Active Directory (Microsoft Entra) authentication for Azure Files. Habilite a autenticação baseada em identidade:

  • Identity-based access for file shares: Microsoft Entra Kerberos
  • (Requer Microsoft Entra ID P1+ ou trial ativo)

Configure as permissões de nível de compartilhamento:

  • Atribua ao grupo HELIOSTAR-GRP-INFRA o role Storage File Data SMB Share Contributor no nível do Storage Account

Valor capturado

ValorOnde encontrarUsado na etapa
Nome do Storage AccountPortal > Storage Account > OverviewTodas as etapas seguintes
SAS Token 1 (read)Gerado na tarefa 2 (anote imediatamente)Etapa 5
SAS Token 2 (write)Gerado na tarefa 2Etapa 5
Nome do container relatoriosPortal > Storage > ContainersEtapa 5

Critérios de validação

1. Execute:

az storage account show --name heliostarstore --resource-group HELIOSTAR-RG-INFRA --query "{Redundancy:sku.name,PublicAccess:publicNetworkAccess}" --output json

Resultado esperado: Redundancy = Standard_GRS, PublicAccess = Enabled.

2. Teste o SAS Token 1 de leitura tentando fazer upload de um arquivo (deve falhar):

echo "test" > test.txt
az storage blob upload --account-name heliostarstore --container-name relatorios --name test.txt --file test.txt --sas-token "[SAS_TOKEN_1]"

Resultado esperado: erro AuthorizationPermissionMismatch (sem permissão de escrita).


Etapa 5 — Configure and manage storage accounts (Objetivo 2.2)

Contexto da etapa

Com o Storage Account criado na Etapa 4, a Heliostar precisa configurar redundância, replicação de objetos entre regiões (para os relatórios críticos), criptografia e gerenciar os dados com Azure Storage Explorer e AzCopy.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Configurar Object Replication entre East US e Brazil South [Portal Azure]

Crie um segundo Storage Account de destino para DR:

  • Nome: heliostardrstore (lowercase, globalmente único)
  • Resource Group: HELIOSTAR-RG-DR
  • Região: Brazil South
  • Redundancy: LRS (local para DR)

Em ambos os Storage Accounts, habilite o Blob versioning (necessário para object replication):

  • heliostarstore: Blob service > Data management > Versioning: Enabled
  • heliostardrstore: Blob service > Data management > Versioning: Enabled

Configure a Object Replication Rule:

  • Source: heliostarstore, container relatorios
  • Destination: heliostardrstore, criar container relatorios-dr
  • Copy blobs created after: now

2. Configurar criptografia do Storage Account [Portal Azure]

No portal > heliostarstore > Encryption:

  • Confirme que Encryption type está como Microsoft-managed keys (MMK)
  • Altere para Customer-managed keys (CMK):
    • Crie um Azure Key Vault para armazenar a chave: nome heliostar-kv no HELIOSTAR-RG-INFRA, East US, Standard tier, Purge protection: Enabled
    • No Key Vault, crie uma chave RSA 2048 chamada HELIOSTAR-KEY-Storage
    • De volta ao Storage Account, selecione o Key Vault e a chave criada

3. Usar AzCopy para transferir dados [CLI]

No seu computador local, usando o AzCopy com o SAS Token de escrita gerado na Etapa 4:

Faça upload de três arquivos de teste simulando relatórios:

  • Crie localmente: relatorio-jan.csv, relatorio-fev.csv, relatorio-mar.csv com conteúdo de texto simples
  • Use o comando azcopy copy com o SAS Token 2 para fazer upload dos três arquivos para o container relatorios

Verifique os arquivos no portal ou via CLI:

az storage blob list --account-name heliostarstore --container-name relatorios --sas-token "[SAS_TOKEN_1]" --output table

4. Usar Azure Storage Explorer para gerenciar dados [GUI] (Storage Explorer desktop ou portal)

No Azure Storage Explorer (ou no portal via Storage browser):

  • Conecte-se ao heliostarstore usando sua conta Azure
  • Navegue até o container relatorios e confirme que os três arquivos CSV foram carregados
  • Crie uma pasta virtual 2024/Q1/ movendo os arquivos para esse prefixo
  • Confirme que a Object Replication copiou os arquivos para heliostardrstore/relatorios-dr/ (pode levar alguns minutos)

Valor capturado

ValorOnde encontrarUsado na etapa
Nome do Key Vault heliostar-kvPortal > Key Vault > OverviewEtapas 6, 10
Nome da chave HELIOSTAR-KEY-StorageKey Vault > KeysEtapa 6
Regra de Object Replication IDheliostarstore > Object replication > Rule IDValidação global

Critérios de validação

1. Execute:

az storage account show --name heliostarstore --resource-group HELIOSTAR-RG-INFRA --query "encryption.keySource"

Resultado esperado: Microsoft.Keyvault.

2. Execute:

az storage blob list --account-name heliostardrstore --container-name relatorios-dr --output table

Resultado esperado: os três arquivos CSV listados (após alguns minutos para a replicação ocorrer).


Etapa 6 — Configure Azure Files and Azure Blob Storage (Objetivo 2.3)

Contexto da etapa

A Heliostar precisa de um file share para que os técnicos das usinas compartilhem documentos de campo, e de um Blob container com lifecycle management para os dados de telemetria dos painéis. Esta etapa configura Azure Files com soft delete e snapshots, e Blob Storage com versionamento, lifecycle e tier management.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar e configurar Azure File Share [Portal Azure] [CLI]

No portal > heliostarstore > File shares > + File share:

  • Name: heliostar-docs
  • Tier: Transaction optimized
  • Quota: 100 GiB

Configure Soft delete para o file share:

  • Acesse heliostarstore > Data protection > File shares > Soft delete
  • Enable soft delete for file shares: Enabled
  • Days to retain: 14

Configure um snapshot do file share (simular backup manual):

  • Acesse o file share heliostar-docs > Snapshots > Add snapshot
  • Comment: Snapshot inicial pre-dados

2. Criar container Blob para telemetria e configurar Soft Delete [Portal Azure] [CLI]

No portal > heliostarstore > Containers > + Container:

  • Name: telemetria
  • Public access level: Private

Configure Soft delete para blobs:

  • heliostarstore > Data protection > Blobs > Soft delete
  • Enable soft delete for blobs: Enabled
  • Days to retain: 7

Configure Soft delete para containers:

  • Enable soft delete for containers: Enabled
  • Days to retain: 7

3. Configurar Blob versioning e lifecycle management [Portal Azure]

Confirme que o blob versioning está habilitado no heliostarstore (feito na Etapa 5). Faça upload de um arquivo telemetria-semana1.json no container telemetria com conteúdo {"paineis":100,"kwh":5000}. Sobrescreva o mesmo arquivo com conteúdo {"paineis":100,"kwh":5200}. Confirme que existem duas versões do arquivo via:

az storage blob list --account-name heliostarstore --container-name telemetria --include-versions --output table

Configure Lifecycle Management Rule HELIOSTAR-Lifecycle-Telemetria:

  • Rule name: HELIOSTAR-Lifecycle-Telemetria
  • Rule scope: All blobs with filters
  • Blob type: Block blobs
  • Actions:
    • Move to Cool tier: last modified > 30 days
    • Move to Archive tier: last modified > 90 days
    • Delete blob: last modified > 365 days

4. Configurar storage tiers e blob index tags [Portal Azure]

Para um blob específico no container relatorios (ex: relatorio-jan.csv):

  • Altere o tier manualmente para Cool via Portal > blob properties > Change tier
  • Adicione um blob index tag: key ano, value 2024; key tipo, value relatorio-mensal

Confirme que a mudança de tier foi aplicada:

az storage blob show --account-name heliostarstore --container-name relatorios --name "2024/Q1/relatorio-jan.csv" --query "properties.blobTier"

Valor capturado

ValorOnde encontrarUsado na etapa
Nome do file share heliostar-docsPortal > Storage > File sharesEtapa 9 (VM)
URL do file sharePortal > File share > PropertiesEtapa 9

Critérios de validação

1. Execute:

az storage share show --account-name heliostarstore --name heliostar-docs --query "{Quota:properties.quota,Deleted:deleted}" --output json

Resultado esperado: Quota = 102400 (100 GiB em MiB), Deleted = null ou false.

2. Execute:

az storage blob list --account-name heliostarstore --container-name telemetria --include-versions --query "[].{Name:name,VersionId:versionId,IsCurrentVersion:isCurrentVersion}" --output table

Resultado esperado: dois registros para telemetria-semana1.json, um com IsCurrentVersion = true.


Etapa 7 — Automate deployment with ARM/Bicep and create VMs (Objetivo 3.1 e 3.2)

Contexto da etapa

A Heliostar precisa de VMs para hospedar o sistema de monitoramento solar e o portal de clientes. Esta etapa usa ARM templates para automatizar o deployment, cria VMs com encryption at host, configura discos gerenciados e deploy em Availability Zones. A VM criada aqui será usada como base para as etapas seguintes.

Diagrama da etapa

[ HELIOSTAR-RG-APP — East US ]

Availability Zone 1: Availability Zone 2:
HELIOSTAR-VM-WEB01 HELIOSTAR-VM-WEB02
Windows Server 2022 Ubuntu 22.04 LTS
Standard_D2s_v3 Standard_D2s_v3
IP: 10.20.1.10 IP: 10.20.1.11
Encryption at host: Yes Disk: Premium SSD

Availability Set:
HELIOSTAR-AVSET-DB
HELIOSTAR-VM-DB01 (SQL Express, Windows)

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Interpretar e modificar um ARM template existente [Portal Azure] [CLI]

No portal, crie a VM HELIOSTAR-VM-WEB01 manualmente pelo wizard:

  • Resource Group: HELIOSTAR-RG-APP
  • Region: East US, Availability Zone: 1
  • Image: Windows Server 2022 Datacenter
  • Size: Standard_D2s_v3
  • Username: heliostaradmin, Password: HeliostarVM@2024!
  • OS disk type: Premium SSD
  • Tags: Environment = Production

Antes de clicar em Create, acesse a aba Review + create e clique em Download a template for automation. Salve o template JSON localmente como heliostar-vm-template.json.

Modifique o template baixado:

  • Altere o vmName para HELIOSTAR-VM-WEB02
  • Altere a location para eastus
  • Altere a zone para ["2"]
  • Altere o imageReference.publisher para Canonical, offer para 0001-com-ubuntu-server-jammy, sku para 22_04-lts-gen2

Implante o template modificado via CLI:

az deployment group create --resource-group HELIOSTAR-RG-APP --template-file heliostar-vm-template.json

2. Configurar Encryption at Host [Portal Azure] [PowerShell]

Para a VM HELIOSTAR-VM-WEB01, configure encryption at host (requer que a feature esteja habilitada na subscription):

Habilite a feature na subscription:

Register-AzProviderFeature -FeatureName "EncryptionAtHost" -ProviderNamespace "Microsoft.Compute"

Aguarde o status Registered via Get-AzProviderFeature.

Depois, stop/deallocate a VM HELIOSTAR-VM-WEB01 e habilite encryption at host:

  • Portal > HELIOSTAR-VM-WEB01 > Disks > Additional settings > Encryption at host: Enabled

3. Gerenciar discos de VM [Portal Azure] [CLI]

Na VM HELIOSTAR-VM-DB01 (criar a Availability Set primeiro: HELIOSTAR-AVSET-DB no HELIOSTAR-RG-APP, Fault domains: 2, Update domains: 5; depois criar a VM com imagem Windows Server 2022, size D2s_v3, dentro da Availability Set):

Adicione um disco de dados à VM HELIOSTAR-VM-DB01:

  • Portal > HELIOSTAR-VM-DB01 > Disks > + Create and attach a new disk
  • Name: HELIOSTAR-DISK-DB01-DATA
  • Size: 128 GiB
  • SKU: Premium SSD
  • Encryption: Platform-managed key

Faça o resize da VM HELIOSTAR-VM-WEB02 de Standard_D2s_v3 para Standard_D4s_v3:

  • Deallocate a VM primeiro
  • Portal > Size > Selecione Standard_D4s_v3
  • Confirme via: az vm show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-VM-WEB02 --query "hardwareProfile.vmSize"

4. Mover VM para outro Resource Group [Portal Azure] [PowerShell]

Mova HELIOSTAR-VM-WEB02 de HELIOSTAR-RG-APP para HELIOSTAR-RG-INFRA e de volta para HELIOSTAR-RG-APP:

  • Portal > HELIOSTAR-VM-WEB02 > Overview > Move > Move to another resource group
  • Selecione HELIOSTAR-RG-INFRA, confirme que todos os recursos dependentes (NIC, IP público, disco) estão incluídos
  • Após a operação concluir, mova de volta para HELIOSTAR-RG-APP

Confirme a localização final:

az vm show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-VM-WEB02 --query "resourceGroup"

Valor capturado

ValorOnde encontrarUsado na etapa
Resource ID de HELIOSTAR-VM-WEB01Portal > VM > PropertiesEtapas 8, 9, 11, 12
Resource ID de HELIOSTAR-VM-WEB02Portal > VM > PropertiesEtapas 8, 9, 11, 12
Resource ID de HELIOSTAR-VM-DB01Portal > VM > PropertiesEtapas 9, 11, 12
Private IP de cada VMPortal > VM > NetworkingEtapa 9

Critérios de validação

1. Execute:

az vm list --resource-group HELIOSTAR-RG-APP --query "[].{Name:name,Zone:zones[0],Status:provisioningState}" --output table

Resultado esperado: HELIOSTAR-VM-WEB01 na zone 1, HELIOSTAR-VM-WEB02 na zone 2, ambas Succeeded.

2. Execute:

az vm show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-VM-WEB01 --query "securityProfile.encryptionAtHost"

Resultado esperado: true.

3. Execute:

az disk show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-DISK-DB01-DATA --query "{Size:diskSizeGb,Sku:sku.name}" --output json

Resultado esperado: Size = 128, Sku = Premium_LRS.


Etapa 8 — Virtual Machine Scale Sets e Containers (Objetivo 3.3 e 3.4)

Contexto da etapa

O portal de clientes da Heliostar recebe picos de acesso durante eventos climáticos extremos (quando os clientes verificam a produção de seus painéis). A Heliostar precisa de um Azure VM Scale Set para escalar automaticamente e de containers para os microserviços de telemetria.

Diagrama da etapa

[ HELIOSTAR-RG-APP ]

VM Scale Set: HELIOSTAR-VMSS-WEB
Min: 2 instances
Max: 10 instances
Scale out: CPU > 70% por 5 min
Scale in: CPU < 30% por 5 min
Load Balancer: HELIOSTAR-LB-VMSS

Container Registry: heliostarregistry
Image: heliostar-telemetria:latest

Container Instance: HELIOSTAR-ACI-TELEMETRIA
Image: heliostar-telemetria:latest
Cores: 1, Memory: 1.5 GiB

Container App: HELIOSTAR-ACA-TELEMETRIA
Environment: HELIOSTAR-ACAENV
Min replicas: 1, Max: 5

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar Azure VM Scale Set com autoscale [Portal Azure] [CLI]

No portal > Virtual machine scale sets > Create:

  • Resource Group: HELIOSTAR-RG-APP
  • Name: HELIOSTAR-VMSS-WEB
  • Region: East US, Availability zones: 1, 2, 3
  • Orchestration mode: Uniform
  • Image: Ubuntu 22.04 LTS
  • Size: Standard_B1s (para reduzir custo no lab)
  • Initial instance count: 2
  • Scaling policy: Autoscaling

Configure regras de autoscale:

  • Scale out: CPU average > 70% for 5 minutes → add 1 instance
  • Scale in: CPU average < 30% for 5 minutes → remove 1 instance
  • Min: 2, Max: 10, Default: 2

Associe a um Load Balancer público criado durante o processo:

  • New load balancer: HELIOSTAR-LB-VMSS

2. Criar Azure Container Registry e publicar imagem [Portal Azure] [CLI]

Crie o Azure Container Registry:

  • Name: heliostarregistry (lowercase, globalmente único)
  • Resource Group: HELIOSTAR-RG-APP
  • Location: East US
  • SKU: Basic
  • Admin user: Enabled

Construa e publique uma imagem de container usando um Dockerfile simples. Na Azure Cloud Shell (ou localmente com Docker instalado):

Crie um Dockerfile com conteúdo:

FROM nginx:alpine
RUN echo "<h1>Heliostar Telemetria v1.0</h1>" > /usr/share/nginx/html/index.html
EXPOSE 80

Construa e publique para o ACR:

az acr build --registry heliostarregistry --image heliostar-telemetria:latest .

3. Provisionar Azure Container Instances [Portal Azure] [CLI]

Crie uma Container Instance:

  • Resource Group: HELIOSTAR-RG-APP
  • Container name: HELIOSTAR-ACI-TELEMETRIA
  • Region: East US
  • Image source: Azure Container Registry
  • Registry: heliostarregistry
  • Image: heliostar-telemetria:latest
  • CPU cores: 1
  • Memory: 1.5
  • DNS name label: heliostar-telemetria-[random]
  • Port: 80

Confirme que o container está rodando:

az container show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-ACI-TELEMETRIA --query "{State:provisioningState,IP:ipAddress.ip,FQDN:ipAddress.fqdn}"

4. Criar Azure Container Apps [Portal Azure] [CLI]

Crie o Container Apps Environment:

  • Name: HELIOSTAR-ACAENV
  • Resource Group: HELIOSTAR-RG-APP
  • Region: East US

Crie o Container App:

  • Name: HELIOSTAR-ACA-TELEMETRIA
  • Environment: HELIOSTAR-ACAENV
  • Image: heliostarregistry.azurecr.io/heliostar-telemetria:latest
  • Min replicas: 1
  • Max replicas: 5
  • Scale rule: HTTP traffic, concurrent requests 10
  • Ingress: Enabled, External, Port 80

Acesse a URL gerada pelo Container App e confirme que retorna a página do Nginx.

Valor capturado

ValorOnde encontrarUsado na etapa
Nome do ACR heliostarregistryPortal > ACR > OverviewEtapa 8 (deploy)
URL do Container AppPortal > Container App > OverviewEtapa 11
Resource ID do VMSS HELIOSTAR-VMSS-WEBPortal > VMSS > PropertiesEtapa 11

Critérios de validação

1. Execute:

az vmss show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-VMSS-WEB --query "{Capacity:sku.capacity,OverprovisionEnabled:overprovision}"

Resultado esperado: Capacity = 2.

2. Acesse a URL do container http://[FQDN-ACI] via curl:

curl http://[FQDN_ACI_TELEMETRIA]

Resultado esperado: HTML contendo Heliostar Telemetria v1.0.

3. Acesse a URL do Container App via curl. Resultado esperado: mesmo HTML do Nginx com resposta HTTP 200.


Etapa 9 — Create and configure Azure App Service (Objetivo 3.5)

Contexto da etapa

O portal de clientes da Heliostar precisa de uma plataforma de hospedagem gerenciada para o site institucional e para a API de monitoramento. Esta etapa provisiona um App Service Plan com dois App Services, configura deployment slots, certificados TLS e mapeia um domínio personalizado simulado.

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Provisionar App Service Plan e criar App Services [Portal Azure] [CLI]

Crie o App Service Plan:

  • Name: HELIOSTAR-ASP-PROD
  • Resource Group: HELIOSTAR-RG-APP
  • OS: Windows
  • Region: East US
  • Pricing tier: Standard S1 (necessário para deployment slots e autoscale)

Crie dois App Services usando este plan:

  • App 1: heliostar-portal (portal de clientes), Runtime: .NET 8
  • App 2: heliostar-api (API de monitoramento), Runtime: Node.js 20 LTS

Adicione as tags obrigatórias em ambos: Environment = Production, CostCenter = TI-HELIOSTAR.

2. Configurar backup e TLS [Portal Azure]

Configure o backup para heliostar-portal:

  • Portal > heliostar-portal > Backups > Configure
  • Storage Account: heliostarstore, Container: criar app-backups
  • Retention: 30 days
  • Frequency: Daily

Configure TLS/SSL:

  • Portal > heliostar-portal > TLS/SSL settings
  • Minimum TLS Version: 1.2
  • HTTPS Only: On
  • Em Certificates, confirme o certificado gerenciado gratuito do App Service (no plano S1, disponível ao mapear domínio customizado)

3. Configurar deployment slots [Portal Azure] [CLI]

Para o App Service heliostar-portal, crie um deployment slot:

  • Portal > heliostar-portal > Deployment slots > Add slot
  • Name: staging
  • Clone settings from: heliostar-portal (production)

Implante uma versão de teste no slot staging via zipDeploy:

  • Crie um arquivo index.html com conteúdo <h1>Heliostar Staging</h1>
  • Compacte em app-staging.zip
  • Faça o deploy no slot: az webapp deployment source config-zip --resource-group HELIOSTAR-RG-APP --name heliostar-portal --slot staging --src app-staging.zip

Execute o slot swap (staging → production):

az webapp deployment slot swap --resource-group HELIOSTAR-RG-APP --name heliostar-portal --slot staging --target-slot production

Confirme que o conteúdo de produção mudou acessando a URL do app.

4. Configurar escalabilidade e custom domain [Portal Azure]

Configure autoscale para o App Service Plan HELIOSTAR-ASP-PROD:

  • Portal > HELIOSTAR-ASP-PROD > Scale out (App Service plan)
  • Adicione regra: CPU > 70% → aumentar 1 instância
  • Adicione regra: CPU < 30% → diminuir 1 instância
  • Min: 1, Max: 3, Default: 1

Mapeie um domínio customizado simulado:

  • Portal > heliostar-portal > Custom domains > Add custom domain
  • Domain: portal.heliostar.internal (para lab, use CNAME com domínio que você controla ou registre o domínio sem validação em modo Custom Domain Verification ID)
  • Confirme o Custom Domain Verification ID e documente-o

Configure networking:

  • Portal > heliostar-portal > Networking > VNet Integration
  • Adicione VNet Integration apontando para HELIOSTAR-VNET-APP (a ser criado na Etapa 10) ou documente o processo para configurar após a criação da VNet

Valor capturado

ValorOnde encontrarUsado na etapa
URL do app heliostar-portalPortal > App Service > OverviewEtapas 10, 12
URL do slot stagingPortal > Deployment slots > stagingEtapa 9 validação
Nome do App Service PlanPortal > ASP > OverviewEtapa 9

Critérios de validação

1. Execute:

az webapp show --resource-group HELIOSTAR-RG-APP --name heliostar-portal --query "{State:state,DefaultHostName:defaultHostName,HttpsOnly:httpsOnly}" --output json

Resultado esperado: State = Running, HttpsOnly = true.

2. Execute:

az webapp deployment slot list --resource-group HELIOSTAR-RG-APP --name heliostar-portal --output table

Resultado esperado: slot staging listado.

3. Acesse https://heliostar-portal.azurewebsites.net via curl e confirme que o conteúdo retornado é o da versão que estava no slot staging (após o swap).


Etapa 10 — Configure and manage virtual networks (Objetivo 4.1 e 4.2)

Contexto da etapa

As VMs e App Services da Heliostar precisam de uma rede segmentada. Esta etapa cria as VNets, configura peering entre elas, implementa NSGs com regras granulares, configura Azure Bastion para acesso seguro às VMs sem IP público, e implementa service endpoints e private endpoints para isolar o acesso ao Storage Account.

Diagrama da etapa

[ East US ]

HELIOSTAR-VNET-HUB (10.10.0.0/16)
HELIOSTAR-SNET-MGMT (10.10.1.0/24)
Azure Bastion Host: HELIOSTAR-BASTION
HELIOSTAR-SNET-INFRA (10.10.2.0/24)
HELIOSTAR-VM-WEB01 (mover para cá)

HELIOSTAR-VNET-APP (10.20.0.0/16)
HELIOSTAR-SNET-WEB (10.20.1.0/24)
HELIOSTAR-VM-WEB02
NSG: HELIOSTAR-NSG-WEB
HELIOSTAR-SNET-API (10.20.2.0/24)
HELIOSTAR-VM-DB01
NSG: HELIOSTAR-NSG-API

VNet Peering: HUB <-> APP (Allow forwarded traffic)

Private Endpoint: HELIOSTAR-PE-STORAGE
→ heliostarstore (Blob service)
→ HELIOSTAR-SNET-API

UDR: HELIOSTAR-UDR-WEB
0.0.0.0/0 → NVA ou Internet (rotar para Etapa 10)

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar VNets, subnets e VNet Peering [Portal Azure] [CLI]

Crie as VNets:

HELIOSTAR-VNET-HUB:

  • Resource Group: HELIOSTAR-RG-INFRA
  • Address space: 10.10.0.0/16
  • Subnets: HELIOSTAR-SNET-MGMT (10.10.1.0/24), HELIOSTAR-SNET-INFRA (10.10.2.0/24), AzureBastionSubnet (10.10.255.0/27)

HELIOSTAR-VNET-APP:

  • Resource Group: HELIOSTAR-RG-APP
  • Address space: 10.20.0.0/16
  • Subnets: HELIOSTAR-SNET-WEB (10.20.1.0/24), HELIOSTAR-SNET-API (10.20.2.0/24)

Crie VNet Peering bidirecional:

  • HELIOSTAR-PEER-HUB-TO-APP: de HUB para APP, Allow forwarded traffic, Allow gateway transit desabilitado
  • HELIOSTAR-PEER-APP-TO-HUB: de APP para HUB

Confirme os peerings:

az network vnet peering show --resource-group HELIOSTAR-RG-INFRA --vnet-name HELIOSTAR-VNET-HUB --name HELIOSTAR-PEER-HUB-TO-APP --query "peeringState"

2. Criar e configurar NSGs [Portal Azure] [CLI]

Crie o NSG HELIOSTAR-NSG-WEB e associe à subnet HELIOSTAR-SNET-WEB:

Regras de entrada:

PrioridadeNomePortaProtoOrigemAção
100Allow-HTTP80TCPAnyAllow
110Allow-HTTPS443TCPAnyAllow
120Allow-RDP-Bastion3389TCP10.10.1.0/24Allow
4096Deny-All-InboundAnyAnyAnyDeny

Crie o NSG HELIOSTAR-NSG-API e associe à subnet HELIOSTAR-SNET-API:

  • Permita porta 1433 (SQL) apenas de 10.20.1.0/24
  • Permita porta 22 (SSH) apenas de 10.10.1.0/24
  • Negue todo o resto

Demonstre a ausência de proteção antes da configuração: verifique as effective security rules numa NIC sem NSG e mostre que todas as portas estão abertas.

3. Implementar Azure Bastion [Portal Azure]

Crie o Azure Bastion Host:

  • Name: HELIOSTAR-BASTION
  • Resource Group: HELIOSTAR-RG-INFRA
  • VNet: HELIOSTAR-VNET-HUB
  • Subnet: AzureBastionSubnet
  • Tier: Basic
  • Public IP: HELIOSTAR-PIP-BASTION (Standard SKU)

Após a criação (pode levar ~10 minutos), conecte-se à VM HELIOSTAR-VM-WEB01 via Bastion pelo portal:

  • Portal > HELIOSTAR-VM-WEB01 > Connect > Bastion
  • Username: heliostaradmin, Password: HeliostarVM@2024!
  • Confirme que a conexão RDP abre sem necessitar de IP público na VM

4. Configurar Private Endpoint para Storage Account [Portal Azure] [CLI]

Antes de criar o Private Endpoint, demonstre que o Storage Account é acessível publicamente:

az storage blob list --account-name heliostarstore --container-name relatorios --sas-token "[SAS_TOKEN_1]" --output table

Resultado esperado: blobs listados (acesso público funcionando).

Crie o Private Endpoint:

  • Name: HELIOSTAR-PE-STORAGE
  • Resource Group: HELIOSTAR-RG-APP
  • Resource: heliostarstore
  • Target sub-resource: blob
  • VNet: HELIOSTAR-VNET-APP, Subnet: HELIOSTAR-SNET-API
  • Integrate with private DNS zone: Yes (zona: privatelink.blob.core.windows.net)

Após criar o PE, desabilite o acesso público ao Storage Account:

  • heliostarstore > Networking > Public network access: Disabled

Configure a User-Defined Route HELIOSTAR-UDR-WEB:

  • Route: Route-To-Internet, address prefix 0.0.0.0/0, next hop Internet
  • Associe à subnet HELIOSTAR-SNET-WEB

Valor capturado

ValorOnde encontrarUsado na etapa
Private IP do Private EndpointPortal > PE > Network interfaceEtapa 10
Resource ID da VNET-HUBPortal > VNet > PropertiesEtapas 11, 12
Resource ID da VNET-APPPortal > VNet > PropertiesEtapas 11, 12

Critérios de validação

1. Execute:

az network vnet peering show --resource-group HELIOSTAR-RG-INFRA --vnet-name HELIOSTAR-VNET-HUB --name HELIOSTAR-PEER-HUB-TO-APP --query "{State:peeringState,ForwardedTraffic:allowForwardedTraffic}"

Resultado esperado: State = Connected, ForwardedTraffic = true.

2. Execute (com acesso público desabilitado, deve falhar):

az storage blob list --account-name heliostarstore --container-name relatorios --sas-token "[SAS_TOKEN_1]" --output table

Resultado esperado: erro de conectividade ou AuthorizationFailure (acesso público bloqueado).

3. No portal > HELIOSTAR-NSG-WEB > Effective security rules, confirme que a regra Deny-All-Inbound com prioridade 4096 está listada.


Etapa 11 — Configure name resolution and load balancing (Objetivo 4.3)

Contexto da etapa

A Heliostar precisa de resolução de nomes interna para os servidores e de balanceamento de carga para o portal de clientes. Esta etapa configura Azure DNS com zonas privadas, um Load Balancer público para as VMs web e um Load Balancer interno para as VMs de banco de dados, além de troubleshoot de conectividade de rede.

Diagrama da etapa

[ Resolução de nomes ]
Zona DNS privada: heliostar.internal
heliostar-vm-web01 → 10.10.2.10
heliostar-vm-web02 → 10.20.1.11
heliostar-vm-db01 → 10.20.2.10
Vinculada a: HELIOSTAR-VNET-HUB e HELIOSTAR-VNET-APP

[ Load Balancing ]
Public LB: HELIOSTAR-LB-PUBLIC
Frontend: HELIOSTAR-PIP-LB (Standard, Zone-redundant)
Backend: HELIOSTAR-VM-WEB01 e HELIOSTAR-VM-WEB02
Rule: HTTP (80) e HTTPS (443)
Health probe: HTTP /health (porta 80)

Internal LB: HELIOSTAR-ILB-DB
Frontend IP: 10.20.2.200
Backend: HELIOSTAR-VM-DB01
Rule: SQL (1433)

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Configurar Azure Private DNS Zone [Portal Azure] [CLI]

Crie a Private DNS Zone:

  • Name: heliostar.internal
  • Resource Group: HELIOSTAR-RG-INFRA

Vincule a zona às VNets:

  • Link HELIOSTAR-VNET-HUB: Auto registration Enabled
  • Link HELIOSTAR-VNET-APP: Auto registration Enabled

Crie registros A manualmente:

az network private-dns record-set a add-record \
--resource-group HELIOSTAR-RG-INFRA \
--zone-name heliostar.internal \
--record-set-name heliostar-vm-db01 \
--ipv4-address 10.20.2.10

Confirme a resolução de dentro de uma VM (conecte-se via Bastion ao HELIOSTAR-VM-WEB01):

nslookup heliostar-vm-db01.heliostar.internal

2. Criar Load Balancer Público [Portal Azure] [CLI]

Crie o Load Balancer Público:

  • Name: HELIOSTAR-LB-PUBLIC
  • Resource Group: HELIOSTAR-RG-APP
  • SKU: Standard
  • Type: Public
  • Frontend IP: HELIOSTAR-PIP-LB, Zone-redundant

Configure:

  • Backend pool: HELIOSTAR-LB-BE-WEB, adicione NICs de HELIOSTAR-VM-WEB01 e HELIOSTAR-VM-WEB02
  • Health probe: HELIOSTAR-LB-PROBE-HTTP, HTTP, porta 80, path /, interval 15s, unhealthy threshold 2
  • Load balancing rule: HELIOSTAR-LB-RULE-HTTP, porta 80, backend porta 80, session persistence None

3. Criar Load Balancer Interno [Portal Azure]

Crie o Load Balancer Interno:

  • Name: HELIOSTAR-ILB-DB
  • Resource Group: HELIOSTAR-RG-APP
  • SKU: Standard
  • Type: Internal
  • VNet: HELIOSTAR-VNET-APP, Subnet: HELIOSTAR-SNET-API
  • Frontend IP: 10.20.2.200, Assignment: Static

Configure:

  • Backend pool: adicione NIC de HELIOSTAR-VM-DB01
  • Health probe: TCP, porta 1433, interval 15s
  • LB Rule: porta 1433, backend 1433, Floating IP: Disabled

4. Troubleshoot conectividade de rede [Portal Azure] [CLI]

Simule um problema de conectividade: remova temporariamente a regra Allow-HTTP do NSG HELIOSTAR-NSG-WEB (ou crie uma regra Deny com prioridade menor que 100 para porta 80).

Use o Azure Network Watcher para diagnosticar:

  • Portal > Network Watcher > IP flow verify
    • VM: HELIOSTAR-VM-WEB01, Direction: Inbound, Protocol: TCP, Local port: 80, Remote IP: 1.2.3.4
    • Resultado esperado com a regra de deny ativa: Access = Deny, nome da regra que bloqueia

Use também a Connection Monitor:

  • Crie um monitor: HELIOSTAR-CM-WEB
  • Source: HELIOSTAR-VM-WEB01
  • Destination: IP público do Load Balancer, porta 80
  • Confirme o estado da conectividade

Restaure a regra de Allow-HTTP e confirme que o IP flow verify retorna Access = Allow.

Valor capturado

ValorOnde encontrarUsado na etapa
IP público do LB HELIOSTAR-PIP-LBPortal > Public IP > OverviewEtapa 12
Frontend IP do ILB HELIOSTAR-ILB-DBPortal > ILB > Frontend IPEtapa 12

Critérios de validação

1. Execute via Bastion na VM HELIOSTAR-VM-WEB01:

nslookup heliostar-vm-db01.heliostar.internal

Resultado esperado: resolução para 10.20.2.10.

2. Execute:

az network lb show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-LB-PUBLIC --query "{SKU:sku.name,ProvisioningState:provisioningState}" --output json

Resultado esperado: SKU = Standard, ProvisioningState = Succeeded.

3. O IP Flow Verify para porta 80 deve retornar Allow após restauração da regra.


Etapa 12 — Monitor and backup resources (Objetivo 5.1 e 5.2)

Contexto da etapa

Esta é a etapa de integração final. A Heliostar precisa de monitoramento abrangente de todas as VMs, storage e rede, e de um plano de backup e recuperação de desastres para as VMs críticas. Esta etapa configura Azure Monitor completo, cria o Recovery Services Vault, configura backup e Site Recovery, e valida o ambiente completo.

Diagrama da etapa

[ Azure Monitor ]
Log Analytics Workspace: HELIOSTAR-LAW
|
+-- VM Insights: WEB01, WEB02, DB01, VMSS
+-- Diagnostics: heliostarstore, VNET, NSG
+-- Alerts:
HELIOSTAR-Alert-CPU (VM CPU > 85%)
HELIOSTAR-Alert-Storage (Transactions > 1000)
+-- Action Group: HELIOSTAR-AG (email)

[ Azure Backup ]
Recovery Services Vault: HELIOSTAR-RSV
Policy: HELIOSTAR-Policy-VMBackup
Daily 23:00, retain 30d/12w/12m
Protected: WEB01, WEB02, DB01

[ Azure Site Recovery ]
Source: East US
Target: Brazil South (HELIOSTAR-RG-DR)
Replication: WEB01, WEB02
Recovery Plan: HELIOSTAR-RP-WEB

Ambiente de execução

ModoDisponível nesta etapa
Portal AzureSim
PowerShellSim
CLISim
IaC (Nenhuma)Não

Tarefas

1. Criar Log Analytics Workspace e configurar Azure Monitor [Portal Azure] [CLI]

Crie o Log Analytics Workspace:

  • Name: HELIOSTAR-LAW
  • Resource Group: HELIOSTAR-RG-INFRA
  • Region: East US
  • Retention: 30 days

Habilite VM Insights para as três VMs (HELIOSTAR-VM-WEB01, HELIOSTAR-VM-WEB02, HELIOSTAR-VM-DB01):

  • Portal > cada VM > Insights > Enable > workspace HELIOSTAR-LAW

Configure Diagnostic Settings para o Storage Account heliostarstore:

  • Portal > heliostarstore > Diagnostic settings > Add
  • Log categories: StorageRead, StorageWrite, StorageDelete
  • Metrics: AllMetrics
  • Destination: HELIOSTAR-LAW

2. Criar alertas e Action Group [Portal Azure]

Crie o Action Group HELIOSTAR-AG:

  • Resource Group: HELIOSTAR-RG-INFRA
  • Notifications: Email para heliostar-admin@[tenant].onmicrosoft.com
  • Display name: HeliostarOps

Crie dois alertas:

Alerta 1 — HELIOSTAR-Alert-VMCPUHigh:

  • Scope: Resource Group HELIOSTAR-RG-APP
  • Signal: Percentage CPU > 85% por 5 minutos
  • Severity: 2 (Warning)
  • Action Group: HELIOSTAR-AG

Alerta 2 — HELIOSTAR-Alert-StorageTransactions:

  • Scope: heliostarstore
  • Signal: Transactions > 1000 em 5 minutos
  • Severity: 3 (Informational)

Crie também um Alert Processing Rule para suprimir todos os alertas durante janela de manutenção (sábados 02h-04h):

  • Portal > Azure Monitor > Alerts > Alert processing rules > Create
  • Scope: Resource Group HELIOSTAR-RG-APP
  • Action: Suppress notifications
  • Schedule: Weekly, Saturday, 02:00-04:00

3. Configurar Recovery Services Vault e backup de VMs [Portal Azure]

Crie o Recovery Services Vault:

  • Name: HELIOSTAR-RSV
  • Resource Group: HELIOSTAR-RG-INFRA
  • Region: East US

Crie a política de backup:

  • Name: HELIOSTAR-Policy-VMBackup
  • Backup frequency: Daily, Time: 23:00
  • Retain daily backups: 30 days
  • Retain weekly: Sundays, 12 weeks
  • Retain monthly: First Sunday, 12 months

Configure backup para as três VMs via HELIOSTAR-RSV > Backup > Azure Virtual Machine. Execute um backup imediato em HELIOSTAR-VM-WEB01:

  • Portal > HELIOSTAR-RSV > Backup items > Azure Virtual Machine > HELIOSTAR-VM-WEB01 > Backup now

Aguarde o backup completar e confirme em Backup Jobs.

4. Configurar Azure Site Recovery e testar failover [Portal Azure]

No vault HELIOSTAR-RSV, configure Site Recovery para as VMs HELIOSTAR-VM-WEB01 e HELIOSTAR-VM-WEB02:

  • Portal > HELIOSTAR-RSV > Site Recovery > Azure virtual machines > Enable replication
  • Source region: East US
  • Target region: Brazil South
  • Target Resource Group: HELIOSTAR-RG-DR
  • Target VNet: criar HELIOSTAR-VNET-DR (10.40.0.0/16) em Brazil South
  • Replication policy: crie HELIOSTAR-ASR-Policy com RPO 1 hour, recovery points 24 hours

Após a replicação atingir estado Protected, crie um Recovery Plan:

  • Name: HELIOSTAR-RP-WEB
  • Group 1: HELIOSTAR-VM-WEB01
  • Group 2: HELIOSTAR-VM-WEB02

Execute um Test Failover:

  • Recovery plan: HELIOSTAR-RP-WEB
  • Recovery point: Latest processed
  • VNet: criar HELIOSTAR-VNET-DR-TEST (10.50.0.0/16, Brazil South)

Confirme que as VMs de teste foram criadas com sucesso. Execute Cleanup test failover.

Consulte os logs de backup e ASR no portal e analise a query KQL no LAW:

AzureDiagnostics
| where ResourceType == "RECOVERYSERVICES"
| where OperationName contains "Backup" or OperationName contains "Replication"
| project TimeGenerated, ResourceType, OperationName, ResultType, ResultDescription
| order by TimeGenerated desc
| take 50

Valor capturado

ValorOnde encontrarUsado na etapa
Workspace ID do HELIOSTAR-LAWPortal > LAW > PropertiesValidação global
Resource ID do HELIOSTAR-RSVPortal > RSV > PropertiesValidação global
Status de replicação das VMsPortal > RSV > Replicated itemsValidação global

Critérios de validação

1. Execute:

az backup job list --resource-group HELIOSTAR-RG-INFRA --vault-name HELIOSTAR-RSV --query "[?status=='Completed'].{Job:name,VM:properties.entityFriendlyName}" --output table

Resultado esperado: ao menos um job com status Completed para HELIOSTAR-VM-WEB01.

2. No portal > HELIOSTAR-RSV > Replicated items, confirme que ambas as VMs web aparecem com Replication health = Healthy.

3. Execute no Log Analytics Workspace via portal > HELIOSTAR-LAW > Logs:

Heartbeat
| where Computer contains "HELIOSTAR"
| summarize LastHeartbeat = max(TimeGenerated) by Computer
| order by LastHeartbeat desc

Resultado esperado: as três VMs (HELIOSTAR-VM-WEB01, HELIOSTAR-VM-WEB02, HELIOSTAR-VM-DB01) listadas com LastHeartbeat dentro dos últimos 5 minutos.

4. No portal Monitor > Alerts > Alert rules, confirme que HELIOSTAR-Alert-VMCPUHigh e HELIOSTAR-Alert-StorageTransactions estão com status Enabled.


Validação Global do Ambiente

Checklist de recursos criados

RecursoTipoLocalizaçãoEstado esperado
HELIOSTAR-GRP-INFRAEntra ID GroupEntra IDSecurity, membros: usr-infra01
HELIOSTAR-GRP-DEVEntra ID GroupEntra IDSecurity, membros: usr-dev01
HELIOSTAR-GRP-DADOSEntra ID GroupEntra IDSecurity, membros: usr-dados01, guest B2B
SSPR configuradoEntra IDEntra IDSelected, grupo: GRP-INFRA
HELIOSTAR-Role-VMOperatorCustom RBAC RoleSubscriptionIsCustom = true, 3 actions
RBAC assignments (5 atribuições)Role AssignmentsScopes variadosTodos Succeeded
HELIOSTAR-MGManagement GroupAzureContém HELIOSTAR-SUB
HELIOSTAR-Policy-RequireTagEnvironmentAzure PolicyMG scopeEnabled, Deny
Policy Allowed LocationsAzure PolicyMG scopeEnabled, Deny, eastus/brazilsouth
HELIOSTAR-LOCK-INFRAResource LockRG-INFRACanNotDelete
HELIOSTAR-BUDGETCost BudgetHELIOSTAR-SUB$200, alerts 80%/100%
Tags nos RGs (3 tags cada)Tags3 RGsEnvironment, CostCenter, Owner
heliostarstoreStorage AccountEast USGRS, CMK encryption
heliostardrstoreStorage AccountBrazil SouthLRS
heliostar-kvKey VaultEast USStandard, purge protection
HELIOSTAR-KEY-StorageKey Vault KeyKey VaultRSA 2048, Enabled
Container relatoriosBlob ContainerheliostarstorePrivate, 3 CSVs
Container telemetriaBlob ContainerheliostarstorePrivate, versioning
Container relatorios-drBlob ContainerheliostardrstoreObject replication target
File share heliostar-docsAzure Filesheliostarstore100 GiB, soft delete 14d
Lifecycle policy HELIOSTAR-Lifecycle-TelemetriaLifecycleheliostarstoreActive
HELIOSTAR-VM-WEB01VM WindowsEast US Zone 1Running, encryption at host
HELIOSTAR-VM-WEB02VM UbuntuEast US Zone 2Running, D4s_v3
HELIOSTAR-VM-DB01VM WindowsEast USRunning, in AVSET
HELIOSTAR-AVSET-DBAvailability SetEast US2 FD, 5 UD
HELIOSTAR-DISK-DB01-DATAManaged DiskEast US128 GiB Premium SSD
HELIOSTAR-VMSS-WEBVM Scale SetEast US Zones 1,2,32 instances, autoscale
HELIOSTAR-LB-VMSSLoad BalancerEast USStandard, public
heliostarregistryContainer RegistryEast USBasic, admin enabled
HELIOSTAR-ACI-TELEMETRIAContainer InstanceEast USRunning, port 80
HELIOSTAR-ACAENVContainer Apps EnvEast USActive
HELIOSTAR-ACA-TELEMETRIAContainer AppEast USRunning, min 1 replica
HELIOSTAR-ASP-PRODApp Service PlanEast USStandard S1
heliostar-portalApp ServiceEast USRunning, HTTPS only
heliostar-apiApp ServiceEast USRunning
Slot stagingDeployment Slotheliostar-portalRunning
HELIOSTAR-VNET-HUBVNetEast US10.10.0.0/16, 3 subnets
HELIOSTAR-VNET-APPVNetEast US10.20.0.0/16, 2 subnets
HELIOSTAR-PEER-HUB-TO-APPVNet PeeringEast USConnected
HELIOSTAR-PEER-APP-TO-HUBVNet PeeringEast USConnected
HELIOSTAR-NSG-WEBNSGEast US4 rules, associado a SNET-WEB
HELIOSTAR-NSG-APINSGEast USRules, associado a SNET-API
HELIOSTAR-BASTIONAzure BastionEast USBasic, Running
HELIOSTAR-PE-STORAGEPrivate EndpointEast USSucceeded, blob
HELIOSTAR-UDR-WEBRoute TableEast US0.0.0.0/0 Internet
heliostar.internalPrivate DNS ZoneLinked a HUB e APP
HELIOSTAR-LB-PUBLICLoad BalancerEast USStandard, backend 2 VMs
HELIOSTAR-ILB-DBInternal LBEast USStandard, 10.20.2.200
HELIOSTAR-LAWLog Analytics WorkspaceEast USActive, 30d retention
HELIOSTAR-AGAction GroupEast USActive, email configured
HELIOSTAR-Alert-VMCPUHighAzure Monitor AlertEast USEnabled
HELIOSTAR-Alert-StorageTransactionsAzure Monitor AlertEast USEnabled
HELIOSTAR-RSVRecovery Services VaultEast USActive
HELIOSTAR-Policy-VMBackupBackup PolicyRSVDaily 23:00, 30d/12w/12m
HELIOSTAR-ASR-PolicyASR Replication PolicyRSVRPO 1h, 24h recovery points
HELIOSTAR-RP-WEBRecovery PlanRSVWEB01 Group1, WEB02 Group2
HELIOSTAR-VNET-DRVNetBrazil South10.40.0.0/16

Testes de integração end-to-end

Teste 1 — Identidade, RBAC e governança

# Confirmar role assignment do grupo INFRA no RG-INFRA
az role assignment list --resource-group HELIOSTAR-RG-INFRA --assignee [OBJ_ID_GRP_INFRA] --query "[].{Role:roleDefinitionName,Scope:scope}" --output table

Resultado esperado: Contributor no escopo HELIOSTAR-RG-INFRA e Reader no escopo da subscription.

Tente criar um recurso sem tag Environment e confirme o bloqueio pela policy.


Teste 2 — Storage: acesso, replicação e criptografia

# Confirmar que o storage nao aceita acesso publico
curl -s "https://heliostarstore.blob.core.windows.net/relatorios?comp=list&restype=container" -o /dev/null -w "%{http_code}"

Resultado esperado: 403 ou erro de rede (acesso público desabilitado).

# Confirmar replicacao no storage de DR
az storage blob list --account-name heliostardrstore --container-name relatorios-dr --output table

Resultado esperado: arquivos CSV listados (replicados).


Teste 3 — Rede: peering, NSG e resolução DNS

Conecte-se via Bastion à VM HELIOSTAR-VM-WEB01 e execute:

ping heliostar-vm-db01.heliostar.internal
nslookup heliostar-vm-db01.heliostar.internal
Test-NetConnection -ComputerName 10.20.2.10 -Port 1433

Resultado esperado: ping e nslookup resolvem para 10.20.2.10; Test-NetConnection para porta 1433 retorna TcpTestSucceeded = True.


Teste 4 — Compute: VMs, VMSS e containers

# Confirmar instancias do VMSS
az vmss list-instances --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-VMSS-WEB --query "[].{ID:instanceId,State:provisioningState}" --output table

# Confirmar container app
az containerapp show --resource-group HELIOSTAR-RG-APP --name HELIOSTAR-ACA-TELEMETRIA --query "{Status:properties.provisioningState,URL:properties.configuration.ingress.fqdn}" --output json

Resultado esperado: 2 instâncias VMSS Succeeded; Container App com URL de ingress.

Acesse a URL do Container App e confirme HTTP 200 com HTML da Heliostar.


Teste 5 — Backup e DR: backup job e replicação ASR

# Confirmar backup jobs completados
az backup job list --resource-group HELIOSTAR-RG-INFRA --vault-name HELIOSTAR-RSV --query "[?status=='Completed'].{VM:properties.entityFriendlyName,Start:properties.startTime}" --output table

# Confirmar replicacao ASR
az site-recovery replication-protected-item list --resource-group HELIOSTAR-RG-DR --vault-name HELIOSTAR-RSV --query "[].{VM:properties.friendlyName,Health:properties.replicationHealth}" --output table

Resultado esperado: jobs completados para as VMs protegidas; saúde da replicação Healthy.


O que pode dar errado

EtapaSintomaCausa provável
1SSPR não ativaLicença P1/P2 ausente; ative trial do Entra ID P2
1Convite B2B não chegaDomínio bloqueado nas collaboration settings; adicione o domínio na allowlist
2Custom role não atribuiRole definition não salva corretamente; verifique JSON de assignableScopes
3Policy Allowed Locations não bloqueiaNão atribuída ao MG ou escopo incorreto; verifique o escopo da atribuição
3Lock não impede deleçãoLock aplicado no RG errado; confirme o nome exato do RG
4Storage firewall bloqueia acesso legítimoIP atual não adicionado; adicione "Add your client IP address"
4SAS token expira instantaneamenteFuso horário incorreto ao definir a expiração; use UTC ou ajuste o horário
5Object Replication não sincronizaVersioning não habilitado em um dos Storage Accounts; habilite em ambos
5CMK encryption falhaManaged Identity do Storage Account sem acesso ao Key Vault; atribua Key Vault Crypto Service Encryption User
6Lifecycle policy não aplicaPolicy criada mas blobs criados antes têm last-modified anterior; aguarde ou recrie os blobs
7Encryption at host falhaFeature EncryptionAtHost não registrada na subscription; execute Register-AzProviderFeature e aguarde
7ARM template deploy falhaNome da VM já existe ou parâmetros incorretos; verifique o vmName no template
8ACR build falhaDocker não disponível; use Azure Cloud Shell que tem Docker incluído
8Container App sem ingressIngress não habilitado durante criação; habilite via portal > Ingress > External
9Slot swap não disponívelPlano Free ou Shared; requer Standard S1 ou superior
9Custom domain validação falhaCNAME ou TXT não propagado; aguarde TTL ou use domínio que você controla
10Bastion não conecta à VMVM sem NIC na mesma VNet do Bastion; mova a VM ou crie Bastion na VNet correta
10Private Endpoint não resolveDNS zone não vinculada à VNet; adicione virtual network link
10VNet Peering brokenAddress spaces sobrepostos; verifique CIDRs de ambas as VNets
11DNS privado não resolveAuto-registration desabilitado; habilite no link da VNet
11LB health probe failingVMs sem serviço escutando na porta configurada; instale IIS ou Nginx nas VMs
12VM Insights não coleta dadosAMA não instalado; habilite via Extensions + Applications na VM
12ASR replicação falhaQuota de cores em Brazil South insuficiente; solicite aumento ou use tamanho menor
12Backup job falhaRSV e VM em regiões diferentes (não é o caso aqui); confirme que ambos estão em East US

Diagrama final do ambiente completo

[ Microsoft Entra ID ]
GRP-INFRA → usr-infra01 (Contributor RG-INFRA, Reader SUB, VMOperator RG-INFRA)
GRP-DEV → usr-dev01 (Contributor RG-APP)
GRP-DADOS → usr-dados01, guest B2B (Reader SUB, Storage Blob Data Reader RG-INFRA)
SSPR: habilitado para GRP-INFRA
Custom Role: HELIOSTAR-Role-VMOperator

[ HELIOSTAR-MG ]
Policies: RequireTagEnvironment (Deny), AllowedLocations (eastus/brazilsouth, Deny)
|
HELIOSTAR-SUB
Budget: $200/mes, alerts 80%/100%
|
+-- HELIOSTAR-RG-INFRA (East US) — Lock: CanNotDelete
| Tags: Environment=Production, CostCenter=TI-HELIOSTAR, Owner=admin
| +-- heliostarstore (GRS, CMK via heliostar-kv)
| | +-- Container: relatorios (3 CSVs, tier Cool, index tags)
| | +-- Container: telemetria (versioning, lifecycle policy)
| | +-- File share: heliostar-docs (100 GiB, soft delete 14d, snapshot)
| | +-- Object Replication → heliostardrstore/relatorios-dr
| +-- heliostar-kv (Key Vault Standard, HELIOSTAR-KEY-Storage)
| +-- HELIOSTAR-VNET-HUB (10.10.0.0/16)
| | +-- HELIOSTAR-SNET-MGMT (10.10.1.0/24) → HELIOSTAR-BASTION
| | +-- HELIOSTAR-SNET-INFRA (10.10.2.0/24) → HELIOSTAR-VM-WEB01
| | +-- AzureBastionSubnet (10.10.255.0/27)
| | +-- Peering → HELIOSTAR-VNET-APP
| +-- heliostar.internal (Private DNS Zone)
| | Linked: VNET-HUB, VNET-APP (auto-registration)
| +-- HELIOSTAR-LAW (Log Analytics, 30d)
| | VM Insights: WEB01, WEB02, DB01
| | Diagnostics: heliostarstore
| +-- HELIOSTAR-AG (Action Group, email)
| +-- HELIOSTAR-Alert-VMCPUHigh (CPU > 85%)
| +-- HELIOSTAR-Alert-StorageTransactions
| +-- HELIOSTAR-RSV (Recovery Services Vault)
| +-- Backup: WEB01, WEB02, DB01 (Policy: Daily 23h, 30d/12w/12m)
| +-- ASR: WEB01, WEB02 → Brazil South (RPO 1h)
| +-- Recovery Plan: HELIOSTAR-RP-WEB
|
+-- HELIOSTAR-RG-APP (East US)
| Tags: Environment=Production
| +-- HELIOSTAR-VNET-APP (10.20.0.0/16)
| | +-- HELIOSTAR-SNET-WEB (10.20.1.0/24) ← NSG-WEB, UDR-WEB
| | | +-- HELIOSTAR-VM-WEB01 (Windows, D2s_v3, Zone 1, encryption at host)
| | | +-- HELIOSTAR-VM-WEB02 (Ubuntu, D4s_v3, Zone 2)
| | +-- HELIOSTAR-SNET-API (10.20.2.0/24) ← NSG-API
| | +-- HELIOSTAR-VM-DB01 (Windows, D2s_v3, AVSET, data disk 128GB)
| | +-- HELIOSTAR-PE-STORAGE → heliostarstore (blob)
| +-- Peering → HELIOSTAR-VNET-HUB
| +-- HELIOSTAR-LB-PUBLIC (Standard, frontend: PIP-LB, backend: WEB01+WEB02)
| +-- HELIOSTAR-ILB-DB (Standard, frontend: 10.20.2.200, backend: DB01)
| +-- HELIOSTAR-VMSS-WEB (Ubuntu, zones 1/2/3, autoscale 2-10)
| | +-- HELIOSTAR-LB-VMSS (public)
| +-- HELIOSTAR-AVSET-DB (2FD, 5UD) ← DB01
| +-- heliostarregistry (ACR Basic)
| | +-- Image: heliostar-telemetria:latest
| +-- HELIOSTAR-ACI-TELEMETRIA (Container Instance, port 80)
| +-- HELIOSTAR-ACAENV
| | +-- HELIOSTAR-ACA-TELEMETRIA (Container App, min 1, max 5)
| +-- HELIOSTAR-ASP-PROD (Standard S1)
| +-- heliostar-portal (App Service, .NET 8, HTTPS only, VNet integration)
| | +-- Slot: staging
| +-- heliostar-api (App Service, Node.js 20)
|
+-- HELIOSTAR-RG-DR (Brazil South)
+-- heliostardrstore (LRS) ← Object Replication de heliostarstore
+-- HELIOSTAR-VNET-DR (10.40.0.0/16) ← ASR target VMs

Fluxos:
Identidade: Entra ID → RBAC → recursos Azure
Acesso Web: Internet → HELIOSTAR-LB-PUBLIC → WEB01/WEB02 (NSG-WEB)
Acesso DB: WEB01/WEB02 → HELIOSTAR-ILB-DB → DB01 (NSG-API)
Storage: VMs → Private Endpoint (blob) → heliostarstore
Files: VMs → heliostarstore/heliostar-docs (Kerberos, GRP-INFRA)
Backup: VMs → HELIOSTAR-RSV (daily 23h, LRS)
DR: VMs (East US) → ASR → Brazil South (RPO 1h, Recovery Plan)
Replicação: heliostarstore/relatorios → heliostardrstore/relatorios-dr
Monitoring: VMs/Storage → HELIOSTAR-LAW → Alerts → HELIOSTAR-AG (email)
DNS: heliostar.internal ↔ VNET-HUB e VNET-APP (auto-registration)
Containers: heliostarregistry → ACI-TELEMETRIA e ACA-TELEMETRIA
Governança: HELIOSTAR-MG → Policies (deny sem tag, deny fora de regiões)