[AZ-104] Grand Labs - Nordvex Energia S.A.
Ambiente Cumulativo de Implantação Real
Narrativa Central
Empresa: Nordvex Energia S.A. | Setor: Utilities (distribuição de energia elétrica)
A Nordvex opera 14 subestações em duas regiões e acaba de encerrar um contrato com um data center privado. A diretoria aprovou a migração completa da infraestrutura para o Azure em 90 dias. Você foi contratado como arquiteto de nuvem responsável pela implantação.
Cada etapa corresponde a uma decisão técnica real. O prefixo de todos os recursos é nordvex. Capture os IDs, IPs e nomes de objetos produzidos em cada etapa — eles serão exigidos nas etapas seguintes.
Pré-requisitos
Valide todas as ferramentas abaixo antes de iniciar a Etapa 1.
| Ferramenta | Versão Mínima | Necessária nas Etapas | Verificação |
|---|---|---|---|
| Azure CLI | 2.50+ | Todas | az --version |
| Bicep CLI | Qualquer | 33–36 | az bicep install && az bicep version |
| Docker Desktop | 24+ | 45–46 | docker --version |
| AzCopy | v10+ | 25 | azcopy --version |
- 💰 Custo estimado para execução completa: USD 15–35
- ⏱️ Tempo estimado total: 12–16 horas distribuídas em múltiplas sessões
- 🔋 Desligue e desaloque VMs, VMSS e o Bastion ao encerrar cada sessão
- 📍 Região principal: East US | Região de DR: Brazil South
| Recurso | Custo estimado | Observação |
|---|---|---|
| Azure Bastion (Basic) | ~USD 0,19/h | Desligue após uso |
| VM Standard_B4ms | ~USD 0,15/h | Desaloque entre sessões |
| VMSS (2x B2s) | ~USD 0,10/h | Reduza para 0 instâncias entre sessões |
| App Service P1v3 | ~USD 0,16/h | Scale down para F1 entre sessões |
| Site Recovery | ~USD 0,16/VM/h | Desabilite após Etapa 81 |
Índice por Domínio do Exame
Domínio 1 — Identidade e Governança
Etapa 1 — Criar usuários e grupos no Microsoft Entra ID
Contexto: A Nordvex possui três equipes que precisam de acesso ao ambiente Azure: operações de TI, engenharia de redes e auditoria. Esta é a fundação de toda a governança que virá nas etapas seguintes.
Tarefas:
[Portal] Crie três usuários. Navegue até: Microsoft Entra ID → Users → New user → Create new user
| Campo | Usuário 1 | Usuário 2 | Usuário 3 |
|---|---|---|---|
| Display name | nordvex-ops-user | nordvex-net-user | nordvex-audit-user |
| User principal name | ops@<seudominio> | net@<seudominio> | audit@<seudominio> |
| Password | Definida manualmente | Definida manualmente | Definida manualmente |
| Force change password | Não | Não | Não |
[Portal] Crie dois grupos de segurança. Navegue até: Microsoft Entra ID → Groups → New group
| Campo | Grupo 1 | Grupo 2 |
|---|---|---|
| Group name | nordvex-ops-group | nordvex-net-group |
| Group type | Security | Security |
| Membership type | Assigned | Assigned |
| Members | nordvex-ops-user | nordvex-net-user |
[CLI] Capture os objectId dos três usuários e dos dois grupos:
az ad user list --filter "startswith(displayName,'nordvex')" --output table
az ad group list --filter "startswith(displayName,'nordvex')" --output table
Critérios de Validação:
# Deve retornar exatamente 3 objetos:
az ad user list --filter "startswith(displayName,'nordvex')" --output table
# Deve retornar o objectId de nordvex-ops-user:
az ad group member list --group nordvex-ops-group --output table
No portal Users do Entra ID, os três usuários devem aparecer com Account status = Enabled.
Etapa 2 — Gerenciar propriedades de usuários e grupos
Contexto: O departamento de RH exige que todos os usuários tenham cargo, departamento e telefone registrados no diretório para fins de auditoria interna.
Tarefas:
[Portal] Edite cada usuário. Navegue até: Microsoft Entra ID → Users → <usuário> → Properties → Job information
| Usuário | Job title | Department | Business phone |
|---|---|---|---|
| nordvex-ops-user | Cloud Operator | TI | +55-31-0000-0001 |
| nordvex-net-user | Network Engineer | Redes | +55-31-0000-0002 |
| nordvex-audit-user | IT Auditor | Auditoria | +55-31-0000-0003 |
[CLI] Atualize o usageLocation para os três usuários via Microsoft Graph:
az rest --method PATCH \
--url "https://graph.microsoft.com/v1.0/users/<objectId>" \
--body '{"usageLocation": "BR"}'
# Repita para os três usuários
[Portal] Adicione descrição ao grupo nordvex-ops-group. Navegue até: Microsoft Entra ID → Groups → nordvex-ops-group → Properties
Descrição: Grupo de operadores de nuvem da Nordvex Energia
Critérios de Validação:
az ad user show --id <objectId-ops-user> --query "{dept:department, location:usageLocation}"
# Esperado: {"dept": "TI", "location": "BR"}
Etapa 3 — Gerenciar licenças no Microsoft Entra ID
Contexto: A Nordvex adquiriu licenças Microsoft 365 Business Premium para a equipe de TI. O financeiro exige que o grupo seja o veículo de atribuição, não usuários individuais.
Tarefas:
- [Portal] Verifique licenças disponíveis. Navegue até:
Microsoft Entra ID → Billing → Licenses → All products - [Portal] Atribua licença ao grupo. Navegue até:
Microsoft Entra ID → Groups → nordvex-ops-group → Licenses → Assignments - [Portal] Verifique herança no usuário. Navegue até:
Microsoft Entra ID → Users → nordvex-ops-user → Licenses
Critérios de Validação:
- No perfil de
nordvex-ops-user → Licenses, a licença deve aparecer com origem "Inherited from group". - O usuário
nordvex-audit-user(não está no grupo) não deve ter licença atribuída.
Etapa 4 — Gerenciar usuários externos
Contexto: A Nordvex contratou um consultor externo da Voltec Consultoria. Ele precisa de acesso de leitura temporário sem ter conta interna no diretório.
Tarefas:
- [Portal] Convide o usuário externo. Navegue até:
Microsoft Entra ID → Users → New user → Invite external user- Display name:
nordvex-ext-voltec - Mensagem: Acesso ao projeto de migração Azure da Nordvex Energia
- Display name:
- [Portal] Confirme que o
User type = Guest. Navegue até:Microsoft Entra ID → Users → nordvex-ext-voltec → Properties - [CLI] Confirme:
az ad user list --filter "userType eq 'Guest'" --output table
# Deve retornar ao menos 1 objeto com displayName = nordvex-ext-voltec
Etapa 5 — Configurar redefinição de senha de autoatendimento (SSPR)
Contexto: O helpdesk registra 40 chamados mensais de redefinição de senha. A habilitação do SSPR no escopo do grupo de operações reduz esse volume.
Tarefas:
- [Portal] Habilite SSPR. Navegue até:
Microsoft Entra ID → Password reset → Properties- Self service password reset enabled: Selected
- Adicione
nordvex-ops-groupcomo escopo
- [Portal] Configure métodos. Navegue até:
Microsoft Entra ID → Password reset → Authentication methods- Number of methods required: 1
- Habilite: Email e Mobile phone
- [Portal] Configure registro. Navegue até:
Microsoft Entra ID → Password reset → Registration- Require users to register when signing in: Yes
- Reconfirmation days: 180
Critérios de Validação:
Password reset → Properties: escopo deve exibir Selected comnordvex-ops-grouplistado.Authentication methods: ao menos 2 métodos habilitados.Registration: "Require users to register" = Yes.
Etapa 6 — Gerenciar funções internas do Azure
Contexto: A política de segurança determina: operações = Contributor, redes = Reader, auditor = Billing Reader.
Tarefas:
- [Portal] Crie o grupo de recursos principal. Navegue até:
Resource groups → Create- Name:
nordvex-rg| Region:East US
- Name:
- [Portal] Atribua Contributor ao grupo. Navegue até:
nordvex-rg → Access control (IAM) → Add role assignment- Role: Contributor | Assignee:
nordvex-ops-group
- Role: Contributor | Assignee:
- [CLI] Atribua Reader ao grupo de redes:
az role assignment create \
--role "Reader" \
--assignee-object-id <objectId-net-group> \
--scope /subscriptions/<subscriptionId>/resourceGroups/nordvex-rg \
--assignee-principal-type Group
- [Portal] Atribua Billing Reader ao auditor. Navegue até:
Subscriptions → <assinatura> → Access control (IAM) → Add role assignment- Role: Billing Reader | Assignee:
nordvex-audit-user
- Role: Billing Reader | Assignee:
Critérios de Validação:
az role assignment list --resource-group nordvex-rg --output table
# Deve conter: nordvex-ops-group (Contributor) e nordvex-net-group (Reader)
az role assignment list --scope /subscriptions/<subscriptionId> \
--assignee <objectId-audit-user> --output table
# Deve retornar: Billing Reader para nordvex-audit-user
Etapa 7 — Atribuir funções em escopos diferentes
Contexto: Demonstrar o princípio de menor privilégio por escopo: Contributor em produção, Reader em desenvolvimento.
Tarefas:
- [CLI] Crie o grupo de recursos de desenvolvimento:
az group create --name nordvex-dev-rg --location eastus
- [Portal] Atribua Reader ao
nordvex-ops-useremnordvex-dev-rg. Navegue até:nordvex-dev-rg → Access control (IAM) → Add role assignment - [CLI] Liste todas as atribuições em todos os escopos:
az role assignment list --assignee <objectId-ops-user> --all --output table
Critérios de Validação:
- O comando
--alldeve retornar ao menos 2 entradas com escopos distintos. - Escopo
/resourceGroups/nordvex-rg: Contributor (herdado do grupo). - Escopo
/resourceGroups/nordvex-dev-rg: Reader (atribuição direta).
Etapa 8 — Interpretar atribuições de acesso
Contexto: O auditor solicitou um relatório de quem tem acesso a quê no grupo de recursos de produção.
Tarefas:
- [Portal] Verifique acesso efetivo. Navegue até:
nordvex-rg → Access control (IAM) → Check access → Pesquise nordvex-ops-user - [Portal] Visualize atribuições. Navegue até:
nordvex-rg → Access control (IAM) → Role assignments → Type: All - [CLI] Capture todas as atribuições incluindo herdadas:
az role assignment list --resource-group nordvex-rg --include-inherited --output table
Critérios de Validação:
- Check access para
nordvex-ops-userdeve exibir Contributor como permissão efetiva. - O comando CLI deve retornar ao menos 3 entradas distintas para
nordvex-rg.
Etapa 9 — Implementar e gerenciar o Azure Policy
Contexto: A equipe de conformidade exige que todos os recursos estejam nas regiões East US ou Brazil South e que nenhum recurso seja criado sem a tag CostCenter.
Tarefas:
- [Portal] Atribua a política de localização. Navegue até:
Policy → Assignments → Assign policy- Scope:
nordvex-rg - Policy definition: "Allowed locations"
- Allowed locations:
eastus,brazilsouth
- Scope:
- [Portal] Atribua a política de tag. Navegue até:
Policy → Assignments → Assign policy- Policy definition: "Require a tag and its value"
- Tag name:
CostCenter| Tag value:NordvexProd
- [CLI] Confirme as atribuições:
az policy assignment list --resource-group nordvex-rg --output table
# Deve retornar ao menos 2 entradas
- [Portal] Tente criar um Storage Account em
West USdentro denordvex-rge observe o erro de violação de política.
Etapa 10 — Configurar bloqueios de recursos
Contexto: Nenhum membro da equipe deve ser capaz de excluir o grupo de recursos de produção acidentalmente, mesmo com permissões de Contributor.
Tarefas:
- [Portal] Adicione o bloqueio. Navegue até:
nordvex-rg → Settings → Locks → Add- Lock name:
nordvex-lock-delete| Lock type: Delete - Notes:
Producao protegida contra exclusao acidental
- Lock name:
- [CLI] Confirme:
az lock list --resource-group nordvex-rg --output table
# lockType = CanNotDelete, name = nordvex-lock-delete
- [Portal] Logado como
nordvex-ops-user(Contributor), tente excluirnordvex-rge observe o bloqueio.
Etapa 11 — Aplicar e gerenciar tags em recursos
Contexto: O CFO exige visibilidade granular dos custos por centro de custo e ambiente.
Tarefas:
- [CLI] Aplique as três tags ao grupo de recursos:
az group update --name nordvex-rg \
--tags CostCenter=NordvexProd Environment=Production ManagedBy=CloudOps
- [Portal] Confirme as tags. Navegue até:
nordvex-rg → Tags - [CLI] Verifique tags dos recursos dentro do grupo:
az resource list --resource-group nordvex-rg --query "[].{name:name, tags:tags}" --output json
Critérios de Validação:
az group show --name nordvex-rg --query tags
# Esperado:
# {
# "CostCenter": "NordvexProd",
# "Environment": "Production",
# "ManagedBy": "CloudOps"
# }
Etapa 12 — Gerenciar grupos de recursos
Contexto: A Nordvex decidiu separar os recursos de rede em um grupo de recursos dedicado, seguindo a arquitetura de landing zone.
Tarefas:
- [CLI] Crie o grupo de recursos de rede:
az group create --name nordvex-net-rg --location eastus \
--tags CostCenter=NordvexProd Environment=Production ManagedBy=CloudOps
- [Portal] Crie uma VNet básica dentro de
nordvex-rg. Navegue até:Virtual networks → Create- Name:
nordvex-vnet-temp| Resource group:nordvex-rg| Address space:10.0.0.0/16
- Name:
- [Portal] Mova a VNet para
nordvex-net-rg. Navegue até:nordvex-vnet-temp → Overview → Move → Move to another resource group
Critérios de Validação:
az group list --query "[?starts_with(name,'nordvex')]" --output table
# Deve retornar: nordvex-rg, nordvex-net-rg, nordvex-dev-rg
az network vnet list --resource-group nordvex-net-rg --output table
# Deve retornar nordvex-vnet-temp após a movimentação
Etapa 13 — Gerenciar assinaturas
Contexto: A equipe financeira precisa garantir que as assinaturas usadas no projeto tenham metadados corretos.
Tarefas:
- [CLI] Liste assinaturas:
az account list --output table
- [Portal] Renomeie a assinatura. Navegue até:
Subscriptions → <assinatura> → Overview → Rename- Novo nome:
Nordvex-Production
- Novo nome:
- [CLI] Defina a assinatura ativa e confirme:
az account set --subscription <id>
az account show --query "{name:name, id:id, tenantId:tenantId}" --output json
Etapa 14 — Gerenciar custos com alertas, orçamentos e Azure Advisor
Contexto: O orçamento aprovado para o primeiro trimestre é de USD 500. O time financeiro precisa de alertas automáticos em 80% e 100%.
Tarefas:
- [Portal] Crie o orçamento. Navegue até:
Cost Management + Billing → Cost Management → Budgets → Add- Scope:
nordvex-rg| Name:nordvex-budget-q1| Amount: USD 500 | Reset period: Monthly - Alert at 80%: e-mail para
nordvex-ops-user
- Scope:
- [Portal] Revise recomendações. Navegue até:
Advisor → Cost - [Portal] Adicione alerta em 100% no mesmo orçamento.
Critérios de Validação:
- O orçamento
nordvex-budget-q1deve aparecer com Status = Active. - Ao menos 2 alertas de limite configurados (80% e 100%).
Etapa 15 — Configurar grupos de gerenciamento
Contexto: A Nordvex possui duas assinaturas e precisa aplicar políticas corporativas de forma centralizada.
Tarefas:
- [Portal] Crie o management group. Navegue até:
Management groups → Start using management groups → Add management group- Management group ID:
nordvex-mg - Display name:
Nordvex Management Group
- Management group ID:
- [Portal] Mova a assinatura de produção para o grupo. Navegue até:
nordvex-mg → Add subscription - [CLI] Confirme a estrutura:
az account management-group show --name nordvex-mg --expand --recurse --output json
# Deve retornar o grupo com ao menos 1 assinatura filha em "children"
Domínio 2 — Storage
Etapa 16 — Configurar firewalls e redes virtuais do Azure Storage
Contexto: A conta de armazenamento central para logs deve ter acesso restrito à rede virtual, bloqueando acesso público por padrão.
Tarefas:
- [CLI] Crie a conta de armazenamento principal:
az storage account create \
--name nordvexstg \
--resource-group nordvex-rg \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--allow-blob-public-access false \
--tags CostCenter=NordvexProd Environment=Production
- [Portal] Restrinja o acesso de rede. Navegue até:
nordvexstg → Security + networking → Networking → Firewalls and virtual networks- Public network access: Enabled from selected virtual networks and IP addresses
- Adicione
nordvex-vnet-tempcomo rede permitida
- [Portal] Adicione o IP público da sua estação de trabalho na seção Address ranges.
Critérios de Validação:
az storage account show --name nordvexstg --resource-group nordvex-rg \
--query "networkRuleSet" --output json
# defaultAction deve ser "Deny"
# A VNet deve aparecer em virtualNetworkRules
Etapa 17 — Criar e usar tokens SAS
Contexto: O sistema de telemetria das subestações precisa fazer upload de logs para um contêiner Blob sem usar as chaves de conta.
Tarefas:
- [Portal] Crie o contêiner de logs. Navegue até:
nordvexstg → Data storage → Containers → + Container- Name:
nordvex-logs| Public access level: Private
- Name:
- [Portal] Gere o token SAS. Navegue até:
nordvexstg → Security + networking → Shared access signature
| Parâmetro | Valor |
|---|---|
| Allowed services | Blob only |
| Allowed resource types | Object only |
| Allowed permissions | Read, Write |
| Expiry | 24 horas a partir de agora |
| Allowed protocols | HTTPS only |
- [CLI] Faça upload de um arquivo de teste:
az storage blob upload \
--account-name nordvexstg \
--container-name nordvex-logs \
--name teste.log \
--file ./teste.log \
--sas-token "<token-gerado-no-portal>"
Critérios de Validação:
az storage blob list --account-name nordvexstg \
--container-name nordvex-logs --sas-token "<token>" --output table
# Deve retornar o arquivo de teste
Etapa 18 — Configurar políticas de acesso armazenadas
Contexto: A Nordvex precisa revogar o acesso SAS sem esperar a expiração, usando uma Stored Access Policy.
Tarefas:
- [Portal] Crie a política. Navegue até:
nordvexstg → Containers → nordvex-logs → Access policy → Add policy- Identifier:
nordvex-log-policy| Permissions: Read, Write | Expiry: 7 dias
- Identifier:
- [CLI] Gere um SAS vinculado à política:
az storage container generate-sas \
--account-name nordvexstg \
--name nordvex-logs \
--policy-name nordvex-log-policy \
--output tsv
Critérios de Validação:
- A política
nordvex-log-policydeve aparecer listada em Access policy do contêinernordvex-logs. - O token SAS gerado deve conter o parâmetro
si=nordvex-log-policyna URL.
Etapa 19 — Gerenciar chaves de acesso
Contexto: A equipe de segurança detectou que a chave primária foi usada em um script legado. Rotação imediata é obrigatória.
Tarefas:
- [Portal] Visualize as chaves. Navegue até:
nordvexstg → Security + networking → Access keys - [Portal] Regenere a key1. Clique em Rotate key ao lado de key1. Capture o novo valor.
- [CLI] Confirme:
az storage account keys list \
--account-name nordvexstg \
--resource-group nordvex-rg \
--output table
Critérios de Validação:
- O comando deve retornar dois objetos: key1 e key2.
- A operação deve aparecer no Activity log do
nordvex-rgcomo evento"regenerateKey".
Etapa 20 — Configurar acesso baseado em identidade para Azure Files
Contexto: O departamento de redes precisa de um compartilhamento SMB com autenticação baseada em identidade do Microsoft Entra ID.
Tarefas:
- [Portal] Crie o file share. Navegue até:
nordvexstg → Data storage → File shares → + File share- Name:
nordvex-share| Quota: 50 GiB | Tier: Transaction optimized
- Name:
- [Portal] Habilite autenticação Entra ID. Navegue até:
nordvexstg → Data management → Configuration → Identity-based access → Microsoft Entra Kerberos - [Portal] Atribua papel SMB. Navegue até:
nordvexstg → File shares → nordvex-share → Access control (IAM) → Add role assignment- Role: Storage File Data SMB Share Contributor | Assignee:
nordvex-net-group
- Role: Storage File Data SMB Share Contributor | Assignee:
Critérios de Validação:
az storage share-rm show --storage-account nordvexstg \
--resource-group nordvex-rg --name nordvex-share --output json
# enabledProtocols deve conter SMB
Etapa 21 — Criar conta de armazenamento de arquivamento
Contexto: A Nordvex precisa de uma conta secundária para arquivamento de longo prazo de dados de faturamento com redundância geográfica.
Tarefas:
- [CLI] Crie a conta de arquivamento:
az storage account create \
--name nordvexarchive \
--resource-group nordvex-rg \
--location brazilsouth \
--sku Standard_GRS \
--kind StorageV2 \
--access-tier Cool \
--tags CostCenter=NordvexProd Environment=Production
- [Portal] Confirme. Navegue até:
nordvexarchive → Overview- Redundancy: GRS (Geo-redundant storage) | Access tier: Cool
Critérios de Validação:
az storage account show --name nordvexarchive --resource-group nordvex-rg \
--query "{sku:sku.name, kind:kind, accessTier:accessTier}" --output json
# Esperado: {"sku": "Standard_GRS", "kind": "StorageV2", "accessTier": "Cool"}
Etapa 22 — Configurar redundância do Azure Storage
Contexto: O time de continuidade de negócios determinou que nordvexstg precisa ser atualizada para ZRS.
Tarefas:
- [Portal] Altere a redundância. Navegue até:
nordvexstg → Data management → Redundancy- Altere de LRS para Zone-redundant storage (ZRS)
Critérios de Validação:
az storage account show --name nordvexstg --resource-group nordvex-rg \
--query "sku.name" --output tsv
# Deve retornar: Standard_ZRS
Etapa 23 — Configurar replicação de objeto
Contexto: Os logs do contêiner nordvex-logs devem ser replicados automaticamente para a conta de arquivamento.
Tarefas:
- [Portal] Habilite versionamento em ambas as contas (pré-requisito para replicação).
nordvexstg → Data protection → Enable versioning for blobs- Repita para
nordvexarchive
- [Portal] Crie a regra de replicação. Navegue até:
nordvexstg → Data management → Object replication → Create replication rules- Destination account:
nordvexarchive - Source container:
nordvex-logs - Destination container:
nordvex-logs-replica(criar novo)
- Destination account:
Critérios de Validação:
- Object replication de
nordvexstgdeve exibir ao menos 1 política com status Enabled. - O contêiner
nordvex-logs-replicadeve existir emnordvexarchive.
Etapa 24 — Configurar criptografia de conta de armazenamento (CMK)
Contexto: O departamento jurídico exige chaves gerenciadas pelo cliente (CMK) para conformidade regulatória.
Tarefas:
- [Portal] Crie o Key Vault. Navegue até:
Key vaults → Create- Name:
nordvex-kv| Resource group:nordvex-rg| Region: East US | Soft delete: Enabled
- Name:
- [Portal] Crie a chave. Navegue até:
nordvex-kv → Objects → Keys → Generate/Import- Name:
nordvex-storage-key| Key type: RSA | Key size: 2048
- Name:
- [Portal] Configure CMK. Navegue até:
nordvexstg → Security + networking → Encryption- Encryption type: Customer-managed keys
- Key vault:
nordvex-kv| Key:nordvex-storage-key
Critérios de Validação:
az storage account show --name nordvexstg --resource-group nordvex-rg \
--query "encryption.keySource" --output tsv
# Deve retornar: Microsoft.Keyvault
Etapa 25 — Gerenciar dados com AzCopy
Contexto: A equipe de operações precisa transferir em massa arquivos de log históricos para o contêiner nordvex-logs.
AzCopy v10+ instalado localmente. Verifique com: azcopy --version
Tarefas:
- [CLI] Faça upload via AzCopy:
azcopy copy "./logs-locais/*" \
"https://nordvexstg.blob.core.windows.net/nordvex-logs?<SAS-token>" \
--recursive
- [Portal] Confirme os arquivos. Navegue até:
nordvexstg → Storage browser → Blob containers → nordvex-logs - [CLI] Liste os objetos:
azcopy list "https://nordvexstg.blob.core.windows.net/nordvex-logs?<SAS-token>"
Etapa 26 — Criar e configurar compartilhamento de arquivos no Azure Files
Contexto: O compartilhamento nordvex-share precisa de um diretório de trabalho para organizar os arquivos das subestações.
Tarefas:
- [Portal] Crie um diretório. Navegue até:
nordvexstg → File shares → nordvex-share → + Add directory- Name:
subestacoes
- Name:
- [Portal] Faça upload de um arquivo de teste para o diretório
subestacoes. - [CLI] Confirme:
az storage file list \
--share-name nordvex-share \
--account-name nordvexstg \
--path subestacoes \
--output table
# Deve retornar ao menos 1 arquivo
Etapa 27 — Criar e configurar contêiner no Azure Blob Storage
Contexto: A Nordvex precisa de um contêiner para armazenar imagens de backup de configuração das subestações.
Tarefas:
- [Portal] Crie o contêiner de backups. Navegue até:
nordvexstg → Data storage → Containers → + Container- Name:
nordvex-backups| Public access level: Private
- Name:
- [CLI] Faça upload usando a account key capturada na Etapa 19:
az storage blob upload \
--account-name nordvexstg \
--container-name nordvex-backups \
--name backup-test.img \
--file ./backup-test.img \
--account-key "<key1-capturada-na-etapa-19>"
Critérios de Validação:
az storage container list --account-name nordvexstg --output table
# Deve retornar: nordvex-logs, nordvex-backups
Etapa 28 — Configurar camadas de armazenamento
Contexto: Backups com mais de 30 dias devem ir para Cool e após 90 dias para Archive, reduzindo custos.
Tarefas:
- [Portal] Altere a camada de um blob manualmente. Navegue até:
nordvexstg → Storage browser → Blob containers → nordvex-backups → <blob> → Change tier → Cool - [CLI] Mova um blob para Archive:
az storage blob set-tier \
--account-name nordvexstg \
--container-name nordvex-backups \
--name backup-test.img \
--tier Archive
Critérios de Validação:
az storage blob show --account-name nordvexstg \
--container-name nordvex-backups --name backup-test.img \
--query "properties.blobTier" --output tsv
# Deve retornar: Archive
Etapa 29 — Configurar exclusão reversível para blobs e contêineres
Contexto: A soft delete deve ser habilitada em todas as contas de produção com retenção de 14 dias.
Tarefas:
- [Portal] Habilite soft delete para blobs. Navegue até:
nordvexstg → Data protection → Enable soft delete for blobs- Retention period: 14 days
- [Portal] Habilite soft delete para contêineres. Navegue até:
nordvexstg → Data protection → Enable soft delete for containers- Retention period: 7 days
- [CLI] Confirme:
az storage account blob-service-properties show \
--account-name nordvexstg --resource-group nordvex-rg \
--query "{blobSoftDelete:deleteRetentionPolicy, containerSoftDelete:containerDeleteRetentionPolicy}"
# blobSoftDelete: enabled=true, days=14
# containerSoftDelete: enabled=true, days=7
Etapa 30 — Configurar snapshots e exclusão reversível para Azure Files
Contexto: O compartilhamento nordvex-share deve ter proteção contra exclusão acidental.
O backup completo do Azure Files via Recovery Services Vault será configurado na Etapa 76, quando o vault será criado. Por ora, habilite apenas a exclusão reversível e crie um snapshot manual conforme as tarefas abaixo. Após criar o vault na Etapa 76, você pode retornar aqui e habilitar o backup integrado do compartilhamento.
Tarefas:
- [Portal] Habilite soft delete para file shares. Navegue até:
nordvexstg → Data protection → Enable soft delete for file shares- Retention period: 14 days
- [Portal] Crie um snapshot manual. Navegue até:
nordvexstg → File shares → nordvex-share → Operations → Snapshots → Add snapshot - [Portal] Confirme o snapshot. Navegue até:
nordvex-share → Operations → Snapshots
Critérios de Validação:
- O blade Snapshots deve listar ao menos 1 snapshot com timestamp válido.
- Data protection da conta deve mostrar soft delete para file shares habilitada com 14 days.
Etapa 31 — Configurar gerenciamento de ciclo de vida de blob
Contexto: A Nordvex quer automatizar a transição de camadas e expiração de blobs no contêiner nordvex-logs.
Tarefas:
- [Portal] Crie a regra de lifecycle. Navegue até:
nordvexstg → Data management → Lifecycle management → Add a rule- Rule name:
nordvex-log-lifecycle - Apply rule to: Blobs in
nordvex-logs
- Rule name:
| Condição | Ação |
|---|---|
| Blobs com mais de 30 dias | Move to Cool storage |
| Blobs com mais de 90 dias | Move to Archive storage |
| Blobs com mais de 365 dias | Delete the blob |
- [CLI] Confirme:
az storage account management-policy show \
--account-name nordvexstg \
--resource-group nordvex-rg
# Deve conter nordvex-log-lifecycle com 3 ações
Etapa 32 — Configurar versionamento de blob
Contexto: O versionamento foi habilitado como pré-requisito na Etapa 23. Agora você deve validar o comportamento.
Tarefas:
- [Portal] Confirme que o versionamento está habilitado. Navegue até:
nordvexstg → Data protection → Enable versioning for blobs - [CLI] Faça upload do mesmo arquivo duas vezes com conteúdo diferente:
echo "Versao 1" > arquivo-versao.txt
az storage blob upload --account-name nordvexstg \
--container-name nordvex-logs --name arquivo-versao.txt \
--file ./arquivo-versao.txt --overwrite
echo "Versao 2" > arquivo-versao.txt
az storage blob upload --account-name nordvexstg \
--container-name nordvex-logs --name arquivo-versao.txt \
--file ./arquivo-versao.txt --overwrite
- [CLI] Liste as versões:
az storage blob list --account-name nordvexstg \
--container-name nordvex-logs --include v --output table
# Deve retornar ao menos 2 entradas para arquivo-versao.txt com versionId distintos
Domínio 3 — Infraestrutura como Código (IaC)
az bicep install && az bicep version — Execute antes de iniciar esta seção.
Etapa 33 — Interpretar templates ARM e arquivos Bicep
Contexto: O time de plataforma recebeu um template ARM legado de um fornecedor. Antes de executar, você deve analisar os parâmetros, recursos e dependências declarados.
Tarefas:
- [Portal] Exporte o template ARM de uma implantação anterior. Navegue até:
nordvex-rg → Deployments → <implantação> → Template → Download - [IaC] Analise o template exportado e identifique:
- Quantos recursos são declarados na seção
resources - Quais parâmetros possuem
defaultValue - Quais dependências explícitas (
dependsOn) estão presentes
- Quantos recursos são declarados na seção
- [CLI] Converta para Bicep:
az bicep decompile --file template.json
az bicep build --file template.bicep
Etapa 34 — Modificar template ARM existente
Contexto: O template ARM precisa ser modificado para adicionar a tag CostCenter: NordvexProd a todos os recursos.
Tarefas:
- [IaC] Adicione o bloco
tagscomCostCenter: NordvexProdem cada recurso na seçãoresources. - [IaC] Adicione um parâmetro
environmentdo tipostringcomdefaultValue: "Production"e utilize-o como valor da tagEnvironment. - [CLI] Valide:
az deployment group validate \
--resource-group nordvex-rg \
--template-file template-modificado.json
# Deve retornar "provisioningState": "Succeeded"
Etapa 35 — Modificar arquivo Bicep existente
Contexto: O arquivo Bicep precisa ser expandido para incluir uma conta de armazenamento adicional.
Tarefas:
- [IaC] Adicione no arquivo
.bicepum novo recurso de storage:
resource nordvexBicepStorage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: 'nordvexbicep'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
tags: { CostCenter: 'NordvexProd', Environment: environment }
}
output storageAccountId string = nordvexBicepStorage.id
- [CLI] Valide:
az bicep build --file template.bicep
Etapa 36 — Implantar recursos com template Bicep
Contexto: Com o template Bicep validado, execute a implantação real no grupo de recursos de produção.
Tarefas:
- [CLI] Execute a implantação:
az deployment group create \
--resource-group nordvex-rg \
--template-file template.bicep \
--parameters environment=Production \
--name nordvex-bicep-deploy
- [CLI] Capture o output:
az deployment group show \
--resource-group nordvex-rg \
--name nordvex-bicep-deploy \
--query "properties.provisioningState" --output tsv
# Deve retornar: Succeeded
Etapa 37 — Exportar implantação como template ARM
Contexto: O time de DR precisa de um template versionado do ambiente atual para recriar a infraestrutura em caso de desastre.
Tarefas:
- [Portal] Exporte o template do grupo inteiro. Navegue até:
nordvex-rg → Automation → Export template → Download - [CLI] Exporte via CLI:
az group export --name nordvex-rg > nordvex-rg-export.json
Critérios de Validação:
- O arquivo exportado deve conter ao menos 3 recursos distintos na seção
resources. - Verificação de JSON válido:
cat nordvex-rg-export.json | python3 -m json.tool
Domínio 4 — Compute e Contêineres
Docker Desktop instalado e em execução. Verifique com: docker --version
Etapa 38 — Criar uma máquina virtual
Contexto: O sistema SCADA da Nordvex precisa de uma VM Windows Server para rodar o software legado de monitoramento das subestações.
Tarefas:
- [CLI] Crie a VM SCADA:
az vm create \
--name nordvex-vm-scada \
--resource-group nordvex-rg \
--location eastus \
--image Win2022Datacenter \
--size Standard_B2s \
--admin-username nordvexadmin \
--admin-password "<senha-segura>" \
--os-disk-sku Premium_LRS \
--vnet-name nordvex-vnet-temp \
--vnet-resource-group nordvex-net-rg \
--subnet default \
--tags CostCenter=NordvexProd Environment=Production
- [Portal] Capture o IP privado. Navegue até:
nordvex-vm-scada → Networking → Network interface
Critérios de Validação:
az vm show --name nordvex-vm-scada --resource-group nordvex-rg \
--show-details --query "powerState" --output tsv
# Deve retornar: VM running
Etapa 39 — Configurar criptografia em host para VMs
Contexto: O requisito de conformidade exige que todos os dados temporários no host sejam criptografados.
Tarefas:
- [CLI] Registre o feature (uma vez por assinatura):
az feature register --name EncryptionAtHost --namespace Microsoft.Compute
# Aguarde até retornar "state": "Registered"
az feature show --name EncryptionAtHost --namespace Microsoft.Compute
- [CLI] Pare e desaloque a VM:
az vm deallocate --name nordvex-vm-scada --resource-group nordvex-rg
- [CLI] Habilite a criptografia em host:
az vm update --name nordvex-vm-scada --resource-group nordvex-rg \
--set securityProfile.encryptionAtHost=true
Critérios de Validação:
az vm show --name nordvex-vm-scada --resource-group nordvex-rg \
--query "securityProfile.encryptionAtHost" --output tsv
# Deve retornar: True
Etapa 40 — Mover VM para outro grupo de recursos
Contexto: A VM SCADA deve ser movida para nordvex-net-rg, junto com os recursos de rede.
Tarefas:
- [Portal] Mova a VM. Navegue até:
nordvex-vm-scada → Overview → Move → Move to another resource group- Destination resource group:
nordvex-net-rg
- Destination resource group:
Critérios de Validação:
az vm list --resource-group nordvex-net-rg --output table
# Deve exibir nordvex-vm-scada
az vm list --resource-group nordvex-rg --output table
# Não deve exibir nordvex-vm-scada
Etapa 41 — Gerenciar tamanhos de VM
Contexto: O software SCADA passou por atualização e exige mais memória. A VM precisa ser redimensionada para Standard_B4ms.
Tarefas:
- [CLI] Liste os tamanhos disponíveis:
az vm list-vm-resize-options --name nordvex-vm-scada --resource-group nordvex-net-rg --output table
- [Portal] Redimensione. Navegue até:
nordvex-vm-scada → Availability + scale → Size → Standard_B4ms → Resize
A VM será reiniciada automaticamente durante o redimensionamento.
Critérios de Validação:
az vm show --name nordvex-vm-scada --resource-group nordvex-net-rg \
--query "hardwareProfile.vmSize" --output tsv
# Deve retornar: Standard_B4ms
Etapa 42 — Gerenciar discos de VM
Contexto: O software SCADA exige um disco de dados dedicado de 128 GB para arquivos de histórico de telemetria.
Tarefas:
- [Portal] Adicione disco de dados. Navegue até:
nordvex-vm-scada → Settings → Disks → + Create and attach a new disk
| Parâmetro | Valor |
|---|---|
| Disk name | nordvex-disk-scada |
| Size | 128 GiB |
| Disk type | Premium SSD |
| Host caching | Read-only |
Critérios de Validação:
az disk show --name nordvex-disk-scada --resource-group nordvex-net-rg \
--query "{size:diskSizeGb, sku:sku.name}" --output json
# Esperado: {"size": 128, "sku": "Premium_LRS"}
Etapa 43 — Implantar VMs em zonas de disponibilidade e conjuntos de disponibilidade
Contexto: O sistema de despacho de carga exige alta disponibilidade com uma segunda VM em zona diferente.
Tarefas:
- [CLI] Crie a VM de despacho em zona 1:
az vm create \
--name nordvex-vm-dispatch \
--resource-group nordvex-net-rg \
--location eastus \
--zone 1 \
--image Ubuntu2204 \
--size Standard_B2s \
--admin-username nordvexadmin \
--generate-ssh-keys \
--tags CostCenter=NordvexProd
- [CLI] Crie um availability set:
az availability-set create \
--name nordvex-avset \
--resource-group nordvex-net-rg \
--location eastus \
--platform-fault-domain-count 2 \
--platform-update-domain-count 5
Critérios de Validação:
az vm show --name nordvex-vm-dispatch --resource-group nordvex-net-rg \
--query "zones" --output tsv
# Deve retornar: 1
Etapa 44 — Implantar e configurar Azure Virtual Machine Scale Sets
Contexto: O portal web interno precisa de escalabilidade automática baseada em carga de CPU.
Tarefas:
- [Portal] Crie o VMSS. Navegue até:
Virtual machine scale sets → Create
| Parâmetro | Valor |
|---|---|
| Name | nordvex-vmss |
| Resource group | nordvex-rg |
| Region | East US |
| Image | Ubuntu Server 22.04 LTS |
| Size | Standard_B2s |
| Initial count | 2 |
| Orchestration mode | Uniform |
- [Portal] Configure autoscale. Navegue até:
nordvex-vmss → Availability + scale → Scaling- Scale-out: CPU > 75% por 5 min → adicionar 1 instância
- Scale-in: CPU < 25% por 5 min → remover 1 instância
- Minimum: 2 | Maximum: 5
Etapa 45 — Criar e gerenciar um Azure Container Registry
Contexto: A equipe de desenvolvimento precisa de um registro privado para a imagem do sistema de faturamento.
Docker Desktop deve estar instalado e em execução.
Tarefas:
- [CLI] Crie o Container Registry:
az acr create \
--name nordvexacr \
--resource-group nordvex-rg \
--sku Basic \
--location eastus
- [CLI] Autentique e faça push:
az acr login --name nordvexacr
docker pull nginx:alpine
docker tag nginx:alpine nordvexacr.azurecr.io/billing:v1
docker push nordvexacr.azurecr.io/billing:v1
Critérios de Validação:
az acr repository list --name nordvexacr --output table
# Deve retornar: billing
Etapa 46 — Provisionar contêiner com Azure Container Instances
Contexto: Validação rápida da imagem do sistema de faturamento sem a complexidade de Kubernetes.
Tarefas:
- [CLI] Crie a instância:
az container create \
--name nordvex-aci-billing \
--resource-group nordvex-rg \
--image nordvexacr.azurecr.io/billing:v1 \
--registry-login-server nordvexacr.azurecr.io \
--registry-username $(az acr credential show -n nordvexacr --query username -o tsv) \
--registry-password $(az acr credential show -n nordvexacr --query "passwords[0].value" -o tsv) \
--cpu 1 --memory 1.5 \
--ports 80 \
--dns-name-label nordvexbilling \
--location eastus
Critérios de Validação:
az container show --name nordvex-aci-billing --resource-group nordvex-rg \
--query "instanceView.state" --output tsv
# Deve retornar: Running
Etapa 47 — Provisionar contêiner com Azure Container Apps
Contexto: Após validação no ACI, o sistema de faturamento vai para Container Apps com escalonamento automático.
Tarefas:
- [CLI] Crie o ambiente e o app:
az containerapp env create \
--name nordvex-cae \
--resource-group nordvex-rg \
--location eastus
az containerapp create \
--name nordvex-ca-billing \
--resource-group nordvex-rg \
--environment nordvex-cae \
--image nordvexacr.azurecr.io/billing:v1 \
--cpu 0.5 --memory 1Gi \
--ingress external --target-port 80 \
--min-replicas 1 --max-replicas 3
Critérios de Validação:
az containerapp show --name nordvex-ca-billing --resource-group nordvex-rg \
--query "properties.runningStatus" --output tsv
# Deve retornar: Running
Etapa 48 — Gerenciar dimensionamento de contêineres
Contexto: O Container App precisa de regras de escalonamento baseadas em requisições HTTP.
Tarefas:
- [Portal] Configure scaling. Navegue até:
nordvex-ca-billing → Application → Scale and replicas- Scale rule type: HTTP concurrent requests
- Concurrent requests limit: 10 | Min replicas: 1 | Max replicas: 5
- [CLI] Liste as revisões ativas:
az containerapp revision list --name nordvex-ca-billing --resource-group nordvex-rg --output table
Domínio 5 — App Service
Etapa 49 — Provisionar plano do App Service
Contexto: O portal de autoatendimento dos clientes será hospedado no Azure App Service.
App Service P1v3 gera ~USD 0,16/h. Reduza para F1 entre sessões se necessário.
Tarefas:
- [CLI] Crie o App Service Plan:
az appservice plan create \
--name nordvex-asp \
--resource-group nordvex-rg \
--sku P1v3 \
--is-linux \
--location eastus
Critérios de Validação:
az appservice plan show --name nordvex-asp --resource-group nordvex-rg \
--query "{sku:sku.name, os:kind}" --output json
# Esperado: {"sku": "P1v3", "os": "linux"}
Etapa 50 — Configurar escalonamento para o App Service Plan
Contexto: O plano deve escalar automaticamente entre 1 e 3 instâncias baseado em uso de CPU.
Tarefas:
- [Portal] Configure autoscale. Navegue até:
nordvex-asp → Settings → Scale out (App Service plan)- Scale mode: Custom autoscale
- Minimum: 1 | Maximum: 3 | Default: 1
- Scale-out: CPU > 70% por 10 min → adicionar 1 instância
- Scale-in: CPU < 30% por 10 min → remover 1 instância
Etapa 51 — Criar um App Service
Contexto: Criar e associar o aplicativo web do portal de clientes ao plano nordvex-asp.
Tarefas:
- [CLI] Crie o Web App:
az webapp create \
--name nordvex-webapp \
--resource-group nordvex-rg \
--plan nordvex-asp \
--runtime "NODE:20-lts"
# O nome deve ser globalmente único — adicione sufixo se necessário
- [CLI] Obtenha a URL:
az webapp show --name nordvex-webapp --resource-group nordvex-rg \
--query "defaultHostName" --output tsv
# Acesse https://<defaultHostName> — deve exibir a página padrão do App Service
Etapa 52 — Configurar certificados e TLS para o App Service
Contexto: O portal deve forçar HTTPS com TLS 1.2 como versão mínima.
Tarefas:
- [Portal] Force HTTPS. Navegue até:
nordvex-webapp → Settings → Configuration → General settings- HTTPS Only: On
- [Portal] Defina TLS mínimo. Navegue até:
nordvex-webapp → Settings → TLS/SSL settings- Minimum TLS Version: 1.2
Critérios de Validação:
az webapp show --name nordvex-webapp --resource-group nordvex-rg \
--query "{httpsOnly:httpsOnly, minTls:siteConfig.minTlsVersion}" --output json
# Esperado: {"httpsOnly": true, "minTls": "1.2"}
Etapa 53 — Mapear DNS personalizado para o App Service
Contexto: O portal deve ser acessível pelo domínio portal.nordvex.internal. Você deve documentar os registros DNS necessários.
Tarefas:
- [Portal] Acesse o blade de domínios. Navegue até:
nordvex-webapp → Settings → Custom domains → Add custom domain - [Portal] Observe e documente os registros DNS necessários:
- TXT record de verificação
- Endereço IP do App Service para registro A
- [Portal] Se você possuir um domínio para teste, complete o mapeamento. Caso contrário, documente os valores exibidos.
Etapa 54 — Configurar backup para o App Service
Contexto: Backups automáticos semanais devem ser configurados usando a conta de armazenamento existente.
Tarefas:
- [Portal] Configure o backup. Navegue até:
nordvex-webapp → Settings → Backups → Configure- Storage account:
nordvexstg| Container:nordvex-backups - Backup frequency: Weekly | Time: 02:00 UTC | Retention: 4 backups
- Storage account:
- [Portal] Execute um backup imediato:
Backups → Backup now
Critérios de Validação:
- O blade Backups deve exibir ao menos 1 entrada com status Succeeded.
- O contêiner
nordvex-backupsdeve conter os arquivos de backup gerados.
Etapa 55 — Configurar rede para o App Service
Contexto: O portal não deve ser acessível pela internet pública. O acesso deve ser restrito à VNet via VNet Integration.
Tarefas:
- [Portal] Adicione sub-rede na VNet. Navegue até:
nordvex-vnet-temp → Subnets → + Subnet- Name:
nordvex-snet-app| Address range:10.0.2.0/24
- Name:
- [Portal] Configure VNet Integration. Navegue até:
nordvex-webapp → Settings → Networking → VNet integration → Add VNet integration- Virtual network:
nordvex-vnet-temp| Subnet:nordvex-snet-app
- Virtual network:
- [CLI] Confirme:
az webapp vnet-integration list \
--name nordvex-webapp \
--resource-group nordvex-rg \
--output table
Etapa 56 — Configurar slots de implantação para o App Service
Contexto: A Nordvex adota blue-green deployment. O App Service deve ter um slot de staging para validação antes da promoção para produção.
Tarefas:
- [Portal] Crie o slot de staging. Navegue até:
nordvex-webapp → Deployment → Deployment slots → Add slot- Name:
staging| Clone settings from:nordvex-webapp (production)
- Name:
- [Portal] Acesse a URL do slot:
https://nordvex-webapp-staging.azurewebsites.net - [Portal] Execute um swap. Navegue até:
nordvex-webapp → Deployment → Deployment slots → Swap- Source:
staging| Target:production
- Source:
Critérios de Validação:
- O blade Deployment slots deve exibir 2 slots:
productionestaging. - Após o swap, a URL de produção deve corresponder ao conteúdo que estava no slot
staging.
Domínio 6 — Redes
Etapa 57 — Criar e configurar redes virtuais e sub-redes
Contexto: Uma nova VNet de produção deve ser criada com espaço de endereços planejado e sub-redes segmentadas por função.
Tarefas:
- [CLI] Crie a VNet de produção:
az network vnet create \
--name nordvex-vnet \
--resource-group nordvex-net-rg \
--location eastus \
--address-prefix 10.1.0.0/16
- [Portal] Crie as sub-redes. Navegue até:
nordvex-vnet → Subnets → + Subnet
| Nome da Sub-rede | Prefixo | Finalidade |
|---|---|---|
| nordvex-snet-vm | 10.1.1.0/24 | VMs de produção |
| nordvex-snet-app | 10.1.2.0/24 | App Service Integration |
| nordvex-snet-data | 10.1.3.0/24 | Recursos de dados e Key Vault |
| AzureBastionSubnet | 10.1.0.0/27 | Obrigatório para Azure Bastion (nome exato) |
Critérios de Validação:
az network vnet subnet list --vnet-name nordvex-vnet \
--resource-group nordvex-net-rg --output table
# Deve retornar 4 sub-redes
Etapa 58 — Criar e configurar peering de rede virtual
Contexto: Para que os recursos da nordvex-vnet e nordvex-vnet-temp se comuniquem, é necessário peering bidirecional.
Tarefas:
- [Portal] Crie o peering. Navegue até:
nordvex-vnet → Peerings → + Add- Peering link name (local):
nordvex-peer-vnet-to-temp - Peering link name (remote):
nordvex-peer-temp-to-vnet - Virtual network:
nordvex-vnet-temp - Allow virtual network access: Enabled (ambas as direções)
- Peering link name (local):
Critérios de Validação:
az network vnet peering list --vnet-name nordvex-vnet --resource-group nordvex-net-rg --output table
az network vnet peering list --vnet-name nordvex-vnet-temp --resource-group nordvex-net-rg --output table
# Ambos devem retornar peeringState = Connected
Etapa 59 — Configurar IPs públicos
Contexto: O load balancer da Etapa 68 precisa de um IP público estático para configuração de DNS com registro fixo.
Tarefas:
- [CLI] Crie o IP público:
az network public-ip create \
--name nordvex-pip-lb \
--resource-group nordvex-net-rg \
--sku Standard \
--allocation-method Static \
--version IPv4 \
--dns-name nordvexlb \
--location eastus
Critérios de Validação:
az network public-ip show --name nordvex-pip-lb --resource-group nordvex-net-rg \
--query "allocationMethod" --output tsv
# Deve retornar: Static
Etapa 60 — Configurar rotas definidas pelo usuário (UDR)
Contexto: O tráfego de saída da sub-rede de VMs deve passar por um appliance de segurança simulado antes de sair para a internet.
Tarefas:
- [CLI] Crie a tabela de rotas e a rota:
az network route-table create \
--name nordvex-rt \
--resource-group nordvex-net-rg \
--location eastus
az network route-table route create \
--route-table-name nordvex-rt \
--resource-group nordvex-net-rg \
--name nordvex-route-internet \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.1.1.254
- [Portal] Associe a tabela à sub-rede. Navegue até:
nordvex-vnet → Subnets → nordvex-snet-vm → Route table → nordvex-rt → Save
Etapa 61 — Solucionar problemas de conectividade de rede
Contexto: A equipe relatou que nordvex-vm-dispatch não consegue se comunicar com nordvex-vm-scada. Use ferramentas de diagnóstico do Azure para identificar a causa.
Tarefas:
- [Portal] Teste o fluxo de IP. Navegue até:
Network Watcher → IP flow verify- VM:
nordvex-vm-dispatch| Direction: Inbound | Protocol: TCP | Port: 22 - Remote IP: IP privado de
nordvex-vm-scada
- VM:
- [Portal] Verifique o próximo salto. Navegue até:
Network Watcher → Next hop - [Portal] Documente o resultado e identifique qual NSG ou rota está causando o bloqueio.
Etapa 62 — Criar e configurar NSGs e grupos de segurança de aplicativo
Contexto: O NSG deve limitar o acesso: apenas o Bastion pode conectar via RDP/SSH e as VMs podem se comunicar entre si na porta 80.
Tarefas:
- [CLI] Crie o NSG e as regras:
az network nsg create \
--name nordvex-nsg-vm \
--resource-group nordvex-net-rg
# Permitir SSH do Bastion:
az network nsg rule create --nsg-name nordvex-nsg-vm --resource-group nordvex-net-rg \
--name AllowBastionSSH --priority 100 --direction Inbound \
--protocol Tcp --destination-port-ranges 22 \
--source-address-prefixes AzureBastionSubnet --access Allow
# Permitir RDP do Bastion:
az network nsg rule create --nsg-name nordvex-nsg-vm --resource-group nordvex-net-rg \
--name AllowBastionRDP --priority 110 --direction Inbound \
--protocol Tcp --destination-port-ranges 3389 \
--source-address-prefixes AzureBastionSubnet --access Allow
# Permitir HTTP entre VMs:
az network nsg rule create --nsg-name nordvex-nsg-vm --resource-group nordvex-net-rg \
--name AllowVNetHTTP --priority 200 --direction Inbound \
--protocol Tcp --destination-port-ranges 80 \
--source-address-prefixes VirtualNetwork --access Allow
# Negar todo o restante:
az network nsg rule create --nsg-name nordvex-nsg-vm --resource-group nordvex-net-rg \
--name DenyAllInbound --priority 4096 --direction Inbound \
--protocol "*" --destination-port-ranges "*" \
--source-address-prefixes "*" --access Deny
- [Portal] Associe o NSG à sub-rede. Navegue até:
nordvex-nsg-vm → Settings → Subnets → Associate → nordvex-vnet → nordvex-snet-vm
Etapa 63 — Avaliar regras de segurança efetivas em NSGs
Contexto: O auditor solicitou uma visualização das regras efetivas aplicadas à interface de rede da VM SCADA.
Tarefas:
- [Portal] Visualize regras efetivas. Navegue até:
nordvex-vm-scada → Networking → Network interface → <nic-name> → Effective security rules - [CLI] Capture as regras em JSON:
az network nic list-effective-nsg \
--name <nome-da-nic> \
--resource-group nordvex-net-rg \
--output json
Etapa 64 — Implementar o Azure Bastion
Contexto: O acesso administrativo às VMs deve ser feito exclusivamente via Azure Bastion, sem expor portas de gerenciamento à internet.
Azure Bastion Basic gera ~USD 0,19/h. Delete o recurso após uso durante o laboratório.
Tarefas:
- [Portal] Crie o Bastion. Navegue até:
nordvex-vnet → Bastion → Create Azure Bastion- Name:
nordvex-bastion| SKU: Basic - Subnet:
AzureBastionSubnet(criada na Etapa 57) - Public IP: Create new →
nordvex-pip-bastion
- Name:
- [Portal] Após a criação (~5–10 min), acesse
nordvex-vm-dispatchvia Bastion. Navegue até:nordvex-vm-dispatch → Connect → Bastion
Critérios de Validação:
az network bastion show --name nordvex-bastion --resource-group nordvex-net-rg \
--query "provisioningState" --output tsv
# Deve retornar: Succeeded
Etapa 65 — Configurar endpoints de serviço para PaaS do Azure
Contexto: A conta nordvexstg deve ser acessível apenas a partir da sub-rede de dados, sem passar pela internet pública.
Tarefas:
- [Portal] Adicione o service endpoint. Navegue até:
nordvex-vnet → Subnets → nordvex-snet-data → Service endpoints → Add service endpoint- Service:
Microsoft.Storage
- Service:
- [Portal] Adicione a sub-rede ao firewall do storage. Navegue até:
nordvexstg → Security + networking → Networking → Firewalls and virtual networks → Add existing virtual network- VNet:
nordvex-vnet| Subnet:nordvex-snet-data
- VNet:
Critérios de Validação:
az network vnet subnet show --name nordvex-snet-data \
--vnet-name nordvex-vnet --resource-group nordvex-net-rg \
--query "serviceEndpoints[0].service" --output tsv
# Deve retornar: Microsoft.Storage
Etapa 66 — Configurar endpoints privados para PaaS do Azure
Contexto: O Key Vault nordvex-kv deve ser acessível apenas via endpoint privado dentro da VNet.
Tarefas:
- [Portal] Crie o private endpoint. Navegue até:
nordvex-kv → Settings → Networking → Private endpoint connections → + Private endpoint- Name:
nordvex-pe-kv| Resource group:nordvex-net-rg - Target sub-resource:
vault - VNet:
nordvex-vnet| Subnet:nordvex-snet-data - Integrate with private DNS zone: Yes
- Name:
- [Portal] Desabilite o acesso público. Navegue até:
nordvex-kv → Settings → Networking → Disable public access
Critérios de Validação:
az network private-endpoint show --name nordvex-pe-kv \
--resource-group nordvex-net-rg \
--query "provisioningState" --output tsv
# Deve retornar: Succeeded
Etapa 67 — Configurar o Azure DNS
Contexto: O nome vm-scada.nordvex.internal deve resolver para o IP privado da VM correspondente dentro da VNet.
Tarefas:
- [CLI] Crie a zona DNS privada, vincule à VNet e crie o registro A:
az network private-dns zone create \
--name nordvex.internal \
--resource-group nordvex-net-rg
az network private-dns link vnet create \
--name nordvex-dns-link \
--resource-group nordvex-net-rg \
--zone-name nordvex.internal \
--virtual-network nordvex-vnet \
--registration-enabled true
az network private-dns record-set a add-record \
--zone-name nordvex.internal \
--resource-group nordvex-net-rg \
--record-set-name vm-scada \
--ipv4-address <IP-privado-da-vm-scada>
Critérios de Validação:
az network private-dns record-set a show \
--name vm-scada --zone-name nordvex.internal \
--resource-group nordvex-net-rg \
--query "aRecords[0].ipv4Address" --output tsv
# Deve retornar o IP privado da nordvex-vm-scada
Etapa 68 — Configurar load balancer público
Contexto: O sistema de despacho de carga exige distribuição de requisições entre as VMs com alta disponibilidade.
Tarefas:
- [Portal] Crie o Load Balancer. Navegue até:
Load balancers → Create- Name:
nordvex-lb| SKU: Standard | Type: Public - Frontend IP:
nordvex-pip-lb(criado na Etapa 59)
- Name:
- [Portal] Configure o backend pool. Navegue até:
nordvex-lb → Backend pools → + Add- Adicione as NICs de
nordvex-vm-scadaenordvex-vm-dispatch
- Adicione as NICs de
- [Portal] Crie a regra de balanceamento. Navegue até:
nordvex-lb → Load balancing rules → + Add- Protocol: TCP | Port: 80 | Health probe: HTTP na porta 80
Etapa 69 — Solucionar problemas de balanceamento de carga
Contexto: A sonda de integridade está reportando falha nas VMs. Identifique e corrija a causa.
Tarefas:
- [Portal] Verifique o health probe. Navegue até:
nordvex-lb → Monitoring → Metrics → Health Probe Status - [Portal] Execute Connection troubleshoot. Navegue até:
Network Watcher → Connection troubleshoot - [CLI] Adicione a regra de permissão para o load balancer no NSG:
az network nsg rule create --nsg-name nordvex-nsg-vm --resource-group nordvex-net-rg \
--name AllowAzureLoadBalancer --priority 150 --direction Inbound \
--protocol Tcp --destination-port-ranges 80 \
--source-address-prefixes AzureLoadBalancer --access Allow
Domínio 7 — Monitoramento
Etapa 70 — Interpretar métricas no Azure Monitor
Contexto: O time de operações precisa monitorar CPU e memória da VM SCADA em tempo real com um painel básico configurado.
Tarefas:
- [Portal] Acesse as métricas. Navegue até:
Monitor → Metrics → Select a scope → nordvex-vm-scada- Adicione:
Percentage CPU,Available Memory Bytes,Disk Read Bytes
- Adicione:
- [Portal] Configure
Percentage CPU: Aggregation = Average | Time range = Last 24 hours - [Portal] Fixe o gráfico. Clique em Pin to dashboard → Create new → Name: nordvex-dashboard
Etapa 71 — Configurar definições de log no Azure Monitor
Contexto: Todos os logs de diagnóstico da VM, do storage e do Key Vault devem ser enviados para um workspace do Log Analytics.
Tarefas:
- [CLI] Crie o workspace:
az monitor log-analytics workspace create \
--name nordvex-law \
--resource-group nordvex-rg \
--location eastus
# Capture o workspace ID:
az monitor log-analytics workspace show --name nordvex-law \
--resource-group nordvex-rg --query customerId --output tsv
- [Portal] Configure diagnóstico na VM. Navegue até:
nordvex-vm-scada → Monitoring → Diagnostic settings → Add diagnostic setting- Name:
nordvex-diag-vm| Destination:nordvex-law| Categories: All logs and metrics
- Name:
- [Portal] Repita para
nordvexstg(nordvex-diag-storage) enordvex-kv(nordvex-diag-kv).
Etapa 72 — Consultar e analisar logs no Azure Monitor
Contexto: O time de segurança precisa de consultas KQL para logins com falha e atividades recentes.
Tarefas:
- [Portal] Acesse os logs. Navegue até:
nordvex-law → Logs - [Portal] Execute a consulta de logins com falha:
SecurityEvent
| where TimeGenerated > ago(24h)
| where EventID == 4625
| summarize FailedLogins = count() by Account, Computer
| order by FailedLogins desc
- [Portal] Execute e salve a consulta de atividades:
AzureActivity
| where TimeGenerated > ago(1h)
| summarize count() by ResourceGroup, OperationNameValue
| order by count_ desc
Salve como: nordvex-query-activity
Etapa 73 — Configurar regras de alerta, grupos de ação e regras de processamento
Contexto: O NOC deve ser notificado quando a CPU da VM SCADA ultrapassar 90% por mais de 5 minutos.
Tarefas:
- [Portal] Crie o action group. Navegue até:
Monitor → Alerts → Action groups → + Create- Name:
nordvex-ag-noc| Short name:noc - Action type: Email/SMS | Email:
nordvex-ops-user@<seudominio>
- Name:
- [Portal] Crie a regra de alerta. Navegue até:
Monitor → Alerts → Alert rules → + Create- Scope:
nordvex-vm-scada - Condition: Percentage CPU > 90 (média, 5 min)
- Action group:
nordvex-ag-noc - Name:
nordvex-alert-cpu-scada| Severity: 2
- Scope:
- [Portal] Crie uma alert processing rule para suprimir notificações nos fins de semana.
Critérios de Validação:
az monitor metrics alert show --name nordvex-alert-cpu-scada \
--resource-group nordvex-rg --query "enabled" --output tsv
# Deve retornar: True
Etapa 74 — Configurar e interpretar monitoramento com Azure Monitor Insights
Contexto: VM Insights deve ser habilitado para a VM SCADA e Storage Insights revisado para a conta principal.
Tarefas:
- [Portal] Habilite VM Insights. Navegue até:
nordvex-vm-scada → Monitoring → Insights → Enable- Log Analytics workspace:
nordvex-law
- Log Analytics workspace:
- [Portal] Após instalação do agente (até 30 min), acesse a aba Performance do VM Insights.
- [Portal] Acesse Storage Insights. Navegue até:
nordvexstg → Monitoring → Insights
Etapa 75 — Usar o Azure Network Watcher e o Connection Monitor
Contexto: O time de redes precisa de monitoramento contínuo da conectividade entre as VMs.
Tarefas:
- [Portal] Confirme que o Network Watcher está habilitado. Navegue até:
Network Watcher → Overview → East US → Enabled - [Portal] Crie o monitor de conexão. Navegue até:
Network Watcher → Connection monitor → Create- Name:
nordvex-cm-vm - Source:
nordvex-vm-dispatch - Destination: IP privado de
nordvex-vm-scada| Port: 22 - Test frequency: 30 seconds
- Name:
Domínio 8 — Backup e Recuperação de Desastres
Etapa 76 — Criar um cofre dos Serviços de Recuperação
Contexto: O Recovery Services Vault é o serviço central de backup e DR da Nordvex.
Este vault também habilita o backup do Azure Files configurado na Etapa 30. Após criar o vault aqui, você pode retornar à Etapa 30 e habilitar o backup integrado do compartilhamento nordvex-share.
Tarefas:
- [CLI] Crie o vault:
az backup vault create \
--name nordvex-rsv \
--resource-group nordvex-rg \
--location eastus
- [Portal] Confirme a redundância. Navegue até:
nordvex-rsv → Settings → Properties → Backup configuration- Storage replication type: Geo-redundant
Critérios de Validação:
az backup vault show --name nordvex-rsv --resource-group nordvex-rg \
--query "properties.provisioningState" --output tsv
# Deve retornar: Succeeded
Etapa 77 — Criar um cofre de Backup do Azure
Contexto: O Azure Backup Vault é o recurso dedicado para workloads modernas (discos gerenciados, blobs, PostgreSQL).
Tarefas:
- [Portal] Crie o Backup Vault. Navegue até:
Backup center → Vaults → + Backup vault- Name:
nordvex-bv| Resource group:nordvex-rg| Region: East US - Backup storage redundancy: Geo-redundant
- Name:
Critérios de Validação:
az dataprotection backup-vault list --resource-group nordvex-rg \
--query "[?name=='nordvex-bv'].provisioningState" --output tsv
# Deve retornar: Succeeded
Etapa 78 — Criar e configurar uma política de backup
Contexto: A política deve definir backup diário das VMs com retenção de 30 dias e backup semanal com retenção de 12 semanas.
Tarefas:
- [Portal] Crie a política. Navegue até:
nordvex-rsv → Backup policies → + Add → Azure Virtual Machine- Policy name:
nordvex-backup-policy - Backup frequency: Daily | Time: 02:00 UTC
- Daily backup point retention: 30 days
- Weekly backup point: Sunday | Retention: 12 weeks
- Policy name:
Critérios de Validação:
az backup policy show --name nordvex-backup-policy --vault-name nordvex-rsv \
--resource-group nordvex-rg \
--query "properties.schedulePolicy.schedulePolicyType" --output tsv
# Deve retornar: SimpleSchedulePolicy
Etapa 79 — Realizar operações de backup e restauração com o Azure Backup
Contexto: A VM SCADA deve ser protegida e um backup sob demanda deve ser executado para validar o fluxo completo.
Tarefas:
- [Portal] Habilite a proteção. Navegue até:
nordvex-rsv → Backup → Azure Virtual Machine- Policy:
nordvex-backup-policy| Adicionenordvex-vm-scada→ Enable Backup
- Policy:
- [Portal] Execute backup sob demanda. Navegue até:
nordvex-rsv → Backup items → Azure Virtual Machine → nordvex-vm-scada → Backup now- Retain backup until: 30 days
- [Portal] Acompanhe o progresso. Navegue até:
nordvex-rsv → Monitoring + reports → Backup jobs
Critérios de Validação:
- O blade Backup jobs deve exibir o trabalho de
nordvex-vm-scadacom status Completed. - O blade Backup items deve mostrar a VM com ao menos 1 recovery point disponível.
Etapa 80 — Configurar o Azure Site Recovery
Contexto: A VM SCADA deve ter replicação contínua para a região Brazil South como parte do plano de DR.
Site Recovery gera ~USD 0,16/VM/h enquanto ativo. Desabilite a replicação após a Etapa 81.
Tarefas:
- [Portal] Configure a replicação. Navegue até:
nordvex-rsv → Site Recovery → Replicate- Source location: East US | VMs:
nordvex-vm-scada - Target location: Brazil South
- Target resource group:
nordvex-rg-dr(criar automaticamente)
- Source location: East US | VMs:
- [Portal] Acompanhe o progresso. Navegue até:
nordvex-rsv → Site Recovery jobs
Critérios de Validação:
O blade Replicated items deve exibir nordvex-vm-scada com status Protected e sincronização em 100%.
Etapa 81 — Executar failover para região secundária
Contexto: Simulado de DR. Execute um test failover para Brazil South sem interromper a VM de produção.
Tarefas:
- [Portal] Execute o test failover. Navegue até:
nordvex-rsv → Replicated items → nordvex-vm-scada → Test failover- Recovery point: Latest processed
- Azure virtual network: selecione ou crie uma VNet temporária em Brazil South
- [Portal] Acompanhe. Navegue até:
nordvex-rsv → Site Recovery jobs - [Portal] Limpe o ambiente de teste. Navegue até:
nordvex-rsv → Replicated items → nordvex-vm-scada → Cleanup test failover
Critérios de Validação:
- O trabalho de Test failover deve ter status Completed.
- A operação Cleanup test failover deve ser concluída sem erros.
Etapa 82 — Configurar e interpretar relatórios e alertas de backup
Contexto: O auditor precisa de um relatório consolidado de conformidade de backup e um alerta automático para falhas.
Tarefas:
- [Portal] Configure os relatórios. Navegue até:
nordvex-rsv → Monitoring + reports → Backup reports → Configure- Log Analytics workspace:
nordvex-law
- Log Analytics workspace:
- [Portal] Acesse o painel Summary e observe:
- Instâncias protegidas vs. não protegidas
- Trabalhos de backup nas últimas 24h
- Consumo de armazenamento de backup
- [Portal] Crie o alerta de falha de backup. Navegue até:
Monitor → Alerts → Alert rules → + Create- Signal type: Log (Log Analytics) | Workspace:
nordvex-law - Consulta KQL:
- Signal type: Log (Log Analytics) | Workspace:
AddonAzureBackupJobs
| where JobStatus == "Failed"
| where TimeGenerated > ago(1h)
- Alert rule name:
nordvex-alert-backup-failure| Severity: 1 - Evaluation frequency: 1 hour | Action group:
nordvex-ag-noc
Critérios de Validação:
az monitor scheduled-query list --resource-group nordvex-rg \
--query "[?name=='nordvex-alert-backup-failure'].enabled" --output tsv
# Deve retornar: True
- O blade Backup reports deve exibir ao menos 1 item protegido (
nordvex-vm-scada). - A regra
nordvex-alert-backup-failuredeve aparecer emMonitor → Alert rulescom status Enabled.
Validação Final do Ambiente
Ao concluir todas as 82 etapas, o ambiente da Nordvex deve estar composto pelos seguintes recursos:
| Categoria | Recursos | Grupo de Recursos |
|---|---|---|
| Identidade | 3 usuários, 2 grupos, 1 convidado, SSPR | Microsoft Entra ID |
| Governança | 2 policies, 1 lock, budget, management group | nordvex-rg |
| Storage | nordvexstg (ZRS + CMK), nordvexarchive (GRS) | nordvex-rg |
| Compute | nordvex-vm-scada, nordvex-vm-dispatch, nordvex-vmss | nordvex-net-rg |
| Contêineres | nordvexacr, nordvex-aci-billing, nordvex-ca-billing | nordvex-rg |
| App Service | nordvex-webapp (P1v3, 2 slots) | nordvex-rg |
| Rede | nordvex-vnet, NSG, LB, Bastion, DNS privado, UDR | nordvex-net-rg |
| Monitoramento | nordvex-law, alertas, Connection Monitor | nordvex-rg |
| Backup e DR | nordvex-rsv, nordvex-bv, Site Recovery (Brazil South) | nordvex-rg |
Consulta final de validação:
az resource list \
--query "[?starts_with(resourceGroup,'nordvex')]" \
--output table | wc -l
# O resultado deve indicar ao menos 35 recursos distintos
Laboratório AZ-104 — Nordvex Energia S.A. | Prefixo: nordvex | 82 etapas | 8 domínios