[AZ-104] Grand Labs - NovaCarga Logistica S.A
Ambiente Cumulativo de Implantação Real
Narrativa Central
Empresa: NovaCarga Logística S.A. | Setor: Logística e transporte de cargas fracionadas | Sede: São Paulo, Brasil
A NovaCarga é uma empresa de médio porte com 1.200 colaboradores distribuídos entre sua sede em São Paulo e filiais em Recife, Porto Alegre e Manaus. Após uma auditoria de segurança e um incidente de acesso indevido a dados de clientes, a diretoria aprovou a migração completa da infraestrutura de TI para o Azure.
O projeto foi batizado de Projeto Âncora e você é o engenheiro de cloud responsável pela implantação. O ambiente será construído do zero, seguindo os requisitos levantados pelo time de arquitetura: identidade centralizada no Microsoft Entra ID, segmentação de rede por função de carga de trabalho, armazenamento seguro para documentos fiscais e logs de rastreamento, VMs para os sistemas legados de WMS e TMS, contêineres para microserviços da nova plataforma de rastreamento, e monitoramento em conformidade com as políticas da LGPD.
Cada etapa deste laboratório corresponde a uma entrega real do Projeto Âncora. O prefixo de todos os recursos é ncarga. 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 |
|---|---|---|---|
| PowerShell | 7.2+ | Todas | $PSVersionTable.PSVersion |
| Az PowerShell module | 10.0+ | Todas | Get-Module Az -ListAvailable |
| Microsoft.Graph module | 2.0+ | 1–5 | Get-Module Microsoft.Graph -ListAvailable |
| Bicep CLI | Qualquer | 33–36 | bicep --version |
| Docker Desktop | 24+ | 44–46 | docker --version |
| Azure CLI | 2.50+ | 46–47 | az --version |
| AzCopy | v10+ | 25 | azcopy --version |
- 💰 Custo estimado para execução completa: USD 20–45
- ⏱️ Tempo estimado total: 14–18 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 (Standard) | ~USD 0,19/h | Desligue após uso |
| VM Standard_D4s_v3 | ~USD 0,19/h | Desaloque entre sessões |
| VMSS (2x D2s_v3) | ~USD 0,19/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 78 |
| Load Balancer Standard | ~USD 0,008/h | Custo baixo, pode manter |
Convenção de Nomenclatura
| Tipo de Recurso | Exemplo |
|---|---|
| Resource group | ncarga-rg-storage |
| Rede virtual | ncarga-vnet-compute |
| VM | ncarga-vm-wms01 |
| Storage account | ncargatms001 (sem hífens, máx 24 chars) |
| NSG | ncarga-nsg-compute |
| Key Vault | ncarga-kv-001 |
Í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: O Projeto Âncora começa pela identidade. Antes de qualquer recurso Azure ser provisionado, o time de TI da NovaCarga precisa existir no Microsoft Entra ID. A auditoria identificou que usuários estavam compartilhando credenciais e que não havia grupos de segurança para controlar acesso por função.
Tarefas:
[PowerShell] Crie três usuários membros no tenant com os parâmetros abaixo usando New-MgUser. Defina UsageLocation como BR, AccountEnabled como $true e gere senha temporária com ForceChangePasswordNextSignIn habilitado. Capture o Id de cada usuário após a criação.
| DisplayName | UserPrincipalName | JobTitle | Department |
|---|---|---|---|
| Ana Ferreira | ana.ferreira@<tenant>.onmicrosoft.com | Cloud Engineer | TI |
| Bruno Oliveira | bruno.oliveira@<tenant>.onmicrosoft.com | WMS Admin | Operacoes |
| Carla Mendes | carla.mendes@<tenant>.onmicrosoft.com | Finance Analyst | Financeiro |
[PowerShell] Crie dois grupos de segurança com SecurityEnabled = $true e MailEnabled = $false usando New-MgGroup. Adicione os membros indicados com New-MgGroupMember.
| DisplayName | MailNickname | Membros iniciais |
|---|---|---|
| ncarga-ti | ncarga-ti | ana.ferreira |
| ncarga-ops | ncarga-ops | bruno.oliveira |
[Portal] Confirme os usuários e grupos navegando em: Microsoft Entra ID → Users e Microsoft Entra ID → Groups. Verifique que o campo Usage location de cada usuário está definido como Brazil.
Critérios de Validação:
# Deve retornar UsageLocation = BR:
Get-MgUser -Filter "startsWith(UserPrincipalName,'ana.ferreira')" |
Select-Object DisplayName, UserPrincipalName, UsageLocation
# Deve retornar o Id de ana.ferreira:
Get-MgGroupMember -GroupId (Get-MgGroup -Filter "displayName eq 'ncarga-ti'").Id |
Select-Object Id
Etapa 2 — Gerenciar propriedades de usuários e grupos
Contexto: O time de RH solicitou ajustes nos atributos de perfil para que os relatórios de licença e auditoria estejam corretos. Além disso, o grupo ncarga-ops precisa ser convertido para associação dinâmica, pois o volume de contratações sazonais torna inviável a gestão manual.
Tarefas:
[PowerShell] Atualize os três usuários com Update-AzureADUser. Adicione o atributo CompanyName com valor NovaCarga Logistica SA e OfficeLocation como Sao Paulo HQ para todos.
[PowerShell] Converta o grupo ncarga-ops para associação dinâmica usando Update-MgGroup. Defina a regra dinâmica para incluir usuários cujo department seja igual a Operacoes e o MembershipType como DynamicMembership.
Grupos dinâmicos requerem licença Microsoft Entra ID P1 ou superior no tenant.
[Portal] Confirme a regra dinâmica em: Microsoft Entra ID → Groups → ncarga-ops → Dynamic membership rules. Aguarde o processamento e verifique que bruno.oliveira aparece como membro dinâmico.
Critérios de Validação:
# Deve retornar NovaCarga Logistica SA:
Get-MgUser -Filter "displayName eq 'Ana Ferreira'" -Property CompanyName |
Select-Object CompanyName
# Deve retornar Dynamic:
Get-MgGroup -Filter "displayName eq 'ncarga-ops'" |
Select-Object MembershipType
Etapa 3 — Gerenciar licenças no Microsoft Entra ID
Contexto: A NovaCarga adquiriu licenças Microsoft 365 Business Premium para os usuários do Projeto Âncora. O time jurídico exige que apenas usuários ativos com UsageLocation definida possam receber licenças — requisito derivado da política de conformidade com a LGPD.
Tarefas:
[PowerShell] Liste os SKUs de licença disponíveis no tenant usando Get-MgSubscribedSku. Capture o SkuId correspondente ao plano disponível com unidades restantes.
[PowerShell] Atribua a licença capturada aos três usuários usando Set-MgUserLicense. O parâmetro AddLicenses deve conter o objeto com SkuId. Não desabilite planos de serviço individuais.
[Portal] Confirme a atribuição navegando em: Microsoft Entra ID → Users → [usuário] → Licenses. A licença deve aparecer como Assigned para cada um dos três usuários.
Critérios de Validação:
# Deve retornar SkuPartNumber preenchido e status Enabled:
Get-MgUserLicenseDetail -UserId (Get-MgUser -Filter "displayName eq 'Ana Ferreira'").Id |
Select-Object SkuPartNumber, ServicePlans
Etapa 4 — Gerenciar usuários externos
Contexto: A NovaCarga contratou uma consultoria externa, a LogiPartners, para auxiliar na configuração do sistema de rastreamento durante os primeiros três meses do Projeto Âncora. O usuário externo precisa de acesso controlado ao tenant, sem ser promovido a membro permanente.
Tarefas:
[PowerShell] Convide o usuário externo consultor@logipartners.example.com usando New-MgInvitation com os parâmetros:
| Parâmetro | Valor |
|---|---|
| InvitedUserDisplayName | Consultor LogiPartners |
| InviteRedirectUrl | https://portal.azure.com |
| SendInvitationMessage | $true |
Capture o Id do usuário convidado na saída do comando.
[Portal] Confirme o usuário guest em: Microsoft Entra ID → Users. Filtre por User type = Guest e verifique o status PendingAcceptance ou Accepted.
[Portal] Adicione o usuário convidado ao grupo ncarga-ti navegando em: Microsoft Entra ID → Groups → ncarga-ti → Members → Add members.
Critérios de Validação:
# Deve retornar UserType = Guest:
Get-MgUser -Filter "userType eq 'Guest'" |
Where-Object { $_.Mail -like "*logipartners*" } |
Select-Object DisplayName, UserType, Mail
# Deve incluir Consultor LogiPartners com UserType = Guest:
Get-MgGroupMember -GroupId (Get-MgGroup -Filter "displayName eq 'ncarga-ti'").Id |
ForEach-Object { Get-MgUser -UserId $_.Id } |
Select-Object DisplayName, UserType
Etapa 5 — Configurar Self-Service Password Reset (SSPR)
Contexto: O helpdesk registra em média 40 chamados mensais relacionados a redefinição de senha. O gerente de TI aprovou a implantação do SSPR para o grupo ncarga-ti, reduzindo a carga operacional antes que o restante dos usuários seja migrado.
Tarefas:
[Portal] Habilite o SSPR para Selected grupos e selecione ncarga-ti. Navegue até: Microsoft Entra ID → Protection → Password reset → Properties.
[Portal] Configure os métodos de autenticação em: Microsoft Entra ID → Protection → Password reset → Authentication methods
| Parâmetro | Valor |
|---|---|
| Number of methods required to reset | 1 |
| Methods available | Mobile app code, Email |
[Portal] Habilite o registro obrigatório e defina o intervalo de reconfirmação em: Microsoft Entra ID → Protection → Password reset → Registration
| Parâmetro | Valor |
|---|---|
| Require users to register when signing in | Yes |
| Number of days before users are asked to re-confirm | 180 |
Critérios de Validação:
Password reset → Properties: campo Self service password reset enabled = Selected, gruponcarga-tilistado.Password reset → Authentication methods: Number of methods required = 1, métodos habilitados incluem Mobile app code e Email.
Etapa 6 — Gerenciar funções integradas do Azure (RBAC)
Contexto: Com a identidade estruturada, o time de arquitetura definiu o modelo de acesso ao Azure. Ana Ferreira precisa de acesso administrativo ao ambiente, Bruno Oliveira de acesso de leitura para os recursos de operações, e o consultor externo deve ter acesso apenas para monitorar o ambiente.
Tarefas:
[PowerShell] Atribua a função Contributor para ana.ferreira no escopo da subscription atual usando New-AzRoleAssignment com os parâmetros SignInName, RoleDefinitionName e Scope. Capture o RoleAssignmentId gerado.
[PowerShell] Atribua a função Reader para o grupo ncarga-ops no escopo da subscription. Use o ObjectId do grupo obtido na Etapa 1.
[PowerShell] Atribua a função Monitoring Reader para o usuário guest consultor@logipartners.example.com no escopo da subscription.
Critérios de Validação:
# Deve retornar 3 linhas com as funções Contributor, Reader e Monitoring Reader:
Get-AzRoleAssignment -Scope "/subscriptions/<subscription-id>" |
Where-Object { $_.DisplayName -in @('Ana Ferreira','ncarga-ops','Consultor LogiPartners') } |
Select-Object DisplayName, RoleDefinitionName, Scope
Etapa 7 — Atribuir funções em diferentes escopos
Contexto: Carla Mendes, do time financeiro, precisa de acesso administrativo apenas ao resource group de financeiro, sem acesso ao restante do ambiente. Esta etapa demonstra o princípio de menor privilégio aplicado a escopos granulares.
Tarefas:
[PowerShell] Crie o resource group ncarga-rg-financeiro na região brazilsouth usando New-AzResourceGroup.
[PowerShell] Atribua a função Contributor para carla.mendes no escopo /subscriptions/<id>/resourceGroups/ncarga-rg-financeiro usando New-AzRoleAssignment.
[PowerShell] Confirme que Carla não possui atribuição no escopo da subscription. Use Get-AzRoleAssignment -SignInName carla.mendes@... e verifique o campo Scope.
Critérios de Validação:
# Deve retornar Contributor com Scope = .../resourceGroups/ncarga-rg-financeiro
# Não deve aparecer Scope = /subscriptions/<id> para Carla:
Get-AzRoleAssignment -SignInName "carla.mendes@<tenant>.onmicrosoft.com" |
Select-Object RoleDefinitionName, Scope
Etapa 8 — Interpretar atribuições de acesso
Contexto: Antes de prosseguir com a criação dos demais resource groups, o time de segurança solicitou uma revisão das atribuições de acesso efetivas para cada usuário, documentando o acesso herdado e direto de cada identidade.
Tarefas:
[PowerShell] Liste todas as atribuições de função da subscription atual, filtrando pelos três usuários membros e pelo grupo ncarga-ops, usando Get-AzRoleAssignment -IncludeClassicAdministrators $false.
[Portal] Verifique o acesso efetivo de ana.ferreira e carla.mendes em: Subscription → Access control (IAM) → Check access. Inclua as funções herdadas de grupos.
[PowerShell] Gere um relatório consolidado em formato de tabela com DisplayName, RoleDefinitionName, Scope e ObjectType para todos os principals do Projeto Âncora. Exporte para ~/ncarga/rbac-report.csv.
Critérios de Validação:
# Deve conter as colunas corretas e mínimo de 4 linhas:
Import-Csv ~/ncarga/rbac-report.csv | Select-Object -First 5
# Colunas esperadas: DisplayName, RoleDefinitionName, Scope, ObjectType
Etapa 9 — Implementar e gerenciar Azure Policy
Contexto: A auditoria identificou que recursos estavam sendo criados sem tags obrigatórias e em regiões não autorizadas. Para garantir conformidade desde o início, o time de governança exige políticas de localização e nomenclatura antes de qualquer implantação.
Tarefas:
[PowerShell] Atribua a policy built-in Allowed locations (ID: e56962a6-4747-49cd-b67b-bf8b01975c4f) no escopo da subscription usando New-AzPolicyAssignment. Passe listOfAllowedLocations como array com eastus e brazilsouth.
[PowerShell] Atribua a policy built-in Require a tag and its value on resources (ID: 1e30110a-5ceb-460c-a204-c1c3969c6d62) no escopo da subscription. Configure a tag obrigatória como Project com valor Ancora.
[Portal] Confirme as atribuições em: Policy → Compliance. Force a avaliação com Start-AzPolicyComplianceScan se necessário.
Critérios de Validação:
# Deve retornar 2 linhas, uma para cada policy atribuída:
Get-AzPolicyAssignment |
Where-Object { $_.Properties.DisplayName -like "*Allowed*" -or $_.Properties.DisplayName -like "*tag*" } |
Select-Object Name, @{N='DisplayName';E={$_.Properties.DisplayName}}, @{N='Scope';E={$_.Properties.Scope}}
Etapa 10 — Configurar bloqueios de recursos
Contexto: O resource group ncarga-rg-financeiro contém dados sensíveis de faturamento. O time jurídico exige que ele não possa ser excluído acidentalmente, mesmo por administradores. Os recursos de rede principal também precisam de bloqueio de modificação durante o período de implantação.
Tarefas:
[PowerShell] Aplique um lock do tipo CanNotDelete no resource group ncarga-rg-financeiro com nome ncarga-lock-financeiro e notas Protecao juridica LGPD usando New-AzResourceLock.
[PowerShell] Crie o resource group ncarga-rg-network na região eastus com a tag Project=Ancora. Aplique um lock do tipo ReadOnly com nome ncarga-lock-network-ro.
[Portal] Navegue em: Resource groups → ncarga-rg-financeiro → Locks. Tente excluir o resource group pelo portal e confirme que a operação é bloqueada.
Critérios de Validação:
# Deve retornar LockLevel = CanNotDelete:
Get-AzResourceLock -ResourceGroupName "ncarga-rg-financeiro" |
Select-Object Name, @{N='LockLevel';E={$_.Properties.Level}}, @{N='Notes';E={$_.Properties.Notes}}
# Deve retornar LockLevel = ReadOnly:
Get-AzResourceLock -ResourceGroupName "ncarga-rg-network" |
Select-Object Name, @{N='LockLevel';E={$_.Properties.Level}}
Etapa 11 — Aplicar e gerenciar tags em recursos
Contexto: O time de FinOps definiu uma taxonomia de tags para rastrear custos por projeto, ambiente e equipe responsável. As tags precisam ser aplicadas retroativamente aos resource groups já criados e prospectivamente em todos os novos recursos.
Tarefas:
[PowerShell] Aplique o conjunto de tags abaixo em ncarga-rg-financeiro e ncarga-rg-network usando Update-AzTag com a operação Merge:
| Tag | Valor |
|---|---|
| Project | Ancora |
| Environment | Production |
| Owner | ana.ferreira |
| CostCenter | TI-001 |
[PowerShell] Crie o resource group ncarga-rg-compute na região eastus já com as quatro tags acima usando New-AzResourceGroup -Tag.
[PowerShell] Liste todos os resource groups com a tag Project=Ancora usando Get-AzResourceGroup -Tag.
Critérios de Validação:
# Deve retornar as 4 tags:
(Get-AzResourceGroup -Name "ncarga-rg-network").Tags
# Deve retornar Count >= 2:
Get-AzResource -TagName "Project" -TagValue "Ancora" | Measure-Object
Etapa 12 — Gerenciar resource groups
Contexto: O Projeto Âncora cresceu e agora exige um quarto resource group para os recursos de storage. Além disso, o time de operações precisa mover um recurso de teste criado no resource group errado para o correto, sem recriar o recurso.
Tarefas:
[PowerShell] Crie o resource group ncarga-rg-storage na região brazilsouth com as quatro tags padrão do projeto.
[PowerShell] Crie um Storage Account temporário (ncargatest001, SKU: Standard_LRS) no resource group ncarga-rg-compute para simular o recurso no local errado.
[PowerShell] Mova o Storage Account ncargatest001 de ncarga-rg-compute para ncarga-rg-storage usando Move-AzResource. Capture o ID do recurso antes do move com Get-AzStorageAccount.
Critérios de Validação:
# Deve retornar ResourceGroupName = ncarga-rg-storage:
Get-AzStorageAccount -Name "ncargatest001" -ResourceGroupName "ncarga-rg-storage" |
Select-Object StorageAccountName, ResourceGroupName
# Deve retornar saída vazia:
Get-AzStorageAccount -ResourceGroupName "ncarga-rg-compute" |
Where-Object { $_.StorageAccountName -eq "ncargatest001" }
Etapa 13 — Gerenciar subscriptions
Contexto: O diretor de TI solicitou um inventário completo da subscription atual antes de iniciar as negociações para uma segunda subscription dedicada ao ambiente de homologação.
Tarefas:
[PowerShell] Obtenha os detalhes da subscription atual usando Get-AzSubscription. Capture o Id, Name e TenantId em variáveis que serão usadas nas etapas seguintes.
[Portal] Confirme o nome, ID e tenant em: Subscriptions → [sua subscription] → Properties. Verifique o status de pagamento em: Cost Management + Billing → Subscriptions.
[PowerShell] Adicione a tag ProjectAncora=true diretamente na subscription usando Update-AzTag -ResourceId "/subscriptions/<id>" -Tag @{ProjectAncora="true"} -Operation Merge.
Critérios de Validação:
# Deve retornar ProjectAncora = true:
(Get-AzSubscription -SubscriptionId $subscriptionId).Tags
# Deve retornar State = Enabled:
Get-AzSubscription | Select-Object Name, Id, TenantId, State
Etapa 14 — Gerenciar custos com alertas, budgets e Azure Advisor
Contexto: O CFO estabeleceu um limite mensal de USD 500 para o Projeto Âncora durante a fase de implantação. O time de FinOps precisa configurar alertas automáticos e revisar as recomendações do Azure Advisor para otimizar os recursos já criados.
Tarefas:
[Portal] Crie o budget em: Cost Management + Billing → Budgets → Add
| Parâmetro | Valor |
|---|---|
| Name | ncarga-budget-monthly |
| Reset period | Monthly |
| Budget amount | 500 USD |
| Alert threshold 1 | 80% (Actual) |
| Alert threshold 2 | 100% (Forecasted) |
| Alert email | ana.ferreira@<tenant>.onmicrosoft.com |
[Portal] Confirme o budget em: Cost Management → Cost alerts. Verifique que ncarga-budget-monthly aparece com Status = Active.
[Portal] Revise as recomendações em: Azure Advisor → All recommendations. Filtre pela subscription e registre ao menos uma recomendação nas categorias Cost e Reliability.
Critérios de Validação:
- Budget
ncarga-budget-monthlycom Amount = 500 USD e Status = Active. - Dois alertas configurados: 80% Actual e 100% Forecasted.
- Azure Advisor exibe score para a subscription com ao menos uma recomendação em Cost.
Etapa 15 — Configurar management groups
Contexto: Com a subscription do Projeto Âncora ativa, o time de arquitetura definiu uma hierarquia de management groups para suportar a expansão prevista: uma subscription de produção (atual) e uma futura de homologação.
Tarefas:
[PowerShell] Crie um management group de nível 1 com ID ncarga-mg-root e nome de exibição NovaCarga Root usando New-AzManagementGroup.
[PowerShell] Crie um management group filho com ID ncarga-mg-prod e nome NovaCarga Production subordinado ao ncarga-mg-root usando o parâmetro -ParentId.
[PowerShell] Mova a subscription atual para o management group ncarga-mg-prod usando New-AzManagementGroupSubscription -GroupId ncarga-mg-prod -SubscriptionId <id>.
Critérios de Validação:
# Deve retornar Name = ncarga-mg-prod com ParentId contendo ncarga-mg-root:
Get-AzManagementGroup -GroupName "ncarga-mg-prod" -Expand -Recurse |
Select-Object Name, DisplayName, ParentId
# Deve retornar sua subscription listada sob ncarga-mg-prod:
Get-AzManagementGroupSubscription -GroupId "ncarga-mg-prod" |
Select-Object DisplayName, Id
Domínio 2 — Storage
Etapa 16 — Configurar firewalls e redes virtuais do Azure Storage
Contexto: O storage account ncargatest001, movido para ncarga-rg-storage na Etapa 12, será o repositório oficial de documentos fiscais da NovaCarga. Por requisito da auditoria, o acesso público irrestrito precisa ser desabilitado.
Tarefas:
[PowerShell] Desabilite o acesso público de rede ao storage account ncargatest001 usando Update-AzStorageAccountNetworkRuleSet. Configure DefaultAction como Deny e Bypass como AzureServices,Logging,Metrics.
[PowerShell] Obtenha seu IP público com Invoke-RestMethod -Uri https://api.ipify.org. Adicione-o como exceção no firewall usando Add-AzStorageAccountNetworkRule -IPAddressOrRange <seu-ip>.
[Portal] Confirme em: Storage accounts → ncargatest001 → Networking. O campo Public network access deve exibir Enabled from selected virtual networks and IP addresses e seu IP deve aparecer na lista de exceções.
Critérios de Validação:
# Deve retornar Deny:
(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName "ncarga-rg-storage" -AccountName "ncargatest001").DefaultAction
# Deve retornar seu IP com Action = Allow:
(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName "ncarga-rg-storage" -AccountName "ncargatest001").IpRules
Etapa 17 — Criar e usar tokens SAS
Contexto: O sistema de TMS precisa fazer upload de comprovantes de entrega para o storage sem usar as chaves de acesso da conta. O time de segurança aprovou o uso de SAS tokens com escopo restrito e validade curta para essa integração.
Tarefas:
[PowerShell] Crie um container chamado comprovantes no storage account ncargatest001 com acesso privado usando New-AzStorageContainer.
[PowerShell] Gere um SAS token de nível de container para comprovantes com os parâmetros:
| Parâmetro | Valor |
|---|---|
| Permissões | Read, Write, List |
| Expiração | 2 horas a partir do momento atual |
| Protocolo permitido | HTTPS apenas |
Use New-AzStorageContainerSASToken. Capture a URL completa com o token.
[PowerShell] Teste o SAS token fazendo upload de um arquivo de texto local para o container comprovantes usando Set-AzStorageBlobContent com o contexto criado a partir do SAS token, sem usar as chaves de conta.
Critérios de Validação:
# Deve retornar o arquivo de teste com tamanho > 0:
Get-AzStorageBlob -Container "comprovantes" -Context <contexto-da-conta> |
Select-Object Name, Length
Etapa 18 — Configurar Stored Access Policies
Contexto: O time de desenvolvimento identificou que revogar SAS tokens individuais é inviável em caso de comprometimento. A solução é usar Stored Access Policies, que permitem revogar um conjunto inteiro de tokens sem recriá-los individualmente.
Tarefas:
[PowerShell] Crie uma Stored Access Policy chamada ncarga-sap-comprovantes no container comprovantes com permissões Read, Write, List e validade de 30 dias usando New-AzStorageContainerStoredAccessPolicy.
[PowerShell] Gere um novo SAS token vinculado à policy ncarga-sap-comprovantes, omitindo os parâmetros de permissão e expiração diretos — eles serão herdados da policy.
[PowerShell] Revogue a policy usando Remove-AzStorageContainerStoredAccessPolicy e confirme que o SAS token vinculado falha ao tentar listar os blobs do container.
Critérios de Validação:
# Antes da remoção — deve retornar Policy = ncarga-sap-comprovantes:
Get-AzStorageContainerStoredAccessPolicy -Container "comprovantes" -Context <contexto> |
Select-Object Policy, Permissions, ExpiryTime
# Após remoção — tentativa de listar blobs com o SAS vinculado deve retornar:
# Erro 403 AuthorizationFailure ou similar
Etapa 19 — Gerenciar chaves de acesso do storage
Contexto: A política de segurança da NovaCarga exige rotação de chaves de acesso do storage a cada 90 dias. Esta etapa documenta e executa o processo de rotação sem interrupção do serviço.
Tarefas:
[PowerShell] Obtenha as duas chaves de acesso do storage account ncargatest001 usando Get-AzStorageAccountKey. Registre o valor atual da key1 como referência para validação pós-rotação.
[PowerShell] Regenere a key1 usando New-AzStorageAccountKey -KeyName key1. Confirme que o novo valor difere do registrado anteriormente.
[Portal] Confirme a rotação em: Storage accounts → ncargatest001 → Security + networking → Access keys. Verifique que a key2 permanece inalterada.
Critérios de Validação:
# Deve retornar 2 linhas com key1 e key2:
$keys = Get-AzStorageAccountKey -ResourceGroupName "ncarga-rg-storage" -AccountName "ncargatest001"
$keys | Select-Object KeyName, Value
# key1 deve ter valor diferente do registrado antes da rotação
Etapa 20 — Configurar acesso baseado em identidade para Azure Files
Contexto: O departamento de RH precisa de um compartilhamento de arquivos para documentos de admissão e demissão. Por requisito de auditoria, o acesso deve ser controlado pela identidade do Microsoft Entra ID, sem uso de chaves de storage.
Tarefas:
[PowerShell] Crie um novo storage account chamado ncargatfiles001 na região brazilsouth, resource group ncarga-rg-storage, SKU Standard_LRS, kind StorageV2 usando New-AzStorageAccount.
[Portal] Habilite a autenticação baseada em identidade navegando em: Storage accounts → ncargatfiles001 → File shares → Active Directory. Selecione Microsoft Entra Kerberos como método de autenticação.
[PowerShell] Atribua a função Storage File Data SMB Share Contributor ao grupo ncarga-ti no escopo do storage account ncargatfiles001 usando New-AzRoleAssignment.
Critérios de Validação:
# Deve retornar ncarga-ti com Storage File Data SMB Share Contributor:
Get-AzRoleAssignment -Scope (Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatfiles001").Id |
Where-Object { $_.RoleDefinitionName -like "*SMB*" } |
Select-Object DisplayName, RoleDefinitionName
Etapa 21 — Criar e configurar storage accounts
Contexto: O Projeto Âncora exige um storage account principal para logs de rastreamento do TMS, configurado com os parâmetros de segurança e desempenho definidos pelo time de arquitetura.
Tarefas:
[PowerShell] Crie o storage account ncargatms001 no resource group ncarga-rg-storage, região eastus, com os parâmetros:
| Parâmetro | Valor |
|---|---|
| SKU | Standard_GRS |
| Kind | StorageV2 |
| AccessTier | Hot |
| MinimumTlsVersion | TLS1_2 |
| AllowBlobPublicAccess | $false |
| EnableHttpsTrafficOnly | $true |
[PowerShell] Desabilite o acesso com chave de conta usando Set-AzStorageAccount -AllowSharedKeyAccess $false, forçando o uso de identidade Entra ID para acesso.
[Portal] Confirme todos os parâmetros em: Storage accounts → ncargatms001 → Configuration. Verifique que Secure transfer required está Enabled e Allow Blob public access está Disabled.
Critérios de Validação:
# Deve retornar todos os campos correspondendo aos parâmetros definidos:
$sa = Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatms001"
$sa | Select-Object StorageAccountName, Sku, Kind, AccessTier, MinimumTlsVersion, AllowBlobPublicAccess, EnableHttpsTrafficOnly
Etapa 22 — Configurar redundância do Azure Storage
Contexto: O time de arquitetura revisou os requisitos de RPO e RTO para os dados do TMS. Os logs de rastreamento são críticos para auditorias regulatórias, e a leitura na região secundária é necessária para relatórios de contingência.
Tarefas:
[PowerShell] Verifique a redundância atual do storage account ncargatms001 com Get-AzStorageAccount. Confirme que o SKU é Standard_GRS.
[PowerShell] Mude a redundância de Standard_GRS para Standard_RAGRS (Read-Access Geo-Redundant Storage) usando Set-AzStorageAccount -SkuName Standard_RAGRS. Isso habilita leitura na região secundária.
[Portal] Confirme o endpoint da região secundária em: Storage accounts → ncargatms001 → Geo-replication. Anote a URL do endpoint secundário.
Critérios de Validação:
# Deve retornar Standard_RAGRS:
(Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatms001").Sku.Name
# Deve retornar URLs de endpoint secundário preenchidas:
(Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatms001").SecondaryEndpoints
Etapa 23 — Configurar replicação de objetos
Contexto: O time jurídico exige que imagens de documentos fiscais armazenadas no container comprovantes do storage ncargatest001 sejam automaticamente replicadas para ncargatms001 em outra região, para fins de conformidade e recuperação de desastre.
Tarefas:
[PowerShell] Habilite o versionamento de blobs nos storage accounts ncargatest001 e ncargatms001 — pré-requisito obrigatório para object replication.
[PowerShell] Habilite o Change Feed no storage account ncargatest001 (source) usando Update-AzStorageAccount -EnableChangeFeed $true.
[PowerShell] Crie uma regra de replicação de objetos do container comprovantes (source: ncargatest001) para o container comprovantes-replica (destination: ncargatms001) usando Set-AzStorageObjectReplicationPolicy. O filtro deve replicar apenas blobs com prefixo fiscal/.
Critérios de Validação:
# Deve retornar a policy com SourceAccount = ncargatest001:
Get-AzStorageObjectReplicationPolicy -ResourceGroupName "ncarga-rg-storage" -StorageAccountName "ncargatms001" |
Select-Object PolicyId, SourceAccount, DestinationAccount
Etapa 24 — Configurar criptografia do storage account
Contexto: A política de segurança exige que a criptografia dos dados em repouso no storage ncargatms001 seja gerenciada por chaves do cliente (Customer-Managed Keys) armazenadas no Azure Key Vault, em vez das chaves gerenciadas pela Microsoft.
Tarefas:
[PowerShell] Crie o Azure Key Vault ncarga-kv-001 no resource group ncarga-rg-storage, região eastus, com EnableSoftDelete $true e EnablePurgeProtection $true usando New-AzKeyVault.
[PowerShell] Crie uma chave RSA 2048 chamada ncarga-key-storage no Key Vault usando Add-AzKeyVaultKey -Destination Software -KeyType RSA -Size 2048.
[PowerShell] Configure o storage account ncargatms001 para usar Customer-Managed Key com a chave ncarga-key-storage do Key Vault ncarga-kv-001. Habilite o managed identity no storage account e conceda a permissão Key Vault Crypto Service Encryption User ao managed identity antes de aplicar a CMK.
Critérios de Validação:
# Deve retornar KeyName = ncarga-key-storage:
(Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatms001").Encryption.KeyVaultProperties
# Deve retornar Microsoft.Keyvault:
(Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargatms001").Encryption.KeySource
Etapa 25 — Gerenciar dados com Azure Storage Explorer e AzCopy
Contexto: O time de operações precisa transferir um lote de documentos fiscais legados para o container comprovantes do storage ncargatest001. A transferência deve ser auditável e eficiente, usando AzCopy com autenticação via Microsoft Entra ID.
AzCopy v10+ instalado localmente. Verifique com: azcopy --version
Tarefas:
[PowerShell / CLI] Faça login no AzCopy com Microsoft Entra ID usando azcopy login --tenant-id <tenant-id>.
[PowerShell / CLI] Crie a pasta local ~/ncarga/fiscais/ com pelo menos 3 arquivos de texto simulando documentos fiscais. Faça upload da pasta inteira para o container comprovantes no caminho fiscal/2024/ usando azcopy copy com a flag --recursive.
[Portal] Confirme os arquivos em: Storage accounts → ncargatest001 → Storage browser → Blob containers → comprovantes → fiscal/2024/.
Critérios de Validação:
# Deve listar os arquivos uploadados com "Number of File Transfers: 3" ao final:
azcopy list "https://ncargatest001.blob.core.windows.net/comprovantes/fiscal/2024/"
Etapa 26 — Criar e configurar um compartilhamento no Azure Files
Contexto: O departamento de RH precisa de um compartilhamento de arquivos SMB acessível pelos colaboradores da sede. O compartilhamento será montado em servidores Windows que serão criados na Etapa 37.
Tarefas:
[PowerShell] Crie o compartilhamento ncarga-rh-share no storage account ncargatfiles001 com cota de 100 GiB e tier TransactionOptimized usando New-AzRmStorageShare.
[PowerShell] Crie os diretórios Admissoes, Demissoes e Ferias dentro do compartilhamento usando New-AzStorageDirectory para cada um.
[Portal] Confirme o compartilhamento, a cota de 100 GiB e os três subdiretórios em: Storage accounts → ncargatfiles001 → File shares → ncarga-rh-share. Copie o script de montagem PowerShell disponível em Connect para uso futuro.
Critérios de Validação:
# Deve retornar QuotaGiB = 100:
Get-AzRmStorageShare -ResourceGroupName "ncarga-rg-storage" -StorageAccountName "ncargatfiles001" -Name "ncarga-rh-share" |
Select-Object Name, QuotaGiB, AccessTier
# Deve retornar 3 itens: Admissoes, Demissoes, Ferias:
Get-AzStorageFile -ShareName "ncarga-rh-share" -Context <contexto> |
Select-Object Name
Etapa 27 — Criar e configurar um container no Azure Blob Storage
Contexto: O sistema de rastreamento gera imagens de GPS e telemetria em grande volume. Dois containers Blob com configurações distintas são necessários para separar dados brutos de dados processados.
Tarefas:
[PowerShell] Crie dois containers no storage account ncargatms001 com acesso privado usando New-AzStorageContainer:
| Container | Descrição |
|---|---|
| telemetria-raw | Dados brutos de GPS e sensores |
| telemetria-processada | Dados processados e agregados |
[Portal] Confirme os dois containers em: Storage accounts → ncargatms001 → Containers. Ambos devem exibir acesso Private.
Critérios de Validação:
# Deve retornar 2 containers com PublicAccess = Off:
Get-AzStorageContainer -Context <contexto-ncargatms001> |
Where-Object { $_.Name -like "telemetria*" } |
Select-Object Name, PublicAccess
Etapa 28 — Configurar storage tiers
Contexto: Os dados de telemetria têm ciclo de vida bem definido: acessados frequentemente nos primeiros 30 dias e raramente após 90 dias. O time de FinOps aprovou a mudança de tier manual para alguns blobs e a implementação de política automática.
Tarefas:
[PowerShell] Faça upload de um blob de teste chamado gps-sample-001.json para o container telemetria-raw no storage ncargatms001 no tier Hot.
[PowerShell] Mude o tier do blob gps-sample-001.json para Cool usando Set-AzStorageBlobTier. Confirme com Get-AzStorageBlob.
[Portal] Crie a regra de lifecycle ncarga-lifecycle-telemetria em: Storage accounts → ncargatms001 → Lifecycle management. Configure: mover para Cool após 30 dias e para Archive após 90 dias para blobs do container telemetria-raw.
Critérios de Validação:
# Deve retornar Cool:
(Get-AzStorageBlob -Container "telemetria-raw" -Blob "gps-sample-001.json" -Context <contexto>).ICloudBlob.Properties.StandardBlobTier
# No portal: regra ncarga-lifecycle-telemetria ativa com ações tierToCool (30d) e tierToArchive (90d)
Etapa 29 — Configurar soft delete para blobs e containers
Contexto: O time jurídico identificou que dados de telemetria excluídos acidentalmente podem ser necessários em auditorias. A política de retenção define que blobs e containers excluídos devem ser recuperáveis por 30 dias.
Tarefas:
[PowerShell] Habilite o soft delete para blobs no storage account ncargatms001 com retenção de 30 dias usando Enable-AzStorageBlobDeleteRetentionPolicy -RetentionDays 30.
[PowerShell] Habilite o soft delete para containers com retenção de 30 dias usando Enable-AzStorageContainerDeleteRetentionPolicy -RetentionDays 30.
[PowerShell] Teste o soft delete: exclua o blob gps-sample-001.json do container telemetria-raw e liste os blobs com Get-AzStorageBlob -IncludeDeleted para confirmar que o blob aparece com estado Deleted.
Critérios de Validação:
# Deve retornar Enabled = True, Days = 30:
(Get-AzStorageServiceProperty -ServiceType Blob -Context <contexto>).DeleteRetentionPolicy
# Deve retornar gps-sample-001.json com IsDeleted = True:
Get-AzStorageBlob -Container "telemetria-raw" -Context <contexto> -IncludeDeleted |
Where-Object { $_.IsDeleted -eq $true } |
Select-Object Name, IsDeleted
Etapa 30 — Configurar snapshots e soft delete para Azure Files
Contexto: O compartilhamento ncarga-rh-share contém documentos de admissão que precisam de proteção contra modificações e exclusões acidentais. Snapshots e soft delete garantem a recuperabilidade dos arquivos.
Tarefas:
[PowerShell] Habilite o soft delete para o compartilhamento ncarga-rh-share no storage account ncargatfiles001 com retenção de 14 dias usando Update-AzStorageFileServiceProperty.
[PowerShell] Crie um snapshot manual do compartilhamento usando $share.Snapshot() via contexto de storage. Capture o SnapshotTime gerado.
[Portal] Confirme o snapshot em: Storage accounts → ncargatfiles001 → File shares → ncarga-rh-share → Snapshots. Verifique também que Soft delete está habilitado nas propriedades do serviço File.
Critérios de Validação:
# Deve retornar Enabled = True, Days = 14:
(Get-AzStorageFileServiceProperty -ResourceGroupName "ncarga-rg-storage" -StorageAccountName "ncargatfiles001").ShareDeleteRetentionPolicy
# Deve retornar entrada com SnapshotTime preenchido:
Get-AzRmStorageShare -ResourceGroupName "ncarga-rg-storage" -StorageAccountName "ncargatfiles001" -Name "ncarga-rh-share" -GetShareUsage |
Select-Object Name, SnapshotTime
Etapa 31 — Configurar gerenciamento de ciclo de vida de blobs
Contexto: A política de ciclo de vida criada na Etapa 28 precisa ser expandida para cobrir o container telemetria-processada e adicionar uma ação de exclusão automática de blobs com mais de 365 dias.
Tarefas:
[PowerShell] Obtenha a política de lifecycle existente do storage account ncargatms001 usando Get-AzStorageAccountManagementPolicy.
[PowerShell] Adicione uma nova regra à política cobrindo o container telemetria-processada com as ações:
- Mover para
Coolapós 60 dias - Mover para
Archiveapós 180 dias - Excluir blobs após 365 dias
Use Set-AzStorageAccountManagementPolicy com o objeto de regra adicionado ao array existente.
[Portal] Confirme as duas regras em: Storage accounts → ncargatms001 → Lifecycle management. Ambas devem estar ativas.
Critérios de Validação:
# Deve retornar 2 regras com Enabled = True:
(Get-AzStorageAccountManagementPolicy -ResourceGroupName "ncarga-rg-storage" -StorageAccountName "ncargatms001").Rules |
Select-Object Name, Enabled
Etapa 32 — Configurar versionamento de blobs
Contexto: Os documentos fiscais no container comprovantes podem ser atualizados pelos sistemas de ERP e TMS. O time jurídico exige que todas as versões anteriores sejam mantidas para fins de auditoria.
Tarefas:
[PowerShell] Confirme que o versionamento de blobs está habilitado no storage account ncargatest001 (habilitado parcialmente na Etapa 23). Use Enable-AzStorageBlobVersioning se necessário.
[PowerShell] Faça upload de um blob chamado nf-001.json com conteúdo {"status":"emitida"} para o container comprovantes. Em seguida, atualize o mesmo blob com {"status":"cancelada"} — isso criará uma nova versão.
[PowerShell] Liste as versões do blob usando Get-AzStorageBlob -Container comprovantes -Blob nf-001.json -IncludeVersion. Confirme ao menos duas versões com VersionId distintos.
Critérios de Validação:
# Deve retornar ao menos 2 linhas, uma com IsLatestVersion = True:
Get-AzStorageBlob -Container "comprovantes" -Blob "nf-001.json" -Context <contexto> -IncludeVersion |
Select-Object Name, VersionId, IsLatestVersion
Domínio 3 — Infraestrutura como Código (IaC)
bicep --version — Instale o Bicep CLI antes de iniciar esta seção.
Etapa 33 — Interpretar templates ARM e arquivos Bicep
Contexto: O time de arquitetura da NovaCarga padronizou o uso de Bicep para todas as implantações futuras. Antes de criar novos recursos por IaC, o engenheiro precisa analisar um template Bicep existente e identificar os parâmetros, recursos e dependências declaradas.
Tarefas:
[IaC] Analise o arquivo Bicep abaixo sem executá-lo. Identifique e responda por escrito: quais recursos serão criados, qual é a dependência entre eles, quais parâmetros são obrigatórios e qual seria o valor padrão de location se não fosse fornecido.
// Template para revisão — NovaCarga Projeto Âncora
param location string = resourceGroup().location
param storageAccountName string
param keyVaultName string
@secure()
param adminPassword string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
}
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: keyVaultName
location: location
properties: {
sku: { family: 'A', name: 'standard' }
tenantId: subscription().tenantId
accessPolicies: []
enableSoftDelete: true
}
dependsOn: [storageAccount]
}
[PowerShell] Exporte o storage account ncargatest001 como template ARM usando Export-AzResourceGroup -ResourceGroupName ncarga-rg-storage -Resource <id-do-storage>. Salve o JSON exportado localmente.
[IaC] Converta o template ARM exportado para Bicep usando bicep decompile <arquivo>.json. Confirme que o arquivo .bicep foi gerado sem erros.
Critérios de Validação:
# Deve listar o arquivo .bicep gerado:
ls *.bicep
# Deve compilar sem erros:
bicep build <arquivo-decompilado>.bicep
Etapa 34 — Modificar um template ARM existente
Contexto: O time de operações identificou que o template ARM exportado na Etapa 33 não inclui a configuração de HTTPS obrigatório. O engenheiro precisa modificar o template antes de reutilizá-lo em implantações automatizadas.
Tarefas:
[IaC] No arquivo ARM JSON exportado na Etapa 33, localize o recurso do tipo Microsoft.Storage/storageAccounts dentro do array resources. Adicione a propriedade supportsHttpsTrafficOnly: true dentro de properties sem remover nenhuma propriedade existente.
[IaC] Adicione um parâmetro environment do tipo string com allowedValues: ['dev', 'staging', 'prod'] na seção parameters do template.
[PowerShell] Valide o template modificado:
Test-AzResourceGroupDeployment -ResourceGroupName "ncarga-rg-storage" `
-TemplateFile <caminho-do-json-modificado> `
-environment "prod" `
-storageAccountName "ncargatvalid001"
Critérios de Validação:
# Deve retornar saída sem erros de validação:
Test-AzResourceGroupDeployment -ResourceGroupName "ncarga-rg-storage" `
-TemplateFile <arquivo-modificado>.json `
-environment "prod" `
-storageAccountName "ncargatvalid001"
Etapa 35 — Modificar um arquivo Bicep existente
Contexto: O arquivo Bicep gerado na Etapa 33 precisa ser expandido para incluir uma referência ao Key Vault existente e adicionar um output com a URI do storage account, permitindo que outros módulos Bicep referenciem os recursos criados.
Tarefas:
[IaC] Adicione um bloco output ao arquivo .bicep que exponha o blobEndpoint do storage account com o nome storageEndpoint do tipo string.
[IaC] Adicione uma referência ao Key Vault existente ncarga-kv-001 usando um recurso com escopo existing do tipo Microsoft.KeyVault/vaults@2023-07-01.
[IaC] Compile o arquivo Bicep modificado com bicep build e confirme ausência de erros. Não faça deploy nesta etapa.
Critérios de Validação:
# Deve gerar o arquivo .json correspondente sem erros:
bicep build <arquivo-modificado>.bicep
# Deve encontrar a chave storageEndpoint:
cat <arquivo>.json | grep -i "storageEndpoint"
Etapa 36 — Implantar recursos com template Bicep
Contexto: O time de automação aprovou o primeiro deployment de infraestrutura via IaC no Projeto Âncora. O Bicep desenvolvido nas etapas anteriores será usado para criar um storage account de auditoria sem interação manual.
Tarefas:
[IaC] Crie o arquivo ncarga-audit-storage.bicep preenchendo os campos indicados:
// Preencha os campos marcados com <PREENCHER>
param location string = <PREENCHER> // brazilsouth
param storageAccountName string = <PREENCHER> // ncargataudit001
param tags object = <PREENCHER> // as 4 tags padrão do projeto
resource auditStorage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: <PREENCHER>
location: <PREENCHER>
tags: <PREENCHER>
sku: { name: <PREENCHER> } // Standard_LRS
kind: <PREENCHER> // StorageV2
properties: {
supportsHttpsTrafficOnly: <PREENCHER> // true
minimumTlsVersion: <PREENCHER> // TLS1_2
allowBlobPublicAccess: <PREENCHER> // false
}
}
output storageId string = <PREENCHER>
output storageName string = <PREENCHER>
[PowerShell] Compile o Bicep e faça o deployment usando New-AzResourceGroupDeployment com -TemplateFile. Nomeie o deployment como ncarga-deploy-audit-storage.
[PowerShell] Capture os valores de output do deployment:
(Get-AzResourceGroupDeployment -ResourceGroupName "ncarga-rg-storage" -Name "ncarga-deploy-audit-storage").Outputs
Critérios de Validação:
# Deve retornar ProvisioningState = Succeeded:
Get-AzResourceGroupDeployment -ResourceGroupName "ncarga-rg-storage" -Name "ncarga-deploy-audit-storage" |
Select-Object DeploymentName, ProvisioningState
# Deve retornar Location = brazilsouth:
Get-AzStorageAccount -ResourceGroupName "ncarga-rg-storage" -Name "ncargataudit001" |
Select-Object StorageAccountName, Location
Domínio 4 — Compute e Contêineres
Etapa 37 — Criar uma máquina virtual
Contexto: O sistema WMS legado da NovaCarga precisa ser hospedado em uma VM Windows no Azure. O servidor será criado sem IP público — o acesso administrativo será feito exclusivamente via Azure Bastion, configurado na Etapa 61.
O lock ReadOnly em ncarga-rg-network criado na Etapa 10 precisa ser removido temporariamente para criar recursos de rede nesta etapa. Recrie-o após concluir.
Tarefas:
[PowerShell] Crie a rede virtual ncarga-vnet-compute no resource group ncarga-rg-network com o espaço de endereços 10.10.0.0/16 e a subnet snet-compute com range 10.10.1.0/24 usando New-AzVirtualNetwork e Add-AzVirtualNetworkSubnetConfig.
[PowerShell] Crie a VM ncarga-vm-wms01 com os parâmetros:
| Parâmetro | Valor |
|---|---|
| Resource Group | ncarga-rg-compute |
| Região | eastus |
| Imagem | Win2022Datacenter |
| Tamanho | Standard_D2s_v3 |
| Subnet | snet-compute na ncarga-vnet-compute |
| IP Público | Nenhum |
| Autenticação | Senha (admin: ncargaadmin) |
Use New-AzVM. Capture o Id da VM ao final.
[PowerShell] Confirme que a NIC associada não tem IP público:
(Get-AzNetworkInterface -ResourceGroupName "ncarga-rg-compute" |
Where-Object { $_.VirtualMachine.Id -like "*ncarga-vm-wms01*" }).IpConfigurations.PublicIpAddress
# Resultado esperado: $null
Critérios de Validação:
# Deve retornar ProvisioningState = Succeeded:
Get-AzVM -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-vm-wms01" |
Select-Object Name, Location, @{N='ProvisioningState';E={$_.ProvisioningState}}
Etapa 38 — Configurar encryption at host para VMs
Contexto: O time de segurança exige que todos os dados temporários dos discos de cache e do disco de SO das VMs sejam criptografados no próprio host de compute do Azure. Esta configuração deve ser habilitada na VM ncarga-vm-wms01.
Tarefas:
[PowerShell] Verifique se o recurso EncryptionAtHost está habilitado na subscription usando Get-AzProviderFeature -FeatureName EncryptionAtHost -ProviderNamespace Microsoft.Compute. Se o estado for NotRegistered, registre-o com Register-AzProviderFeature e aguarde.
[PowerShell] Pare a VM ncarga-vm-wms01 com Stop-AzVM -Force. Aguarde o status Deallocated.
[PowerShell] Habilite Encryption at Host na VM usando Update-AzVM com SecurityProfile.EncryptionAtHost = $true. Reinicie a VM após a configuração.
Critérios de Validação:
# Deve retornar True:
(Get-AzVM -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-vm-wms01").SecurityProfile.EncryptionAtHost
# Deve retornar PowerState/running:
Get-AzVM -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-vm-wms01" -Status |
Select-Object -ExpandProperty Statuses | Where-Object { $_.Code -like "PowerState*" }
Etapa 39 — Mover uma VM para outro resource group
Contexto: Após uma revisão da estrutura de resource groups, o time de arquitetura decidiu que todas as VMs de produção devem estar em um resource group dedicado chamado ncarga-rg-vms. A VM ncarga-vm-wms01 precisa ser movida sem recriação.
Tarefas:
[PowerShell] Crie o resource group ncarga-rg-vms na região eastus com as quatro tags padrão do projeto.
[PowerShell] Identifique todos os recursos dependentes da VM ncarga-vm-wms01 (discos, NICs, etc.) usando Get-AzResource -ResourceGroupName ncarga-rg-compute | Where-Object { $_.Name -like "*wms01*" }. Capture os IDs de todos eles.
[PowerShell] Mova a VM e todos os seus recursos dependentes para ncarga-rg-vms usando Move-AzResource -ResourceId @(<lista-de-ids>) -DestinationResourceGroupName ncarga-rg-vms.
Critérios de Validação:
# Deve retornar ResourceGroupName = ncarga-rg-vms:
Get-AzVM -ResourceGroupName "ncarga-rg-vms" -Name "ncarga-vm-wms01" |
Select-Object Name, ResourceGroupName
# Deve retornar saída vazia:
Get-AzVM -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-vm-wms01" -ErrorAction SilentlyContinue
Etapa 40 — Gerenciar tamanhos de VM
Contexto: O sistema WMS entra em pico de carga no fechamento de mês. O time de operações solicitou o redimensionamento temporário da VM ncarga-vm-wms01 para um tamanho com 4+ vCPUs e 16+ GB de RAM.
Tarefas:
[PowerShell] Liste os tamanhos de VM disponíveis na região eastus com 4+ vCPUs e 8+ GB de RAM usando Get-AzVMSize -Location eastus. Identifique Standard_D4s_v3 como opção adequada.
[PowerShell] Pare a VM ncarga-vm-wms01 (deallocate). Altere o tamanho para Standard_D4s_v3 modificando a propriedade HardwareProfile.VmSize e aplicando com Update-AzVM.
[PowerShell] Inicie a VM e confirme o novo tamanho com Get-AzVM.
Critérios de Validação:
# Deve retornar Standard_D4s_v3:
(Get-AzVM -ResourceGroupName "ncarga-rg-vms" -Name "ncarga-vm-wms01").HardwareProfile.VmSize
Etapa 41 — Gerenciar discos de VM
Contexto: O banco de dados SQLite local do WMS está crescendo e o disco de dados atual está ficando pequeno. O time de TI precisa adicionar um disco de dados dedicado de 128 GB para os arquivos do banco de dados.
Tarefas:
[PowerShell] Crie o managed disk ncarga-disk-wms-data01 no resource group ncarga-rg-vms, região eastus, com 128 GiB e SKU Premium_LRS usando New-AzDisk.
[PowerShell] Anexe o disco à VM ncarga-vm-wms01 como disco de dados no LUN 0 usando Add-AzVMDataDisk e Update-AzVM.
[PowerShell] Confirme o anexo com Get-AzVM verificando o campo StorageProfile.DataDisks.
Critérios de Validação:
# Deve retornar Name = ncarga-disk-wms-data01, Lun = 0, DiskSizeGB = 128:
(Get-AzVM -ResourceGroupName "ncarga-rg-vms" -Name "ncarga-vm-wms01").StorageProfile.DataDisks |
Select-Object Name, Lun, DiskSizeGB, ManagedDisk
Etapa 42 — Implantar VMs em Availability Zones e Availability Sets
Contexto: O sistema TMS requer alta disponibilidade. O time de arquitetura definiu que as VMs do TMS devem ser implantadas em Availability Zones diferentes para garantir SLA de 99,99%.
Tarefas:
[PowerShell] Crie a VM ncarga-vm-tms01 no resource group ncarga-rg-vms com imagem UbuntuLTS, tamanho Standard_D2s_v3, zona 1, subnet snet-compute, sem IP público, autenticação SSH.
[PowerShell] Crie a VM ncarga-vm-tms02 com os mesmos parâmetros, mas na zona 2. Ambas as VMs devem estar na subnet snet-compute.
[PowerShell] Confirme que cada VM está em uma zona distinta:
Get-AzVM -ResourceGroupName "ncarga-rg-vms" |
Where-Object { $_.Name -like "*tms*" } |
Select-Object Name, Zones
# Esperado: ncarga-vm-tms01 com Zones = {1}, ncarga-vm-tms02 com Zones = {2}
Critérios de Validação:
# Deve retornar Zones = {1} para tms01 e Zones = {2} para tms02:
Get-AzVM -ResourceGroupName "ncarga-rg-vms" |
Where-Object { $_.Name -like "*tms*" } |
Select-Object Name, Zones
Etapa 43 — Implantar e configurar Azure Virtual Machine Scale Sets
Contexto: O serviço de rastreamento em tempo real recebe picos de tráfego no período comercial. O time de arquitetura aprovou o uso de Virtual Machine Scale Sets para escalar automaticamente a camada de processamento de eventos de GPS.
Tarefas:
[PowerShell] Crie o VMSS ncarga-vmss-tracker no resource group ncarga-rg-vms, região eastus, com imagem UbuntuLTS, tamanho Standard_D2s_v3, capacidade inicial de 2 instâncias, subnet snet-compute, upgrade policy Automatic e zonas 1,2,3 usando New-AzVmss.
[PowerShell] Configure a política de autoscaling usando New-AzAutoscaleSetting:
- Scale-out: CPU média > 70% por 5 min → adicionar 1 instância
- Scale-in: CPU média < 30% por 10 min → remover 1 instância
- Mínimo: 2 instâncias, Máximo: 10 instâncias
[Portal] Confirme as 2 instâncias ativas e a política de autoscale em: Virtual Machine Scale Sets → ncarga-vmss-tracker → Instances e Scaling.
Critérios de Validação:
# Deve retornar Capacity = 2, Tier = Standard_D2s_v3:
Get-AzVmss -ResourceGroupName "ncarga-rg-vms" -VMScaleSetName "ncarga-vmss-tracker" |
Select-Object Name, @{N='Capacity';E={$_.Sku.Capacity}}, @{N='Tier';E={$_.Sku.Name}}
# Deve retornar Enabled = True:
Get-AzAutoscaleSetting -ResourceGroupName "ncarga-rg-vms" |
Where-Object { $_.Name -like "*tracker*" } |
Select-Object Name, Enabled
Etapa 44 — Criar e gerenciar um Azure Container Registry
Contexto: A nova plataforma de rastreamento é desenvolvida como microserviços em contêineres. O time de DevOps precisa de um registry privado no Azure para armazenar e versionar as imagens Docker antes de implantá-las nos clusters.
Docker Desktop instalado e em execução. Verifique com: docker --version
Tarefas:
[PowerShell] Crie o Azure Container Registry ncargatregistry001 no resource group ncarga-rg-compute, região eastus, SKU Standard usando New-AzContainerRegistry.
[PowerShell] Habilite o usuário administrador com Update-AzContainerRegistry -EnableAdminUser $true. Obtenha as credenciais usando Get-AzContainerRegistryCredential.
[PowerShell / CLI] Faça login no registry via Docker CLI com docker login ncargatregistry001.azurecr.io. Crie uma imagem de teste local (FROM alpine:latest), rotule-a e faça push para ncargatregistry001.azurecr.io/rastreamento:v1.0.
Critérios de Validação:
# Deve retornar "rastreamento" listado como repositório:
Get-AzContainerRegistryRepository -RegistryName "ncargatregistry001" |
Select-Object -ExpandProperty Name
# Deve retornar Sku = Standard, AdminUserEnabled = True:
Get-AzContainerRegistry -ResourceGroupName "ncarga-rg-compute" -Name "ncargatregistry001" |
Select-Object Name, Sku, AdminUserEnabled
Etapa 45 — Provisionar um container com Azure Container Instances
Contexto: Para validar a imagem rastreamento:v1.0 publicada na Etapa 44, o time de QA precisa de um ambiente efêmero de teste. O Azure Container Instances permitirá executar o contêiner sem gerenciar infraestrutura de orquestração.
Tarefas:
[PowerShell] Crie o Container Instance ncarga-aci-rastreamento no resource group ncarga-rg-compute, região eastus, com:
| Parâmetro | Valor |
|---|---|
| Imagem | ncargatregistry001.azurecr.io/rastreamento:v1.0 |
| CPU | 1 |
| Memory | 1.5 GiB |
| OS | Linux |
| Restart policy | Never |
Use New-AzContainerGroup com as credenciais do registry obtidas na Etapa 44.
[PowerShell] Aguarde o container atingir o estado Terminated ou Running com Get-AzContainerGroup. Capture os logs com Get-AzContainerInstanceLog.
[Portal] Confirme a saída de log em: Container instances → ncarga-aci-rastreamento → Containers → Logs.
Critérios de Validação:
# Deve retornar a imagem correta:
Get-AzContainerGroup -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-aci-rastreamento" |
Select-Object Name, Location, @{N='State';E={$_.InstanceViewState}}, @{N='Image';E={$_.Containers[0].Image}}
Etapa 46 — Provisionar um container com Azure Container Apps
Contexto: Após validar a imagem com ACI na Etapa 45, o time de DevOps decidiu hospedar o serviço de rastreamento em produção no Azure Container Apps, que oferece escalonamento automático baseado em eventos HTTP.
Tarefas:
[CLI] Crie o Container Apps Environment ncarga-cae-prod no resource group ncarga-rg-compute, região eastus usando az containerapp env create.
[CLI] Crie o Container App ncarga-ca-rastreamento no environment ncarga-cae-prod com:
| Parâmetro | Valor |
|---|---|
| Imagem | ncargatregistry001.azurecr.io/rastreamento:v1.0 |
| CPU | 0.5 |
| Memory | 1Gi |
| Min replicas | 1 |
| Max replicas | 5 |
| Ingress | External, porta 80 |
[CLI] Obtenha a URL do Container App com az containerapp show e confirme que o endpoint responde.
Critérios de Validação:
# Deve retornar URL no formato *.azurecontainerapps.io:
az containerapp show --name ncarga-ca-rastreamento --resource-group ncarga-rg-compute \
--query "properties.configuration.ingress.fqdn" -o tsv
# Deve retornar Running:
az containerapp show --name ncarga-ca-rastreamento --resource-group ncarga-rg-compute \
--query "properties.runningStatus" -o tsv
Etapa 47 — Gerenciar tamanho e escalonamento de contêineres
Contexto: O Container App ncarga-ca-rastreamento precisa de uma política de escalonamento baseada em requisições HTTP, alinhada com o padrão de uso identificado: picos de tráfego no horário comercial.
Tarefas:
[CLI] Atualize o Container App para adicionar uma regra de escalonamento baseada em HTTP: quando o número de requisições concorrentes por réplica exceder 50, novas réplicas devem ser criadas. Use az containerapp update --scale-rule-name http-scale --scale-rule-type http.
[CLI] Atualize os limites de recursos do Container App para --cpu 1.0 --memory 2Gi usando az containerapp update.
[Portal] Confirme as regras de escalonamento e os limites de recursos em: Container Apps → ncarga-ca-rastreamento → Scale and replicas.
Critérios de Validação:
# Deve retornar minReplicas = 1, maxReplicas = 5 e regra http-scale presente:
az containerapp show --name ncarga-ca-rastreamento --resource-group ncarga-rg-compute \
--query "properties.template.scale" -o json
# Deve retornar cpu = "1.0", memory = "2Gi":
az containerapp show --name ncarga-ca-rastreamento --resource-group ncarga-rg-compute \
--query "properties.template.containers[0].resources" -o json
Domínio 5 — App Service
Etapa 48 — Criar e configurar um App Service Plan
Contexto: O portal de clientes da NovaCarga, uma aplicação web para consulta de status de entrega, será hospedado no Azure App Service. O App Service Plan determinará os recursos computacionais disponíveis para a aplicação.
App Service P1v3 gera ~USD 0,16/h. Reduza para F1 entre sessões se necessário.
Tarefas:
[PowerShell] Crie o App Service Plan ncarga-asp-web no resource group ncarga-rg-compute, região brazilsouth, com SKU P1v3, OS Linux e 1 worker usando New-AzAppServicePlan.
[Portal] Visualize os tiers disponíveis em: App Service plans → ncarga-asp-web → Scale up (App Service plan). Não altere o tier neste momento.
[PowerShell] Confirme a criação com Get-AzAppServicePlan verificando os campos Sku.Name e Kind.
Critérios de Validação:
# Deve retornar Sku = P1v3, OS = linux, NumberOfWorkers = 1:
Get-AzAppServicePlan -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-asp-web" |
Select-Object Name, @{N='Sku';E={$_.Sku.Name}}, @{N='OS';E={$_.Kind}}, NumberOfWorkers
Etapa 49 — Configurar escalonamento para App Service Plan
Contexto: O portal de clientes tem tráfego concentrado no horário comercial. O time de FinOps aprovou escalonamento automático do App Service Plan baseado em métricas de CPU para otimizar custo fora do horário de pico.
Tarefas:
[Portal] Habilite o autoscale em: App Service plans → ncarga-asp-web → Scale out (App Service plan). Crie o perfil ncarga-asp-autoscale com mínimo de 1, máximo de 3 e padrão de 1 instância.
[Portal] Adicione duas regras ao perfil:
- Scale-out: CPU média > 70% por 5 min → aumentar 1 instância
- Scale-in: CPU média < 25% por 10 min → diminuir 1 instância
[PowerShell] Confirme a configuração com Get-AzAutoscaleSetting -ResourceGroupName ncarga-rg-compute verificando que o target resource é o App Service Plan ncarga-asp-web.
Critérios de Validação:
# Deve retornar Enabled = True com target ncarga-asp-web:
Get-AzAutoscaleSetting -ResourceGroupName "ncarga-rg-compute" |
Where-Object { $_.TargetResourceUri -like "*ncarga-asp-web*" } |
Select-Object Name, Enabled
Etapa 50 — Criar um App Service
Contexto: Com o App Service Plan provisionado, o time de desenvolvimento precisa criar o Web App que hospedará o portal de consulta de status de entrega.
Tarefas:
[PowerShell] Crie o Web App ncarga-webapp-portal no App Service Plan ncarga-asp-web, resource group ncarga-rg-compute, runtime NODE|18-lts (Linux) usando New-AzWebApp.
[PowerShell] Configure as application settings com Set-AzWebApp -AppSettings:
| Chave | Valor |
|---|---|
| ENVIRONMENT | production |
| STORAGE_ACCOUNT | ncargatms001 |
| PROJECT | Ancora |
[Portal] Copie a URL padrão em: App Services → ncarga-webapp-portal → Overview. Confirme que o site responde com a página padrão do Node.js.
Critérios de Validação:
# Deve retornar State = Running com DefaultHostName preenchido:
Get-AzWebApp -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal" |
Select-Object Name, State, DefaultHostName
# Deve retornar Value = production:
(Get-AzWebApp -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal").SiteConfig.AppSettings |
Where-Object { $_.Name -eq "ENVIRONMENT" } | Select-Object Name, Value
Etapa 51 — Configurar certificados e TLS para App Service
Contexto: O portal de clientes deve usar HTTPS obrigatório. O time de segurança exige que conexões HTTP sejam redirecionadas para HTTPS e que a versão mínima de TLS seja 1.2.
Tarefas:
[PowerShell] Habilite o redirecionamento HTTPS no Web App ncarga-webapp-portal usando Set-AzWebApp -HttpsOnly $true.
[PowerShell] Configure a versão mínima de TLS para 1.2 no Web App usando Set-AzWebApp com o parâmetro MinTlsVersion.
[Portal] Confirme em: App Services → ncarga-webapp-portal → TLS/SSL settings
- HTTPS Only: On
- Minimum Inbound TLS Version: 1.2
Critérios de Validação:
$webapp = Get-AzWebApp -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal"
# Deve retornar True:
$webapp.HttpsOnly
# Deve retornar 1.2:
$webapp.SiteConfig.MinTlsVersion
Etapa 52 — Configurar backup para App Service
Contexto: O portal de clientes deve ter backup diário automático para recuperação em caso de falha de implantação ou alteração indevida de configuração. O backup será armazenado no storage account ncargataudit001.
Tarefas:
[Portal] Configure o backup em: App Services → ncarga-webapp-portal → Backups
| Parâmetro | Valor |
|---|---|
| Storage account | ncargataudit001 |
| Container | appservice-backups (criar novo) |
| Frequência | Diária |
| Hora | 02:00 UTC |
| Retenção | 30 dias |
[Portal] Acione um backup manual clicando em Backup Now e aguarde a conclusão.
[PowerShell] Liste os backups com Get-AzWebAppBackupList e confirme que o backup manual aparece com status Succeeded.
Critérios de Validação:
# Deve retornar Succeeded = True com FinishedTimeUtc preenchido:
Get-AzWebAppBackupList -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal" |
Select-Object BackupName, StorageAccountUrl, Succeeded, FinishedTimeUtc |
Sort-Object FinishedTimeUtc -Descending |
Select-Object -First 1
Etapa 53 — Configurar deployment slots para App Service
Contexto: O time de desenvolvimento adotou o padrão Blue-Green deployment para o portal de clientes. Um slot de staging permitirá que novas versões sejam testadas em produção sem afetar os usuários.
Tarefas:
[PowerShell] Crie o deployment slot staging no Web App ncarga-webapp-portal usando New-AzWebAppSlot.
[Portal] Configure em: App Services → ncarga-webapp-portal → Deployment slots → staging
- Application setting
SLOT_NAME=stagingcomo setting do slot (não swappable) - Application setting
ENVIRONMENT=stagingcomo setting swappable
[PowerShell] Execute a troca entre os slots com Switch-AzWebAppSlot -SourceSlotName staging -DestinationSlotName production. Confirme que o slot de produção agora tem a setting ENVIRONMENT=staging.
Critérios de Validação:
# Deve retornar State = Running:
Get-AzWebAppSlot -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal" -Slot "staging" |
Select-Object Name, State
# Após o swap — deve retornar Value = staging:
(Get-AzWebApp -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-webapp-portal").SiteConfig.AppSettings |
Where-Object { $_.Name -eq "ENVIRONMENT" } | Select-Object Value
Domínio 6 — Redes
Etapa 54 — Criar e configurar redes virtuais e subnets
Contexto: A infraestrutura de rede do Projeto Âncora precisa ser expandida para suportar a segmentação por função de carga de trabalho. Uma segunda rede virtual será criada para os recursos de storage e serviços, com subnets dedicadas por tipo de recurso.
Tarefas:
[PowerShell] Crie a VNet ncarga-vnet-services no resource group ncarga-rg-network, região brazilsouth, com espaço de endereços 10.20.0.0/16 e as subnets:
| Subnet | Range |
|---|---|
| snet-storage | 10.20.1.0/24 |
| snet-web | 10.20.2.0/24 |
| AzureBastionSubnet | 10.20.0.0/27 (nome exato obrigatório) |
[PowerShell] Crie o NSG ncarga-nsg-web e associe-o à subnet snet-web. Adicione regras de entrada permitindo HTTP (80) e HTTPS (443) de qualquer origem, e bloqueando todo o restante com prioridade mais baixa.
[PowerShell] Confirme que o NSG está associado à subnet snet-web com Get-AzVirtualNetworkSubnetConfig.
Critérios de Validação:
# Deve retornar as 3 subnets com os ranges corretos:
(Get-AzVirtualNetwork -ResourceGroupName "ncarga-rg-network" -Name "ncarga-vnet-services").Subnets |
Select-Object Name, AddressPrefix
# Deve retornar o ID do ncarga-nsg-web:
(Get-AzVirtualNetworkSubnetConfig -Name "snet-web" -VirtualNetwork (Get-AzVirtualNetwork -Name "ncarga-vnet-services" -ResourceGroupName "ncarga-rg-network")).NetworkSecurityGroup.Id
Etapa 55 — Criar e configurar peering de redes virtuais
Contexto: As VMs do WMS e TMS na ncarga-vnet-compute precisam acessar os storage accounts protegidos por private endpoints na ncarga-vnet-services. O peering entre as duas redes virtuais é a solução de conectividade aprovada.
Tarefas:
[PowerShell] Crie o peering da ncarga-vnet-compute para ncarga-vnet-services usando Add-AzVirtualNetworkPeering com AllowForwardedTraffic habilitado.
[PowerShell] Crie o peering recíproco da ncarga-vnet-services para ncarga-vnet-compute com os mesmos parâmetros. O peering só é funcional quando ambos os lados estão configurados.
[PowerShell] Confirme que ambos os peerings estão com estado Connected usando Get-AzVirtualNetworkPeering.
Critérios de Validação:
# Ambos devem retornar PeeringState = Connected:
Get-AzVirtualNetworkPeering -ResourceGroupName "ncarga-rg-network" -VirtualNetworkName "ncarga-vnet-compute" |
Select-Object Name, PeeringState
Get-AzVirtualNetworkPeering -ResourceGroupName "ncarga-rg-network" -VirtualNetworkName "ncarga-vnet-services" |
Select-Object Name, PeeringState
Etapa 56 — Configurar IPs públicos
Contexto: O Load Balancer público que será criado na Etapa 65 para o portal de clientes precisa de um IP público estático com DNS personalizado. Este IP será anunciado para os clientes e não pode mudar após a implantação.
Tarefas:
[PowerShell] Crie o IP público ncarga-pip-lb no resource group ncarga-rg-network, região brazilsouth, com:
| Parâmetro | Valor |
|---|---|
| SKU | Standard |
| Allocation method | Static |
| DNS label | ncarga-portal |
| Version | IPv4 |
Use New-AzPublicIpAddress.
[PowerShell] Capture o valor do campo IpAddress com Get-AzPublicIpAddress. Esse valor será usado na Etapa 65.
[Portal] Confirme o DNS name label gerado em: Public IP addresses → ncarga-pip-lb → Configuration. O FQDN deve ser ncarga-portal.<região>.cloudapp.azure.com.
Critérios de Validação:
# Deve retornar IpAddress preenchido, PublicIpAllocationMethod = Static, DnsLabel = ncarga-portal:
$pip = Get-AzPublicIpAddress -ResourceGroupName "ncarga-rg-network" -Name "ncarga-pip-lb"
$pip | Select-Object Name, IpAddress, PublicIpAllocationMethod, @{N='DnsLabel';E={$_.DnsSettings.DomainNameLabel}}
Etapa 57 — Configurar rotas definidas pelo usuário (UDR)
Contexto: O time de segurança determinou que todo o tráfego de saída das VMs para a internet deve passar por um Network Virtual Appliance (NVA) de firewall. Uma UDR será configurada na subnet snet-compute para forçar esse roteamento.
Tarefas:
[PowerShell] Crie a Route Table ncarga-rt-compute no resource group ncarga-rg-network com a tag Project=Ancora usando New-AzRouteTable.
[PowerShell] Adicione a rota route-to-nva na Route Table com destino 0.0.0.0/0, next hop type VirtualAppliance e next hop IP 10.10.10.4 (IP fictício do NVA) usando Add-AzRouteConfig e Set-AzRouteTable.
[PowerShell] Associe a Route Table ncarga-rt-compute à subnet snet-compute da rede ncarga-vnet-compute usando Set-AzVirtualNetworkSubnetConfig com o parâmetro -RouteTable.
Critérios de Validação:
# Deve retornar route-to-nva com NextHopType = VirtualAppliance, NextHopIpAddress = 10.10.10.4:
(Get-AzRouteTable -ResourceGroupName "ncarga-rg-network" -Name "ncarga-rt-compute").Routes |
Select-Object Name, AddressPrefix, NextHopType, NextHopIpAddress
# Deve retornar o ID da Route Table ncarga-rt-compute:
(Get-AzVirtualNetworkSubnetConfig -Name "snet-compute" -VirtualNetwork (Get-AzVirtualNetwork -Name "ncarga-vnet-compute" -ResourceGroupName "ncarga-rg-network")).RouteTable.Id
Etapa 58 — Solucionar problemas de conectividade de rede
Contexto: Após a configuração do UDR na Etapa 57, o time de operações reportou que a VM ncarga-vm-wms01 não consegue mais alcançar o storage account ncargatms001. O engenheiro precisa diagnosticar a causa usando o Network Watcher.
Tarefas:
[PowerShell] Confirme que o Network Watcher está ativo na região eastus usando Get-AzNetworkWatcher. Se não estiver, habilite-o com New-AzNetworkWatcher.
[Portal] Teste o fluxo de tráfego da VM ncarga-vm-wms01 para o IP do storage account ncargatms001 na porta 443 em: Network Watcher → IP flow verify. Identifique se o tráfego é permitido ou bloqueado e qual regra causa o bloqueio.
[Portal] Execute um teste de conectividade em: Network Watcher → Connection troubleshoot. Teste da VM ncarga-vm-wms01 para o endpoint ncargatms001.blob.core.windows.net na porta 443. Documente o resultado e a causa raiz identificada.
Critérios de Validação:
Network Watcher → IP flow verify: saída mostrando Allow ou Deny com o nome da regra responsável.Network Watcher → Connection troubleshoot: status Reachable ou Unreachable com hop-by-hop detalhado.
Etapa 59 — Criar e configurar NSGs e Application Security Groups
Contexto: O time de segurança aprovou um modelo de microssegmentação usando Application Security Groups (ASGs) para agrupar as VMs por função e aplicar regras de NSG com base nesses grupos, sem depender de IPs específicos.
Tarefas:
[PowerShell] Crie dois Application Security Groups no resource group ncarga-rg-network usando New-AzApplicationSecurityGroup:
ncarga-asg-wmspara as VMs do sistema WMSncarga-asg-tmspara as VMs do sistema TMS
[PowerShell] Associe a NIC da VM ncarga-vm-wms01 ao ASG ncarga-asg-wms e as NICs de ncarga-vm-tms01 e ncarga-vm-tms02 ao ASG ncarga-asg-tms usando Get-AzNetworkInterface e Set-AzNetworkInterface.
[PowerShell] Crie o NSG ncarga-nsg-compute e adicione uma regra permitindo tráfego da porta 8080 do ASG ncarga-asg-tms para o ASG ncarga-asg-wms usando Add-AzNetworkSecurityRuleConfig.
Critérios de Validação:
# Deve retornar ncarga-asg-wms e ncarga-asg-tms:
Get-AzApplicationSecurityGroup -ResourceGroupName "ncarga-rg-network" |
Select-Object Name, Location
# Deve retornar regra com Access = Allow, porta 8080:
(Get-AzNetworkSecurityGroup -ResourceGroupName "ncarga-rg-network" -Name "ncarga-nsg-compute").SecurityRules |
Select-Object Name, SourceApplicationSecurityGroups, DestinationApplicationSecurityGroups, DestinationPortRange, Access
Etapa 60 — Avaliar regras de segurança efetivas em NSGs
Contexto: Antes de liberar as VMs do TMS para produção, o time de segurança exige uma revisão das regras de segurança efetivas aplicadas a cada NIC, incluindo regras herdadas de NSGs de subnet e de NIC.
Tarefas:
[Portal] Visualize as regras efetivas de ncarga-vm-tms01 em: Virtual machines → ncarga-vm-tms01 → Networking → Network settings → Effective security rules. Documente as regras de entrada e saída, incluindo a origem (NSG de subnet vs NSG de NIC).
[PowerShell] Obtenha as regras efetivas para a NIC da VM ncarga-vm-tms01 usando Get-AzEffectiveNetworkSecurityGroup. Filtre as regras que bloqueiam tráfego de entrada.
[PowerShell] Gere um relatório comparando as regras efetivas de ncarga-vm-wms01 e ncarga-vm-tms01 com colunas Name, Protocol, SourcePortRange, DestinationPortRange, Access, Priority e Direction. Exporte para ~/ncarga/nsg-effective-rules.csv.
Critérios de Validação:
# Deve retornar regras de bloqueio com prioridade e portas:
Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName <nic-tms01> -ResourceGroupName "ncarga-rg-vms" |
Select-Object -ExpandProperty EffectiveSecurityRules |
Where-Object { $_.Access -eq "Deny" -and $_.Direction -eq "Inbound" } |
Select-Object Name, Priority, DestinationPortRange
Etapa 61 — Implementar Azure Bastion
Contexto: As VMs do Projeto Âncora não possuem IP público. Para acesso administrativo seguro sem expor portas RDP ou SSH, o time de TI implantará o Azure Bastion na subnet AzureBastionSubnet já criada na Etapa 54.
Azure Bastion Standard gera ~USD 0,19/h. Delete o recurso após uso durante o laboratório.
Tarefas:
[PowerShell] Crie o IP público ncarga-pip-bastion no resource group ncarga-rg-network, região brazilsouth, SKU Standard, alocação Static usando New-AzPublicIpAddress.
[PowerShell] Crie o Azure Bastion ncarga-bastion associado à subnet AzureBastionSubnet da rede ncarga-vnet-services com o IP público ncarga-pip-bastion, SKU Standard, usando New-AzBastion.
[Portal] Confirme que a opção de conexão via Bastion está disponível em: Virtual machines → ncarga-vm-wms01 → Connect → Bastion. Não é necessário efetuar login.
Critérios de Validação:
# Deve retornar ProvisioningState = Succeeded, Sku = Standard:
Get-AzBastion -ResourceGroupName "ncarga-rg-network" -Name "ncarga-bastion" |
Select-Object Name, ProvisioningState, @{N='Sku';E={$_.Sku.Name}}
Etapa 62 — Configurar service endpoints para PaaS
Contexto: Para que as VMs na subnet snet-compute possam acessar o storage account ncargatms001 de forma segura sem expor o tráfego à internet, o time de rede configurará Service Endpoints de Storage na subnet.
Tarefas:
[PowerShell] Adicione o Service Endpoint Microsoft.Storage à subnet snet-compute da rede ncarga-vnet-compute usando Set-AzVirtualNetworkSubnetConfig com o parâmetro -ServiceEndpoint.
[PowerShell] Adicione uma regra de VNet ao firewall do storage account ncargatms001 permitindo tráfego da subnet snet-compute usando Add-AzStorageAccountNetworkRule -VirtualNetworkResourceId.
[PowerShell] Confirme que a regra de VNet foi adicionada com Get-AzStorageAccountNetworkRuleSet.
Critérios de Validação:
# Deve retornar linha com snet-compute e Action = Allow:
(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName "ncarga-rg-storage" -AccountName "ncargatms001").VirtualNetworkRules |
Select-Object VirtualNetworkResourceId, Action
# Deve retornar Service = Microsoft.Storage:
(Get-AzVirtualNetworkSubnetConfig -Name "snet-compute" -VirtualNetwork (Get-AzVirtualNetwork -Name "ncarga-vnet-compute" -ResourceGroupName "ncarga-rg-network")).ServiceEndpoints |
Select-Object Service
Etapa 63 — Configurar private endpoints para PaaS
Contexto: O storage account ncargataudit001 contém logs de auditoria sensíveis. O time de segurança exige que o acesso seja feito exclusivamente via rede privada, usando Private Endpoint para eliminar qualquer caminho público.
Tarefas:
[PowerShell] Crie o Private Endpoint ncarga-pe-audit-storage no resource group ncarga-rg-network, região brazilsouth, conectado ao storage account ncargataudit001 com sub-resource blob. Use New-AzPrivateEndpoint apontando para a subnet snet-storage da ncarga-vnet-services.
[PowerShell] Crie a Private DNS Zone privatelink.blob.core.windows.net no resource group ncarga-rg-network e vincule-a à rede ncarga-vnet-services usando New-AzPrivateDnsZone e New-AzPrivateDnsVirtualNetworkLink.
[PowerShell] Crie o DNS Zone Group para o Private Endpoint ncarga-pe-audit-storage usando New-AzPrivateDnsZoneGroup.
Critérios de Validação:
# Deve retornar ProvisioningState = Succeeded:
Get-AzPrivateEndpoint -ResourceGroupName "ncarga-rg-network" -Name "ncarga-pe-audit-storage" |
Select-Object Name, ProvisioningState
# Deve retornar a zona criada:
Get-AzPrivateDnsZone -ResourceGroupName "ncarga-rg-network" -Name "privatelink.blob.core.windows.net" |
Select-Object Name
Etapa 64 — Configurar Azure DNS
Contexto: O portal de clientes precisa ser acessível via domínio personalizado (portal.novacarga.com.br) em vez da URL padrão do App Service. O Azure DNS será usado para gerenciar os registros DNS do domínio da empresa.
Tarefas:
[PowerShell] Crie a DNS Zone pública novacarga.com.br no resource group ncarga-rg-network usando New-AzDnsZone. Obtenha os nameservers atribuídos.
[PowerShell] Crie um registro CNAME na DNS Zone:
| Parâmetro | Valor |
|---|---|
| Nome | portal |
| TTL | 3600 |
| Destino | ncarga-webapp-portal.azurewebsites.net |
Use New-AzDnsRecordSet com tipo CNAME.
[PowerShell] Crie um registro TXT para verificação de domínio com nome asuid.portal. Obtenha o valor do customDomainVerificationId com:
(Get-AzWebApp -Name ncarga-webapp-portal -ResourceGroupName ncarga-rg-compute).CustomDomainVerificationId
Critérios de Validação:
# Deve retornar ao menos 2 registros: portal (CNAME) e asuid.portal (TXT):
Get-AzDnsRecordSet -ZoneName "novacarga.com.br" -ResourceGroupName "ncarga-rg-network" |
Select-Object Name, RecordType, Ttl
# Deve retornar 4 nameservers Azure:
Get-AzDnsZone -Name "novacarga.com.br" -ResourceGroupName "ncarga-rg-network" |
Select-Object Name, NameServers
Etapa 65 — Configurar um load balancer interno
Contexto: As VMs ncarga-vm-tms01 e ncarga-vm-tms02 precisam de distribuição de carga para a API do TMS. Um Load Balancer interno será configurado para distribuir requisições da porta 8080 entre as duas VMs sem exposição pública.
Tarefas:
[PowerShell] Crie o Load Balancer interno ncarga-lb-tms no resource group ncarga-rg-network, região eastus, SKU Standard, com IP privado estático 10.10.1.100 na subnet snet-compute.
[PowerShell] Configure o Load Balancer com:
- Frontend IP:
10.10.1.100na subnetsnet-compute - Backend pool:
ncarga-lb-tms-backendincluindo as NICs dencarga-vm-tms01encarga-vm-tms02 - Health probe: TCP na porta 8080, intervalo de 15 segundos
- Load balancing rule: porta 8080 front para 8080 backend, protocolo TCP
[PowerShell] Confirme que o backend pool contém as duas VMs com Get-AzLoadBalancerBackendAddressPoolConfig.
Critérios de Validação:
# Deve retornar Sku = Standard, ProvisioningState = Succeeded:
Get-AzLoadBalancer -ResourceGroupName "ncarga-rg-network" -Name "ncarga-lb-tms" |
Select-Object Name, @{N='Sku';E={$_.Sku.Name}}, ProvisioningState
# Deve retornar os dois IPs privados das VMs TMS:
(Get-AzLoadBalancerBackendAddressPoolConfig -LoadBalancer (Get-AzLoadBalancer -Name "ncarga-lb-tms" -ResourceGroupName "ncarga-rg-network") -Name "ncarga-lb-tms-backend").BackendAddresses |
Select-Object IpAddress
Etapa 66 — Solucionar problemas de balanceamento de carga
Contexto: Após configurar o Load Balancer na Etapa 65, o time de operações reportou que o health probe não está marcando as VMs como saudáveis. O engenheiro precisa diagnosticar e resolver o problema.
Tarefas:
[Portal] Adicione a métrica Health Probe Status com agregação Average em: Load balancers → ncarga-lb-tms → Metrics. Identifique se as VMs estão sendo marcadas como 0 (unhealthy) ou 1 (healthy).
[Portal] Revise o diagrama de conectividade em: Load balancers → ncarga-lb-tms → Insights. Identifique o componente causando a falha no health probe.
[PowerShell] Adicione uma regra de entrada ao NSG da subnet snet-compute permitindo tráfego TCP na porta 8080 da tag de serviço AzureLoadBalancer:
# Adicione a regra ao NSG que protege a subnet snet-compute:
# Source: AzureLoadBalancer | Destination port: 8080 | Action: Allow
Critérios de Validação:
# Deve retornar regra com SourceAddressPrefix = AzureLoadBalancer, Access = Allow, porta 8080:
Get-AzNetworkSecurityGroup -ResourceGroupName "ncarga-rg-network" -Name "ncarga-nsg-compute" |
Select-Object -ExpandProperty SecurityRules |
Where-Object { $_.DestinationPortRange -eq "8080" -and $_.Access -eq "Allow" } |
Select-Object Name, Priority, SourceAddressPrefix, Access
Domínio 7 — Monitoramento
Etapa 67 — Interpretar métricas no Azure Monitor
Contexto: Com toda a infraestrutura do Projeto Âncora provisionada, o time de operações precisa de visibilidade sobre a performance dos recursos críticos.
Tarefas:
[Portal] Crie um gráfico em: Monitor → Metrics. Selecione o recurso ncarga-vm-wms01 e adicione as métricas:
| Métrica | Agregação |
|---|---|
| Percentage CPU | Average |
| Available Memory Bytes | Average |
| Disk Read Operations/Sec | Sum |
Configure o intervalo de tempo como Last 24 hours e granularidade de 5 minutes.
[Portal] Adicione o storage account ncargatms001 ao mesmo gráfico com a métrica Transactions e agregação Sum.
[Portal] Salve o gráfico como visualização fixada em um novo dashboard chamado ncarga-dashboard-ops.
Critérios de Validação:
Monitor → Metrics: gráfico com ao menos 3 métricas da VMncarga-vm-wms01exibidas sem erros.- Dashboard
ncarga-dashboard-opsvisível emDashboard → Shared dashboards.
Etapa 68 — Configurar log settings no Azure Monitor
Contexto: A conformidade com a LGPD exige que logs de acesso e operações de todos os recursos críticos sejam armazenados de forma centralizada e auditável. Um Log Analytics Workspace será o repositório central de logs.
Tarefas:
[PowerShell] Crie o Log Analytics Workspace ncarga-law-prod no resource group ncarga-rg-compute, região eastus, com retenção de 90 dias usando New-AzOperationalInsightsWorkspace.
[PowerShell] Configure o Diagnostic Settings do storage account ncargatms001 para enviar logs de categoria StorageRead, StorageWrite e StorageDelete (sub-resource blobServices) ao workspace ncarga-law-prod usando Set-AzDiagnosticSetting.
[PowerShell] Configure o Diagnostic Settings da VM ncarga-vm-wms01 para enviar métricas e logs ao workspace ncarga-law-prod.
Critérios de Validação:
# Deve retornar Sku = PerGB2018, RetentionInDays = 90:
Get-AzOperationalInsightsWorkspace -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-law-prod" |
Select-Object Name, Sku, RetentionInDays
# Deve retornar ao menos uma configuração de diagnóstico:
Get-AzDiagnosticSetting -ResourceId (Get-AzStorageAccount -Name "ncargatms001" -ResourceGroupName "ncarga-rg-storage").Id |
Select-Object Name
Etapa 69 — Consultar e analisar logs no Azure Monitor
Contexto: Após a coleta de logs configurada na Etapa 68, o time de segurança precisa de relatórios sobre acessos ao storage ncargatms001 e sobre o status das VMs.
Tarefas:
[Portal] Execute a consulta KQL abaixo em: Log Analytics workspaces → ncarga-law-prod → Logs. Modifique o filtro para as últimas 24 horas e anote a contagem de operações por categoria:
StorageBlobLogs
| where TimeGenerated > ago(24h)
| summarize Count = count() by OperationName, StatusCode
| order by Count desc
[Portal] Execute uma segunda consulta listando as últimas 10 operações de escrita no storage (OperationName contendo "Write"), exibindo TimeGenerated, CallerIpAddress, AuthenticationType e StatusCode.
[Portal] Salve a primeira consulta com o nome ncarga-query-storage-ops na categoria NovaCarga.
Critérios de Validação:
Log Analytics → ncarga-law-prod → Logs → Queries → NovaCarga: queryncarga-query-storage-opslistada e executável.- Resultado da query 1: tabela com colunas
OperationName,StatusCode,Count. Pode retornar zero resultados se o storage não recebeu tráfego — isso é aceitável, desde que a query execute sem erros de sintaxe KQL.
Etapa 70 — Configurar regras de alerta, action groups e alert processing rules
Contexto: O time de operações precisa ser notificado proativamente quando a CPU da VM ncarga-vm-wms01 exceder 85% por mais de 5 minutos, e quando o storage account ncargatms001 retornar erros HTTP 5xx.
Tarefas:
[PowerShell] Crie o Action Group ncarga-ag-ops no resource group ncarga-rg-compute com uma ação de email para ana.ferreira@<tenant>.onmicrosoft.com usando New-AzActionGroup.
[PowerShell] Crie a regra de alerta de métrica para a VM ncarga-vm-wms01:
| Parâmetro | Valor |
|---|---|
| Nome | ncarga-alert-cpu-wms01 |
| Métrica | Percentage CPU |
| Operador | GreaterThan |
| Threshold | 85 |
| Janela de avaliação | 5 minutos |
| Action Group | ncarga-ag-ops |
Use New-AzMetricAlertRuleV2.
[Portal] Crie uma Alert Processing Rule para suprimir todos os alertas da subscription durante os fins de semana em: Monitor → Alerts → Alert processing rules → Create.
Critérios de Validação:
# Deve retornar Enabled = True, Threshold = 85:
Get-AzMetricAlertRuleV2 -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-alert-cpu-wms01" |
Select-Object Name, Enabled, @{N='Threshold';E={$_.Criteria.AllOf[0].Threshold}}
# Deve retornar Enabled = True:
Get-AzActionGroup -ResourceGroupName "ncarga-rg-compute" -Name "ncarga-ag-ops" |
Select-Object GroupShortName, Enabled
Etapa 71 — Configurar e interpretar monitoramento com Azure Monitor Insights
Contexto: O time de operações precisa de dashboards operacionais para VMs e redes. O Azure Monitor Insights fornece visualizações pré-construídas para os principais recursos do Projeto Âncora.
Tarefas:
[Portal] Habilite o VM Insights para ncarga-vm-wms01 em: Monitor → Virtual Machines. Instale o agente do Azure Monitor (AMA) se solicitado e aponte para o workspace ncarga-law-prod.
[Portal] Após habilitar o VM Insights, navegue até a aba Performance e identifique os três processos que consomem mais CPU na VM ncarga-vm-wms01.
[Portal] Selecione a VNet ncarga-vnet-compute em: Monitor → Networks → Network Insights. Revise a aba Topology e confirme que subnets, NSGs e peerings estão representados corretamente.
Critérios de Validação:
Monitor → Virtual Machines:ncarga-vm-wms01listada com status de monitoramento = Monitored. Aba Performance disponível com gráficos de CPU, Memory, Disk e Network.Monitor → Networks → Network Insights:ncarga-vnet-computeencarga-vnet-servicesexibidas com topologia. Peering entre as duas VNets visível no diagrama.
Etapa 72 — Usar Azure Network Watcher e Connection Monitor
Contexto: O time de rede precisa de monitoramento contínuo da conectividade entre as VMs do WMS e TMS e o storage account ncargatms001. O Connection Monitor fornecerá alertas se a conectividade entre esses endpoints falhar.
Tarefas:
[Portal] Crie o monitor de conexão ncarga-cm-wms-storage em: Network Watcher → Connection monitor
- Source: VM
ncarga-vm-wms01 - Destination: endpoint
ncargatms001.blob.core.windows.net, porta 443 - Frequência de teste: 60 segundos
- Workspace:
ncarga-law-prod
[Portal] Adicione um segundo test group ao mesmo Connection Monitor monitorando ncarga-vm-tms01 → ncarga-vm-wms01 na porta 8080.
[Portal] Aguarde pelo menos um ciclo de teste (1 minuto) e revise os resultados em Connection monitor → Tests. Confirme status (Pass/Fail) e latência média de cada test group.
Critérios de Validação:
Network Watcher → Connection monitor → ncarga-cm-wms-storage → Test groups: ao menos dois test groups com status (Pass ou Fail) e valores de latência.Monitor → Logs (ncarga-law-prod): queryNWConnectionMonitorTestResult | where TimeGenerated > ago(1h)retorna registros após o primeiro ciclo de coleta.
Domínio 8 — Backup e Recuperação de Desastres
Etapa 73 — Criar um Recovery Services Vault
Contexto: O plano de recuperação de desastres do Projeto Âncora exige que as VMs e o compartilhamento de arquivos do Azure Files tenham backup automático. O Recovery Services Vault será o cofre centralizado para todas as políticas de backup.
Tarefas:
[PowerShell] Crie o Recovery Services Vault ncarga-rsv-prod no resource group ncarga-rg-compute, região eastus, com redundância GeoRedundant usando New-AzRecoveryServicesVault.
[PowerShell] Configure o tipo de armazenamento do vault com Set-AzRecoveryServicesBackupProperty -BackupStorageRedundancy GeoRedundant.
[PowerShell] Defina o contexto do vault para as operações subsequentes com Set-AzRecoveryServicesVaultContext.
Critérios de Validação:
# Deve retornar ProvisioningState = Succeeded, Location = eastus:
Get-AzRecoveryServicesVault -Name "ncarga-rsv-prod" -ResourceGroupName "ncarga-rg-compute" |
Select-Object Name, Location, ProvisioningState
# Deve retornar GeoRedundant:
(Get-AzRecoveryServicesBackupProperty -Vault (Get-AzRecoveryServicesVault -Name "ncarga-rsv-prod" -ResourceGroupName "ncarga-rg-compute")).BackupStorageRedundancy
Etapa 74 — Criar um Azure Backup Vault
Contexto: Além do Recovery Services Vault, o Projeto Âncora requer um Azure Backup Vault para proteger os managed disks e blobs usando as novas políticas de backup nativas do serviço.
Tarefas:
[CLI] Crie o Azure Backup Vault ncarga-bkpvault-prod no resource group ncarga-rg-compute, região eastus, com redundância GeoRedundant e imutabilidade em modo Unlocked usando az dataprotection backup-vault create.
[Portal] Confirme o tipo de armazenamento e status de imutabilidade em: Backup vaults → ncarga-bkpvault-prod → Properties.
[Portal] Confirme em: Backup vaults → ncarga-bkpvault-prod → Backup policies que o vault foi criado sem políticas configuradas.
Critérios de Validação:
# Deve retornar provisioningState = Succeeded:
az dataprotection backup-vault show --vault-name ncarga-bkpvault-prod \
--resource-group ncarga-rg-compute \
--query "{name:name, storageSettings:properties.storageSettings, provisioningState:properties.provisioningState}"
Etapa 75 — Criar e configurar uma política de backup
Contexto: O SLA de recuperação define: backup diário das VMs com retenção de 30 dias, backup semanal com retenção de 12 semanas e backup mensal com retenção de 12 meses.
Tarefas:
[PowerShell] Obtenha a política padrão de VM do vault ncarga-rsv-prod usando Get-AzRecoveryServicesBackupProtectionPolicy -WorkloadType AzureVM. Use-a como base para criar uma política customizada.
[PowerShell] Crie a política ncarga-bkp-policy-vm no vault ncarga-rsv-prod com:
- Backup diário às 02:00 UTC
- Retenção diária: 30 dias
- Retenção semanal: 12 semanas (toda segunda-feira)
- Retenção mensal: 12 meses (primeiro dia do mês)
Use New-AzRecoveryServicesBackupProtectionPolicy.
[PowerShell] Confirme a criação com Get-AzRecoveryServicesBackupProtectionPolicy -Name ncarga-bkp-policy-vm.
Critérios de Validação:
$policy = Get-AzRecoveryServicesBackupProtectionPolicy -Name "ncarga-bkp-policy-vm"
# Deve retornar WorkloadType = AzureVM com ScheduleRunTimes contendo 02:00 UTC:
$policy | Select-Object Name, WorkloadType, @{N='ScheduleRunTimes';E={$_.SchedulePolicy.ScheduleRunTimes}}
# Deve retornar 30:
$policy.RetentionPolicy.DailySchedule.DurationCountInDays
Etapa 76 — Realizar operações de backup e restore com Azure Backup
Contexto: Com a política configurada, o time de TI precisa habilitar a proteção da VM ncarga-vm-wms01 e executar o primeiro backup sob demanda para validar o processo antes do backup automático noturno.
Tarefas:
[PowerShell] Habilite a proteção de backup para a VM ncarga-vm-wms01 usando a política ncarga-bkp-policy-vm no vault ncarga-rsv-prod com Enable-AzRecoveryServicesBackupProtection.
[PowerShell] Acione um backup sob demanda usando Backup-AzRecoveryServicesBackupItem. Capture o JobId retornado e monitore o progresso com Get-AzRecoveryServicesBackupJob -JobId <id>.
[Portal] Após a conclusão, confirme em: Recovery Services vaults → ncarga-rsv-prod → Backup items → Azure Virtual Machine. A VM ncarga-vm-wms01 deve aparecer com status Backup succeeded e ao menos um ponto de restauração disponível.
Critérios de Validação:
# Deve retornar Status = Completed, Operation = Backup:
Get-AzRecoveryServicesBackupJob -JobId <job-id-capturado> |
Select-Object JobId, Status, Operation, Duration
# Deve retornar LastBackupStatus = Completed:
Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM |
Where-Object { $_.Name -like "*wms01*" } |
Select-Object Name, LastBackupStatus, LastBackupTime
Etapa 77 — Configurar Azure Site Recovery para recursos Azure
Contexto: O plano de continuidade de negócios define que a VM ncarga-vm-tms01 deve ter replicação ativa para a região Brazil South como região secundária. O Azure Site Recovery gerenciará a replicação contínua para garantir o RTO de 4 horas.
Tarefas:
[Portal] Configure a replicação em: Virtual machines → ncarga-vm-tms01 → Disaster recovery
| Parâmetro | Valor |
|---|---|
| Região alvo | Brazil South |
| Subscription alvo | mesma subscription |
| Resource group alvo | ncarga-rg-vms-dr (criado automaticamente) |
| Vault de replicação | ncarga-rsv-prod |
| Storage account cache | criar novo (Standard_LRS) |
[Portal] Monitore o progresso em: Recovery Services vaults → ncarga-rsv-prod → Replicated items.
[Portal] Após a sincronização inicial, confirme em: Recovery Services vaults → ncarga-rsv-prod → Replicated items → ncarga-vm-tms01 que o status é Protected e Replication health é Healthy.
Critérios de Validação:
Recovery Services vaults → ncarga-rsv-prod → Replicated items: ncarga-vm-tms01 listada com:
- Replication health: Healthy
- Status: Protected
- Target region: Brazil South (brazilsouth)
Etapa 78 — Realizar failover para região secundária com Site Recovery
Contexto: O time de continuidade de negócios agendou um drill de disaster recovery trimestral. Um test failover da VM ncarga-vm-tms01 para a região brazilsouth será executado em uma rede isolada para validar o processo sem afetar a produção.
Tarefas:
[Portal] Execute o test failover em: Recovery Services vaults → ncarga-rsv-prod → Replicated items → ncarga-vm-tms01 → Test Failover
- Recovery point: Latest processed
- Rede Azure alvo: Create new ou selecione uma rede de teste em
brazilsouth
[Portal] Aguarde a conclusão e confirme que a VM de teste ncarga-vm-tms01-test foi criada na região brazilsouth no resource group de DR.
[Portal] Após validar a VM de teste, execute o cleanup em: Replicated items → ncarga-vm-tms01 → Cleanup test failover. Confirme que os recursos de teste foram removidos e o status retornou a Protected.
Critérios de Validação:
- Durante o failover: Status = Test failover completed no blade de jobs.
- Após cleanup: Status retorna a Protected, Replication health = Healthy.
Resource groups → ncarga-rg-vms-dr: VMncarga-vm-tms01-testpresente durante o drill e removida após o cleanup.
Etapa 79 — Configurar e interpretar relatórios e alertas de backup
Contexto: O gerente de TI exige um relatório semanal sobre o status de todos os backups do Projeto Âncora. Esta etapa configura os relatórios de backup e cria alertas para backups com falha.
Tarefas:
[Portal] Configure os relatórios de backup em: Recovery Services vaults → ncarga-rsv-prod → Backup reports. Aponte para o workspace ncarga-law-prod clicando em Configure Diagnostic Settings.
[Portal] Revise os alertas de backup ativos em: Backup center → Alerts. Confirme que o vault ncarga-rsv-prod está sendo monitorado.
[Portal] Em: Backup center → Reporting, selecione o vault ncarga-rsv-prod e o workspace ncarga-law-prod. Revise as abas Summary, Backup Items e Jobs. Confirme que o backup de ncarga-vm-wms01 aparece nos relatórios.
Critérios de Validação:
# Deve retornar registros de jobs de backup (pode levar até 24h para aparecer):
Invoke-AzOperationalInsightsQuery -WorkspaceId (Get-AzOperationalInsightsWorkspace -Name "ncarga-law-prod" -ResourceGroupName "ncarga-rg-compute").CustomerId `
-Query "AddonAzureBackupJobs | take 5" |
Select-Object -ExpandProperty Results
# Se vazio: confirme que o Diagnostic Setting do vault está configurado para ncarga-law-prod
Backup center → Reporting:ncarga-vm-wms01visível na aba Backup Items com status Backup succeeded.
Validação Final do Ambiente
Ao concluir todas as 79 etapas, o ambiente do Projeto Âncora deve estar composto pelos seguintes recursos ativos e integrados:
| Categoria | Recursos | Resource Group |
|---|---|---|
| Identidade | 3 usuários, 2 grupos, 1 convidado, SSPR | Microsoft Entra ID |
| Governança | 2 policies, 2 locks, budget, management group | ncarga-rg-financeiro / ncarga-rg-network |
| Storage | ncargatest001, ncargatms001, ncargatfiles001, ncargataudit001 | ncarga-rg-storage |
| Compute | ncarga-vm-wms01 (D4s_v3), ncarga-vm-tms01, ncarga-vm-tms02, ncarga-vmss-tracker | ncarga-rg-vms |
| Contêineres | ncargatregistry001, ncarga-aci-rastreamento, ncarga-ca-rastreamento | ncarga-rg-compute |
| App Service | ncarga-webapp-portal (P1v3, slot staging) | ncarga-rg-compute |
| Rede | ncarga-vnet-compute, ncarga-vnet-services, NSGs, Bastion, LB, DNS, UDR, Private Endpoints | ncarga-rg-network |
| Monitoramento | ncarga-law-prod, alertas, Connection Monitor, VM Insights | ncarga-rg-compute |
| Backup e DR | ncarga-rsv-prod, ncarga-bkpvault-prod, Site Recovery (Brazil South) | ncarga-rg-compute |
Consulta final de validação:
# Deve retornar ao menos 35 recursos distintos:
Get-AzResource | Where-Object { $_.ResourceGroupName -like "ncarga-*" } | Measure-Object
Laboratório AZ-104 — NovaCarga Logística S.A. | Prefixo: ncarga | Modo: PowerShell | 79 etapas | 8 domínios