[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 recurso | Tipo | Especificação mínima | Como provisionar |
|---|---|---|---|
Subscription HELIOSTAR-SUB | Azure Subscription | Pay-as-you-go ou Visual Studio | Portal Azure, conta com Owner |
Resource Group HELIOSTAR-RG-INFRA | Resource Group | East US | Portal Azure antes do início |
Resource Group HELIOSTAR-RG-APP | Resource Group | East US | Portal Azure antes do início |
Resource Group HELIOSTAR-RG-DR | Resource Group | Brazil South | Portal Azure antes do início |
| Entra ID Tenant | Microsoft Entra ID | Tenant padrão da subscription | Existente |
Usuário admin heliostar-admin@[tenant].onmicrosoft.com | Entra ID User | Global Administrator | Criado antes do início |
Credenciais de laboratório
| Conta | Tipo | Senha padrão | Observação |
|---|---|---|---|
heliostar-admin@[tenant].onmicrosoft.com | Entra ID Global Admin | Heliostar@2024! | Admin principal |
usr-infra01@[tenant].onmicrosoft.com | Entra ID User | UsrInfra@2024! | Membro do grupo Infra |
usr-dev01@[tenant].onmicrosoft.com | Entra ID User | UsrDev@2024! | Membro do grupo Dev |
usr-dados01@[tenant].onmicrosoft.com | Entra ID User | UsrDados@2024! | Membro do grupo Dados |
usr-externo01@parceiro.com | Entra ID B2B | ExtUser@2024! | Usuário externo (usar conta que você controla) |
| VM admin local | Local OS | HeliostarVM@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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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 nameInfra User 01, Usage locationBrazilusr-dev01: Display nameDev User 01, Usage locationBrazilusr-dados01: Display nameDados User 01, Usage locationBrazil
Em Microsoft Entra ID > Groups > New group, crie os grupos:
HELIOSTAR-GRP-INFRA: Security, Assigned, adicioneusr-infra01HELIOSTAR-GRP-DEV: Security, Assigned, adicioneusr-dev01HELIOSTAR-GRP-DADOS: Security, Assigned, adicioneusr-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 =EmaileMobile phone - Registration: Require registration when signing in =
Yes - Notifications: Notify users on password resets =
Yes
Valor capturado
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Object ID do grupo HELIOSTAR-GRP-INFRA | Entra ID > Groups > Properties | Etapas 2 e 3 |
Object ID do grupo HELIOSTAR-GRP-DEV | Entra ID > Groups > Properties | Etapas 2 e 3 |
Object ID do grupo HELIOSTAR-GRP-DADOS | Entra ID > Groups > Properties | Etapas 2 e 3 |
| UPN do usuário guest B2B | Entra ID > Users > Properties | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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:
| Grupo | Role | Escopo |
|---|---|---|
HELIOSTAR-GRP-INFRA | Contributor | HELIOSTAR-RG-INFRA |
HELIOSTAR-GRP-INFRA | Reader | Subscription HELIOSTAR-SUB |
HELIOSTAR-GRP-DEV | Contributor | HELIOSTAR-RG-APP |
HELIOSTAR-GRP-DADOS | Reader | Subscription HELIOSTAR-SUB |
HELIOSTAR-GRP-DADOS | Storage Blob Data Reader | HELIOSTAR-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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Role Definition ID do HELIOSTAR-Role-VMOperator | Get-AzRoleDefinition -Name HELIOSTAR-Role-VMOperator | Validação global |
Lista de roles efetivos de usr-infra01 | Get-AzRoleAssignment | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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
Environmentnã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 = ProductionCostCenter = TI-HELIOSTAROwner = 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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
ID do Management Group HELIOSTAR-MG | Portal > Management Groups > Properties | Etapas 9, 11 |
| Nome das policies atribuídas | Portal > Policy > Assignments | Validação global |
| Budget ID | Portal > Cost Management > Budgets | Validaçã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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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, useheliostar[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-INFRAo roleStorage File Data SMB Share Contributorno nível do Storage Account
Valor capturado
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
| Nome do Storage Account | Portal > Storage Account > Overview | Todas as etapas seguintes |
| SAS Token 1 (read) | Gerado na tarefa 2 (anote imediatamente) | Etapa 5 |
| SAS Token 2 (write) | Gerado na tarefa 2 | Etapa 5 |
Nome do container relatorios | Portal > Storage > Containers | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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: Enabledheliostardrstore: Blob service > Data management > Versioning: Enabled
Configure a Object Replication Rule:
- Source:
heliostarstore, containerrelatorios - Destination:
heliostardrstore, criar containerrelatorios-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-kvnoHELIOSTAR-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
- Crie um Azure Key Vault para armazenar a chave: nome
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.csvcom conteúdo de texto simples - Use o comando
azcopy copycom o SAS Token 2 para fazer upload dos três arquivos para o containerrelatorios
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
heliostarstoreusando sua conta Azure - Navegue até o container
relatoriose 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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Nome do Key Vault heliostar-kv | Portal > Key Vault > Overview | Etapas 6, 10 |
Nome da chave HELIOSTAR-KEY-Storage | Key Vault > Keys | Etapa 6 |
| Regra de Object Replication ID | heliostarstore > Object replication > Rule ID | Validaçã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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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
- Move to Cool tier: last modified >
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
Coolvia Portal > blob properties > Change tier - Adicione um blob index tag: key
ano, value2024; keytipo, valuerelatorio-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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Nome do file share heliostar-docs | Portal > Storage > File shares | Etapa 9 (VM) |
| URL do file share | Portal > File share > Properties | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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
vmNameparaHELIOSTAR-VM-WEB02 - Altere a
locationparaeastus - Altere a
zonepara["2"] - Altere o
imageReference.publisherparaCanonical,offerpara0001-com-ubuntu-server-jammy,skupara22_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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Resource ID de HELIOSTAR-VM-WEB01 | Portal > VM > Properties | Etapas 8, 9, 11, 12 |
Resource ID de HELIOSTAR-VM-WEB02 | Portal > VM > Properties | Etapas 8, 9, 11, 12 |
Resource ID de HELIOSTAR-VM-DB01 | Portal > VM > Properties | Etapas 9, 11, 12 |
| Private IP de cada VM | Portal > VM > Networking | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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%for5 minutes→ add1instance - Scale in: CPU average <
30%for5 minutes→ remove1instance - 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, Port80
Acesse a URL gerada pelo Container App e confirme que retorna a página do Nginx.
Valor capturado
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Nome do ACR heliostarregistry | Portal > ACR > Overview | Etapa 8 (deploy) |
| URL do Container App | Portal > Container App > Overview | Etapa 11 |
Resource ID do VMSS HELIOSTAR-VMSS-WEB | Portal > VMSS > Properties | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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: criarapp-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.htmlcom 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 modoCustom 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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
URL do app heliostar-portal | Portal > App Service > Overview | Etapas 10, 12 |
URL do slot staging | Portal > Deployment slots > staging | Etapa 9 validação |
| Nome do App Service Plan | Portal > ASP > Overview | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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 desabilitadoHELIOSTAR-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:
| Prioridade | Nome | Porta | Proto | Origem | Ação |
|---|---|---|---|---|---|
| 100 | Allow-HTTP | 80 | TCP | Any | Allow |
| 110 | Allow-HTTPS | 443 | TCP | Any | Allow |
| 120 | Allow-RDP-Bastion | 3389 | TCP | 10.10.1.0/24 | Allow |
| 4096 | Deny-All-Inbound | Any | Any | Any | Deny |
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 prefix0.0.0.0/0, next hopInternet - Associe à subnet
HELIOSTAR-SNET-WEB
Valor capturado
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
| Private IP do Private Endpoint | Portal > PE > Network interface | Etapa 10 |
| Resource ID da VNET-HUB | Portal > VNet > Properties | Etapas 11, 12 |
| Resource ID da VNET-APP | Portal > VNet > Properties | Etapas 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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 registrationEnabled - Link
HELIOSTAR-VNET-APP: Auto registrationEnabled
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 deHELIOSTAR-VM-WEB01eHELIOSTAR-VM-WEB02 - Health probe:
HELIOSTAR-LB-PROBE-HTTP, HTTP, porta80, path/, interval15s, unhealthy threshold2 - Load balancing rule:
HELIOSTAR-LB-RULE-HTTP, porta80, backend porta80, session persistenceNone
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, interval15s - LB Rule: porta
1433, backend1433, 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
- VM:
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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
IP público do LB HELIOSTAR-PIP-LB | Portal > Public IP > Overview | Etapa 12 |
Frontend IP do ILB HELIOSTAR-ILB-DB | Portal > ILB > Frontend IP | Etapa 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
| Modo | Disponível nesta etapa |
|---|---|
| Portal Azure | Sim |
| PowerShell | Sim |
| CLI | Sim |
| 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%por5 minutos - Severity:
2 (Warning) - Action Group:
HELIOSTAR-AG
Alerta 2 — HELIOSTAR-Alert-StorageTransactions:
- Scope:
heliostarstore - Signal:
Transactions>1000em5 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-Policycom RPO1 hour, recovery points24 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
| Valor | Onde encontrar | Usado na etapa |
|---|---|---|
Workspace ID do HELIOSTAR-LAW | Portal > LAW > Properties | Validação global |
Resource ID do HELIOSTAR-RSV | Portal > RSV > Properties | Validação global |
| Status de replicação das VMs | Portal > RSV > Replicated items | Validaçã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
| Recurso | Tipo | Localização | Estado esperado |
|---|---|---|---|
HELIOSTAR-GRP-INFRA | Entra ID Group | Entra ID | Security, membros: usr-infra01 |
HELIOSTAR-GRP-DEV | Entra ID Group | Entra ID | Security, membros: usr-dev01 |
HELIOSTAR-GRP-DADOS | Entra ID Group | Entra ID | Security, membros: usr-dados01, guest B2B |
| SSPR configurado | Entra ID | Entra ID | Selected, grupo: GRP-INFRA |
HELIOSTAR-Role-VMOperator | Custom RBAC Role | Subscription | IsCustom = true, 3 actions |
| RBAC assignments (5 atribuições) | Role Assignments | Scopes variados | Todos Succeeded |
HELIOSTAR-MG | Management Group | Azure | Contém HELIOSTAR-SUB |
HELIOSTAR-Policy-RequireTagEnvironment | Azure Policy | MG scope | Enabled, Deny |
| Policy Allowed Locations | Azure Policy | MG scope | Enabled, Deny, eastus/brazilsouth |
HELIOSTAR-LOCK-INFRA | Resource Lock | RG-INFRA | CanNotDelete |
HELIOSTAR-BUDGET | Cost Budget | HELIOSTAR-SUB | $200, alerts 80%/100% |
| Tags nos RGs (3 tags cada) | Tags | 3 RGs | Environment, CostCenter, Owner |
heliostarstore | Storage Account | East US | GRS, CMK encryption |
heliostardrstore | Storage Account | Brazil South | LRS |
heliostar-kv | Key Vault | East US | Standard, purge protection |
HELIOSTAR-KEY-Storage | Key Vault Key | Key Vault | RSA 2048, Enabled |
Container relatorios | Blob Container | heliostarstore | Private, 3 CSVs |
Container telemetria | Blob Container | heliostarstore | Private, versioning |
Container relatorios-dr | Blob Container | heliostardrstore | Object replication target |
File share heliostar-docs | Azure Files | heliostarstore | 100 GiB, soft delete 14d |
Lifecycle policy HELIOSTAR-Lifecycle-Telemetria | Lifecycle | heliostarstore | Active |
HELIOSTAR-VM-WEB01 | VM Windows | East US Zone 1 | Running, encryption at host |
HELIOSTAR-VM-WEB02 | VM Ubuntu | East US Zone 2 | Running, D4s_v3 |
HELIOSTAR-VM-DB01 | VM Windows | East US | Running, in AVSET |
HELIOSTAR-AVSET-DB | Availability Set | East US | 2 FD, 5 UD |
HELIOSTAR-DISK-DB01-DATA | Managed Disk | East US | 128 GiB Premium SSD |
HELIOSTAR-VMSS-WEB | VM Scale Set | East US Zones 1,2,3 | 2 instances, autoscale |
HELIOSTAR-LB-VMSS | Load Balancer | East US | Standard, public |
heliostarregistry | Container Registry | East US | Basic, admin enabled |
HELIOSTAR-ACI-TELEMETRIA | Container Instance | East US | Running, port 80 |
HELIOSTAR-ACAENV | Container Apps Env | East US | Active |
HELIOSTAR-ACA-TELEMETRIA | Container App | East US | Running, min 1 replica |
HELIOSTAR-ASP-PROD | App Service Plan | East US | Standard S1 |
heliostar-portal | App Service | East US | Running, HTTPS only |
heliostar-api | App Service | East US | Running |
Slot staging | Deployment Slot | heliostar-portal | Running |
HELIOSTAR-VNET-HUB | VNet | East US | 10.10.0.0/16, 3 subnets |
HELIOSTAR-VNET-APP | VNet | East US | 10.20.0.0/16, 2 subnets |
HELIOSTAR-PEER-HUB-TO-APP | VNet Peering | East US | Connected |
HELIOSTAR-PEER-APP-TO-HUB | VNet Peering | East US | Connected |
HELIOSTAR-NSG-WEB | NSG | East US | 4 rules, associado a SNET-WEB |
HELIOSTAR-NSG-API | NSG | East US | Rules, associado a SNET-API |
HELIOSTAR-BASTION | Azure Bastion | East US | Basic, Running |
HELIOSTAR-PE-STORAGE | Private Endpoint | East US | Succeeded, blob |
HELIOSTAR-UDR-WEB | Route Table | East US | 0.0.0.0/0 Internet |
heliostar.internal | Private DNS Zone | Linked a HUB e APP | |
HELIOSTAR-LB-PUBLIC | Load Balancer | East US | Standard, backend 2 VMs |
HELIOSTAR-ILB-DB | Internal LB | East US | Standard, 10.20.2.200 |
HELIOSTAR-LAW | Log Analytics Workspace | East US | Active, 30d retention |
HELIOSTAR-AG | Action Group | East US | Active, email configured |
HELIOSTAR-Alert-VMCPUHigh | Azure Monitor Alert | East US | Enabled |
HELIOSTAR-Alert-StorageTransactions | Azure Monitor Alert | East US | Enabled |
HELIOSTAR-RSV | Recovery Services Vault | East US | Active |
HELIOSTAR-Policy-VMBackup | Backup Policy | RSV | Daily 23:00, 30d/12w/12m |
HELIOSTAR-ASR-Policy | ASR Replication Policy | RSV | RPO 1h, 24h recovery points |
HELIOSTAR-RP-WEB | Recovery Plan | RSV | WEB01 Group1, WEB02 Group2 |
HELIOSTAR-VNET-DR | VNet | Brazil South | 10.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
| Etapa | Sintoma | Causa provável |
|---|---|---|
| 1 | SSPR não ativa | Licença P1/P2 ausente; ative trial do Entra ID P2 |
| 1 | Convite B2B não chega | Domínio bloqueado nas collaboration settings; adicione o domínio na allowlist |
| 2 | Custom role não atribui | Role definition não salva corretamente; verifique JSON de assignableScopes |
| 3 | Policy Allowed Locations não bloqueia | Não atribuída ao MG ou escopo incorreto; verifique o escopo da atribuição |
| 3 | Lock não impede deleção | Lock aplicado no RG errado; confirme o nome exato do RG |
| 4 | Storage firewall bloqueia acesso legítimo | IP atual não adicionado; adicione "Add your client IP address" |
| 4 | SAS token expira instantaneamente | Fuso horário incorreto ao definir a expiração; use UTC ou ajuste o horário |
| 5 | Object Replication não sincroniza | Versioning não habilitado em um dos Storage Accounts; habilite em ambos |
| 5 | CMK encryption falha | Managed Identity do Storage Account sem acesso ao Key Vault; atribua Key Vault Crypto Service Encryption User |
| 6 | Lifecycle policy não aplica | Policy criada mas blobs criados antes têm last-modified anterior; aguarde ou recrie os blobs |
| 7 | Encryption at host falha | Feature EncryptionAtHost não registrada na subscription; execute Register-AzProviderFeature e aguarde |
| 7 | ARM template deploy falha | Nome da VM já existe ou parâmetros incorretos; verifique o vmName no template |
| 8 | ACR build falha | Docker não disponível; use Azure Cloud Shell que tem Docker incluído |
| 8 | Container App sem ingress | Ingress não habilitado durante criação; habilite via portal > Ingress > External |
| 9 | Slot swap não disponível | Plano Free ou Shared; requer Standard S1 ou superior |
| 9 | Custom domain validação falha | CNAME ou TXT não propagado; aguarde TTL ou use domínio que você controla |
| 10 | Bastion não conecta à VM | VM sem NIC na mesma VNet do Bastion; mova a VM ou crie Bastion na VNet correta |
| 10 | Private Endpoint não resolve | DNS zone não vinculada à VNet; adicione virtual network link |
| 10 | VNet Peering broken | Address spaces sobrepostos; verifique CIDRs de ambas as VNets |
| 11 | DNS privado não resolve | Auto-registration desabilitado; habilite no link da VNet |
| 11 | LB health probe failing | VMs sem serviço escutando na porta configurada; instale IIS ou Nginx nas VMs |
| 12 | VM Insights não coleta dados | AMA não instalado; habilite via Extensions + Applications na VM |
| 12 | ASR replicação falha | Quota de cores em Brazil South insuficiente; solicite aumento ou use tamanho menor |
| 12 | Backup job falha | RSV 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)