Laboratório Hands-on Guiado: AZ-104 Microsoft Azure Administrator
Cenário
A Contoso Agro Brasil é uma empresa de tecnologia agrícola sediada em Campinas/SP que opera uma plataforma SaaS de monitoramento de safras. A empresa possui 120 funcionários internos, 15 consultores externos e três equipes principais: Engenharia, Operações e Comercial. Recentemente, a Contoso Agro adquiriu uma startup chamada GreenField Analytics, cujos colaboradores precisam ser integrados ao ambiente Azure existente.
O ambiente Azure atual da Contoso Agro possui uma única subscription ativa com um Resource Group de produção já em uso. A meta deste laboratório é reestruturar completamente a governança de identidade, controle de acesso, políticas e gestão de custos do ambiente Azure da empresa, preparando a infraestrutura para a integração segura da equipe adquirida e para a adoção de boas práticas de administração em escala.
Pré-requisitos
Antes de iniciar a Fase 1, confirme ou crie os seguintes recursos:
-
Subscription Azure ativa com permissões de Owner ou Global Administrator. Se estiver usando uma subscription de teste (Free Trial ou Pay-As-You-Go), verifique se possui créditos suficientes.
-
Acesso ao Microsoft Entra ID com papel de Global Administrator no tenant associado à subscription.
-
Azure CLI instalada (versão 2.50 ou superior). Confirme executando:
az version
- Login na CLI autenticado no tenant correto:
az login
az account show --query "{name:name, id:id, tenantId:tenantId}" -o table
- Resource Group principal do laboratório:
Via Portal
Navegue até Resource groups > Create. Preencha o campo Resource group com rg-contosoagro-lab e selecione a região East US 2. Clique em Review + create > Create.
Via CLI
az group create --name rg-contosoagro-lab --location eastus2
- Resource Group secundário para testes de governança:
Via Portal
Repita o processo acima com o nome rg-greenfield-dev na mesma região East US 2.
Via CLI
az group create --name rg-greenfield-dev --location eastus2
- Domínio personalizado (opcional). O laboratório funciona com o domínio padrão
*.onmicrosoft.com, mas se a organização possuir domínio customizado, pode utilizá-lo nos passos de criação de usuários.
Tabela de Referência de Recursos
| Recurso | Nome no lab | Região |
|---|---|---|
| Resource Group (principal) | rg-contosoagro-lab | East US 2 |
| Resource Group (dev) | rg-greenfield-dev | East US 2 |
| Management Group | mg-contosoagro-root | N/A |
| Management Group (filho) | mg-contosoagro-producao | N/A |
| Usuário interno 1 | ana.silva@{domínio} | N/A |
| Usuário interno 2 | carlos.mendes@{domínio} | N/A |
| Usuário externo | parceiro@externaldomain.com | N/A |
| Grupo de segurança 1 | grp-engenharia | N/A |
| Grupo de segurança 2 | grp-operacoes | N/A |
| Grupo Microsoft 365 | grp-greenfield-integracao | N/A |
| Budget | budget-contosoagro-mensal | N/A |
| Policy (custom) | policy-exigir-tag-centro-custo | N/A |
Nota: Substitua
{domínio}pelo domínio do seu tenant (ex:contosoagrobr.onmicrosoft.com).
Fases do Laboratório
Fase 1 — Gestão de Identidades no Microsoft Entra ID
Esta fase cobre a criação e configuração de usuários e grupos no Microsoft Entra ID, o gerenciamento de propriedades, atribuição de licenças e integração de usuários externos. Os recursos de identidade criados aqui serão utilizados em todas as fases subsequentes para atribuição de papéis, testes de política e validação de acesso.
Objetivos cobertos: Create users and groups | Manage user and group properties | Manage licenses in Microsoft Entra ID | Manage external users | Configure self-service password reset (SSPR)
Tarefa 1.1 — Criar usuários internos e verificar estado inicial
A Contoso Agro precisa provisionar contas para dois novos colaboradores que ingressaram após a aquisição da GreenField Analytics. Antes de criar os usuários, verifique a quantidade atual de usuários no tenant para estabelecer uma linha de base.
Via Portal
- Navegue até Microsoft Entra ID > Users > All users.
- Anote a quantidade total de usuários exibida no topo da lista. Este é o seu estado inicial.
- Clique em New user > Create new user.
- Preencha os campos:
- User principal name:
ana.silva - Display name:
Ana Silva - Auto-generate password: Desmarque e defina a senha
ContosoAgro@2024! - Em Properties, preencha Job title com
Engenheira de Dadose Department comEngenharia. - Em Usage location, selecione Brazil.
- User principal name:
- Clique em Review + create > Create.
- Repita os passos 3 a 5 para o segundo usuário:
- User principal name:
carlos.mendes - Display name:
Carlos Mendes - Senha:
ContosoAgro@2024! - Job title:
Analista de Operações - Department:
Operações - Usage location:
Brazil
- User principal name:
Via CLI
# Obter o domínio do tenant
DOMAIN=$(az rest --method get --url "https://graph.microsoft.com/v1.0/domains" \
--query "value[?isDefault].id" -o tsv)
# Verificar contagem atual de usuários (estado inicial)
az ad user list --query "length(@)" -o tsv
# Criar primeiro usuário
az ad user create \
--display-name "Ana Silva" \
--user-principal-name "ana.silva@$DOMAIN" \
--password "ContosoAgro@2024!" \
--force-change-password-next-sign-in false \
--job-title "Engenheira de Dados" \
--department "Engenharia"
# Criar segundo usuário
az ad user create \
--display-name "Carlos Mendes" \
--user-principal-name "carlos.mendes@$DOMAIN" \
--password "ContosoAgro@2024!" \
--force-change-password-next-sign-in false \
--job-title "Analista de Operações" \
--department "Operações"
# Verificar que a contagem aumentou em 2
az ad user list --query "length(@)" -o tsv
Ao concluir esta tarefa, dois novos usuários estarão provisionados no tenant com propriedades de cargo, departamento e localização de uso configuradas. A verificação da contagem antes e depois garante que nenhum usuário duplicado foi criado inadvertidamente.
Tarefa 1.2 — Criar grupos de segurança e grupo Microsoft 365
A Contoso Agro organiza permissões por equipe. Você criará dois grupos de segurança para as equipes existentes e um grupo Microsoft 365 para gerenciar a colaboração com a equipe integrada da GreenField.
Via Portal
- Navegue até Microsoft Entra ID > Groups > All groups.
- Clique em New group.
- Selecione Group type como Security.
- Preencha Group name com
grp-engenhariae Group description comEquipe de Engenharia - Contoso Agro. - Em Membership type, selecione Assigned.
- Em Members, clique em No members selected e adicione Ana Silva.
- Em Owners, adicione sua conta de administrador.
- Clique em Create.
- Repita os passos 2 a 8 para criar o grupo
grp-operacoes(tipo Security, membro: Carlos Mendes). - Crie um terceiro grupo com Group type = Microsoft 365, nome
grp-greenfield-integracao, sem membros por enquanto. - Verifique que os três grupos aparecem na lista. Abra cada grupo e confirme que os membros corretos estão atribuídos.
Via CLI
# Obter Object IDs dos usuários criados
ANA_ID=$(az ad user show --id "ana.silva@$DOMAIN" --query id -o tsv)
CARLOS_ID=$(az ad user show --id "carlos.mendes@$DOMAIN" --query id -o tsv)
# Criar grupo de segurança - Engenharia
az ad group create \
--display-name "grp-engenharia" \
--mail-nickname "grp-engenharia" \
--description "Equipe de Engenharia - Contoso Agro"
# Adicionar Ana ao grupo
az ad group member add --group "grp-engenharia" --member-id "$ANA_ID"
# Criar grupo de segurança - Operações
az ad group create \
--display-name "grp-operacoes" \
--mail-nickname "grp-operacoes" \
--description "Equipe de Operações - Contoso Agro"
# Adicionar Carlos ao grupo
az ad group member add --group "grp-operacoes" --member-id "$CARLOS_ID"
# Criar grupo Microsoft 365 para integração
az ad group create \
--display-name "grp-greenfield-integracao" \
--mail-nickname "grp-greenfield-integracao" \
--description "Integração GreenField Analytics" \
--group-types "Unified"
# Validar membros de cada grupo
az ad group member list --group "grp-engenharia" --query "[].displayName" -o tsv
az ad group member list --group "grp-operacoes" --query "[].displayName" -o tsv
Os grupos criados servirão como unidades de atribuição de papéis RBAC nas fases seguintes. O grupo Microsoft 365 será utilizado especificamente para a colaboração com usuários externos.
Tarefa 1.3 — Gerenciar propriedades de usuários e grupos e atribuir licenças
Após a criação, é necessário ajustar propriedades e garantir que os usuários tenham as licenças corretas atribuídas. Antes de atribuir licenças, verifique o estado atual de licenciamento para confirmar que os usuários ainda não possuem licenças.
Via Portal
- Navegue até Microsoft Entra ID > Users > selecione Ana Silva.
- Clique em Properties > Edit.
- Altere o campo Job title de
Engenheira de DadosparaEngenheira de Dados Sênior. - Clique em Save.
- No painel da usuária, clique em Licenses.
- Confirme que a lista de licenças está vazia (estado anterior).
- Clique em Assignments > selecione uma licença disponível no tenant (ex: Microsoft 365 E3 ou Enterprise Mobility + Security E5, conforme disponibilidade).
- Clique em Save.
- Verifique que a licença agora aparece na lista de licenças atribuídas.
- Navegue até Groups > selecione
grp-engenharia> Properties. - Altere a Description para
Equipe de Engenharia - Contoso Agro Brasil (inclui GreenField). - Clique em Save.
Via CLI
# Atualizar cargo da Ana
az ad user update --id "ana.silva@$DOMAIN" \
--job-title "Engenheira de Dados Sênior"
# Verificar propriedade atualizada
az ad user show --id "ana.silva@$DOMAIN" \
--query "{nome:displayName, cargo:jobTitle}" -o table
# Listar SKUs de licenças disponíveis no tenant
az rest --method get \
--url "https://graph.microsoft.com/v1.0/subscribedSkus" \
--query "value[].{sku:skuPartNumber, disponivel:prepaidUnits.enabled, consumido:consumedUnits}" \
-o table
# Obter o skuId de uma licença disponível (exemplo: substitua pelo SKU real)
SKU_ID=$(az rest --method get \
--url "https://graph.microsoft.com/v1.0/subscribedSkus" \
--query "value[0].skuId" -o tsv)
# Atribuir licença à Ana via Graph API
az rest --method post \
--url "https://graph.microsoft.com/v1.0/users/ana.silva@$DOMAIN/assignLicense" \
--headers "Content-Type=application/json" \
--body "{\"addLicenses\":[{\"skuId\":\"$SKU_ID\",\"disabledPlans\":[]}],\"removeLicenses\":[]}"
# Confirmar atribuição
az rest --method get \
--url "https://graph.microsoft.com/v1.0/users/ana.silva@$DOMAIN/licenseDetails" \
--query "value[].skuPartNumber" -o tsv
Cenário adverso: Se o tenant não possuir licenças disponíveis, a atribuição falhará com erro de quota. Nesse caso, acesse Microsoft Entra ID > Licenses > All products e ative uma avaliação gratuita de Enterprise Mobility + Security E5 ou Microsoft 365 E5 antes de repetir o passo.
A atualização de propriedades e a atribuição de licenças são operações frequentes na administração de identidades. A verificação do estado anterior (sem licenças) e posterior (com licenças) garante rastreabilidade.
Tarefa 1.4 — Convidar usuário externo e adicionar ao grupo de integração
A Contoso Agro precisa conceder acesso a um consultor externo da GreenField Analytics. O usuário será convidado via Microsoft Entra External ID (B2B) e adicionado ao grupo de integração.
Via Portal
- Navegue até Microsoft Entra ID > Users > All users.
- Clique em New user > Invite external user.
- Preencha os campos:
- Email address: utilize um endereço de email real ao qual você tenha acesso (ex: um email pessoal ou uma conta de teste).
- Display name:
Consultor GreenField - Personal message:
Bem-vindo à Contoso Agro Brasil. Você está sendo convidado para colaborar no projeto de integração.
- Clique em Invite.
- Verifique que o usuário aparece na lista com User type = Guest.
- Navegue até Groups > selecione
grp-greenfield-integracao. - Clique em Members > Add members > selecione Consultor GreenField.
- Confirme que o membro foi adicionado.
Via CLI
# Convidar usuário externo
az rest --method post \
--url "https://graph.microsoft.com/v1.0/invitations" \
--headers "Content-Type=application/json" \
--body '{
"invitedUserEmailAddress": "parceiro@externaldomain.com",
"invitedUserDisplayName": "Consultor GreenField",
"inviteRedirectUrl": "https://portal.azure.com",
"sendInvitationMessage": true,
"invitedUserMessageInfo": {
"customizedMessageBody": "Bem-vindo à Contoso Agro Brasil."
}
}'
# Obter o ID do usuário convidado
GUEST_ID=$(az ad user list --filter "displayName eq 'Consultor GreenField'" \
--query "[0].id" -o tsv)
# Verificar que o userType é Guest
az ad user show --id "$GUEST_ID" --query "{nome:displayName, tipo:userType}" -o table
# Adicionar ao grupo de integração
az ad group member add --group "grp-greenfield-integracao" --member-id "$GUEST_ID"
# Confirmar associação
az ad group member list --group "grp-greenfield-integracao" \
--query "[].displayName" -o tsv
Cenário adverso: Se o convite for enviado para um domínio bloqueado nas configurações de colaboração externa, a operação falhará. Verifique em Microsoft Entra ID > External Identities > External collaboration settings se a opção Collaboration restrictions não está bloqueando o domínio utilizado.
O usuário externo agora existe no tenant como Guest e pertence ao grupo de integração. Nas fases seguintes, este usuário será alvo de atribuições de papéis com escopo limitado.
Tarefa 1.5 — Configurar Self-Service Password Reset (SSPR)
A Contoso Agro deseja habilitar o SSPR para reduzir chamados de suporte relacionados a redefinição de senhas. Antes de habilitar, verifique o estado atual da configuração.
Via Portal
- Navegue até Microsoft Entra ID > Password reset.
- Na aba Properties, observe o estado atual. O valor padrão é None (SSPR desabilitado). Anote este estado.
- Altere Self service password reset enabled para Selected.
- Em Select group, escolha o grupo
grp-engenharia. - Clique em Save.
- Navegue até a aba Authentication methods.
- Em Number of methods required to reset, selecione 1.
- Em Methods available to users, marque Email e Mobile phone.
- Clique em Save.
- Navegue até a aba Registration.
- Confirme que Require users to register when signing in está definido como Yes.
- Defina Number of days before users are asked to re-confirm their authentication information como
180. - Clique em Save.
Via CLI
A configuração de SSPR é feita primariamente via Portal ou Microsoft Graph API. Via CLI com Graph:
# Verificar configuração atual de SSPR
az rest --method get \
--url "https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy" \
--query "{migrationState:policyMigrationState}" -o table
# Obter o ID do grupo grp-engenharia
GRP_ENG_ID=$(az ad group show --group "grp-engenharia" --query id -o tsv)
# Nota: A configuração completa de SSPR via Graph API requer
# chamadas ao endpoint beta/policies. Para o AZ-104, a configuração
# pelo Portal é o método recomendado e mais direto.
echo "Grupo grp-engenharia ID: $GRP_ENG_ID"
echo "Configure SSPR pelo Portal apontando para este grupo."
Validação comportamental: Abra uma janela anônima/privada do navegador e tente fazer login em https://aka.ms/sspr com as credenciais de
ana.silva@{domínio}. Como Ana pertence ao grupogrp-engenharia(habilitado para SSPR), ela será solicitada a registrar métodos de autenticação. Em seguida, tente acessar o SSPR comcarlos.mendes@{domínio}. Como Carlos pertence ao grupogrp-operacoes(não habilitado para SSPR), ele não deve ter acesso ao fluxo de redefinição self-service.
A habilitação seletiva do SSPR permite um rollout controlado. A validação com dois usuários de grupos diferentes confirma que o escopo está correto.
Fase 2 — Controle de Acesso Baseado em Funções (RBAC)
Nesta fase, você atribuirá papéis RBAC internos do Azure aos usuários e grupos criados na Fase 1, em diferentes escopos (Management Group, Subscription, Resource Group). Também interpretará as atribuições resultantes para confirmar o modelo de acesso.
Objetivos cobertos: Manage built-in Azure roles | Assign roles at different scopes | Interpret access assignments
Tarefa 2.1 — Verificar papéis RBAC disponíveis e atribuir papel no escopo de Resource Group
Antes de atribuir papéis, identifique os papéis internos disponíveis e seus escopos. Em seguida, atribua ao grupo grp-engenharia o papel de Contributor no Resource Group rg-contosoagro-lab.
Via Portal
- Navegue até Resource groups > selecione
rg-contosoagro-lab. - Clique em Access control (IAM).
- Clique na aba Roles e examine a lista de papéis disponíveis. Localize Contributor e clique sobre ele para ver a descrição e as permissões.
- Volte à aba Role assignments e observe as atribuições existentes (estado anterior).
- Clique em Add > Add role assignment.
- Em Role, pesquise e selecione Contributor.
- Clique em Next. Em Members, selecione Assign access to = User, group, or service principal.
- Clique em Select members e pesquise
grp-engenharia. Selecione o grupo. - Clique em Next > Review + assign.
- Verifique na aba Role assignments que a nova atribuição aparece.
Via CLI
# Listar papéis internos mais comuns
az role definition list --query "[?contains(roleName,'Contributor') || contains(roleName,'Reader') || contains(roleName,'Owner')].{nome:roleName, id:name}" -o table
# Obter o ID do grupo grp-engenharia
GRP_ENG_ID=$(az ad group show --group "grp-engenharia" --query id -o tsv)
# Verificar atribuições existentes no RG (estado anterior)
az role assignment list --resource-group rg-contosoagro-lab \
--query "[].{principal:principalName, papel:roleDefinitionName, escopo:scope}" -o table
# Atribuir Contributor ao grupo no escopo do Resource Group
az role assignment create \
--assignee "$GRP_ENG_ID" \
--role "Contributor" \
--resource-group rg-contosoagro-lab
# Confirmar a atribuição
az role assignment list --resource-group rg-contosoagro-lab \
--query "[?principalName=='grp-engenharia'].{papel:roleDefinitionName, escopo:scope}" -o table
O grupo grp-engenharia agora possui permissões de Contributor no Resource Group principal, permitindo criar, modificar e excluir recursos, mas sem permissão para gerenciar acesso (IAM).
Tarefa 2.2 — Atribuir papéis em escopos diferentes (Subscription e Resource Group secundário)
Para demonstrar herança de escopo, atribua o papel Reader ao grupo grp-operacoes no nível de Subscription e o papel Contributor ao usuário externo apenas no Resource Group rg-greenfield-dev.
Via Portal
- Navegue até Subscriptions > selecione sua subscription ativa.
- Clique em Access control (IAM) > Add > Add role assignment.
- Selecione o papel Reader.
- Em Members, selecione
grp-operacoes. - Clique em Review + assign.
- Navegue até Resource groups > selecione
rg-greenfield-dev. - Clique em Access control (IAM) > Add > Add role assignment.
- Selecione o papel Contributor.
- Em Members, selecione Consultor GreenField (usuário Guest).
- Clique em Review + assign.
Via CLI
# Obter ID da subscription
SUB_ID=$(az account show --query id -o tsv)
# Obter IDs
GRP_OPS_ID=$(az ad group show --group "grp-operacoes" --query id -o tsv)
GUEST_ID=$(az ad user list --filter "displayName eq 'Consultor GreenField'" \
--query "[0].id" -o tsv)
# Atribuir Reader ao grp-operacoes no escopo da Subscription
az role assignment create \
--assignee "$GRP_OPS_ID" \
--role "Reader" \
--scope "/subscriptions/$SUB_ID"
# Atribuir Contributor ao convidado no escopo do RG secundário
az role assignment create \
--assignee "$GUEST_ID" \
--role "Contributor" \
--resource-group rg-greenfield-dev
Com estas atribuições, o grupo grp-operacoes pode ler todos os recursos da subscription (incluindo ambos os Resource Groups por herança), enquanto o convidado externo só pode contribuir dentro do Resource Group de desenvolvimento.
Tarefa 2.3 — Interpretar atribuições de acesso e identificar acesso efetivo
Agora você verificará as atribuições resultantes para cada identidade, confirmando a herança de escopo e identificando o acesso efetivo de cada principal.
Via Portal
- Navegue até Resource groups >
rg-contosoagro-lab> Access control (IAM). - Clique na aba Check access.
- Pesquise por
carlos.mendese examine as atribuições. Ele deve ter Reader herdado da Subscription (viagrp-operacoes), mesmo sem atribuição direta neste Resource Group. - Pesquise por
ana.silva. Ela deve ter Contributor herdado do grupogrp-engenharia. - Pesquise por
Consultor GreenField. Este usuário não deve ter nenhuma atribuição neste Resource Group. - Navegue até Resource groups >
rg-greenfield-dev> Access control (IAM) > Check access. - Pesquise por
Consultor GreenField. Ele deve ter Contributor diretamente atribuído. - Pesquise por
carlos.mendes. Ele deve ter Reader herdado da Subscription. - Clique na aba Role assignments. Observe a coluna Scope para distinguir atribuições diretas de herdadas.
Via CLI
# Listar todas as atribuições no rg-contosoagro-lab
az role assignment list --resource-group rg-contosoagro-lab \
--include-inherited \
--query "[].{principal:principalName, papel:roleDefinitionName, escopo:scope}" -o table
# Listar todas as atribuições no rg-greenfield-dev
az role assignment list --resource-group rg-greenfield-dev \
--include-inherited \
--query "[].{principal:principalName, papel:roleDefinitionName, escopo:scope}" -o table
# Verificar acesso efetivo de Carlos em rg-contosoagro-lab
# (deve aparecer Reader herdado da subscription)
az role assignment list --all \
--assignee "$CARLOS_ID" \
--query "[].{papel:roleDefinitionName, escopo:scope}" -o table
Cenário adverso: Se o Consultor GreenField aparecer com acesso em
rg-contosoagro-lab, há uma atribuição incorreta. Navegue até o escopo indicado e remova a atribuição indevida. Este é um cenário comum de auditoria em ambientes reais.
A interpretação correta de atribuições RBAC, especialmente a distinção entre atribuições diretas e herdadas, é fundamental para auditorias de acesso e resolução de problemas de permissão.
Fase 3 — Azure Policy, Resource Locks e Tags
Nesta fase, você implementará políticas de governança sobre os Resource Groups criados nas fases anteriores, aplicará bloqueios de proteção e organizará recursos com tags. Os grupos e atribuições de RBAC da Fase 2 serão usados para validar que as políticas interagem corretamente com o modelo de acesso.
Objetivos cobertos: Implement and manage Azure Policy | Configure resource locks | Apply and manage tags on resources
Tarefa 3.1 — Atribuir uma política interna (built-in) ao Resource Group
A Contoso Agro exige que todos os recursos possuam a tag CentroCusto. Você atribuirá a política built-in Require a tag on resources ao Resource Group principal.
Via Portal
- Navegue até Resource groups >
rg-contosoagro-lab> Policies (no menu lateral, em Settings). - Observe que nenhuma política está atribuída atualmente (estado anterior).
- Clique em Assign policy.
- Em Policy definition, clique no botão de seleção e pesquise
Require a tag on resources. Selecione a definição built-in. - Em Assignment name, mantenha o nome padrão ou altere para
Exigir tag CentroCusto. - Em Parameters, preencha Tag Name com
CentroCusto. - Em Non-compliance message, digite
Todos os recursos devem possuir a tag CentroCusto conforme política da Contoso Agro. - Clique em Review + create > Create.
- Aguarde de 5 a 15 minutos para que a política entre em vigor.
Via CLI
# Obter o ID da definição de política built-in
POLICY_DEF_ID=$(az policy definition list \
--query "[?displayName=='Require a tag on resources'].id" -o tsv)
# Obter o ID do Resource Group
RG_ID=$(az group show --name rg-contosoagro-lab --query id -o tsv)
# Verificar políticas atribuídas ao RG (estado anterior)
az policy assignment list --scope "$RG_ID" \
--query "[].{nome:displayName, policy:policyDefinitionId}" -o table
# Atribuir a política
az policy assignment create \
--name "exigir-tag-centro-custo" \
--display-name "Exigir tag CentroCusto" \
--policy "$POLICY_DEF_ID" \
--scope "$RG_ID" \
--params '{"tagName":{"value":"CentroCusto"}}' \
--non-compliance-message "Todos os recursos devem possuir a tag CentroCusto conforme política da Contoso Agro."
A política agora impedirá a criação de qualquer recurso no Resource Group rg-contosoagro-lab que não possua a tag CentroCusto.
Tarefa 3.2 — Validar o efeito da política (cenário de violação e conformidade)
Para confirmar que a política está funcionando, tente criar um recurso sem a tag obrigatória e depois crie o mesmo recurso com a tag.
Via Portal
- Navegue até Storage accounts > Create.
- Selecione Resource group =
rg-contosoagro-lab. - Preencha Storage account name com um nome único (ex:
stcontosoagrotest01). - Selecione Region =
East US 2. - Mantenha todas as outras opções padrão.
- Não adicione nenhuma tag.
- Clique em Review + create > Create.
- Resultado esperado: A criação deve falhar com uma mensagem de não conformidade indicando que a tag
CentroCustoé obrigatória. - Volte à tela de criação. Na aba Tags, adicione:
- Name:
CentroCusto - Value:
TI-001
- Name:
- Clique em Review + create > Create.
- Resultado esperado: A criação deve ser bem-sucedida.
Via CLI
# Tentativa de criação SEM a tag (deve falhar após política entrar em vigor)
az storage account create \
--name "stcontosoagrotest01" \
--resource-group rg-contosoagro-lab \
--location eastus2 \
--sku Standard_LRS 2>&1 || echo "ESPERADO: Falha por violação de política"
# Criação COM a tag obrigatória (deve ter sucesso)
az storage account create \
--name "stcontosoagrotest01" \
--resource-group rg-contosoagro-lab \
--location eastus2 \
--sku Standard_LRS \
--tags CentroCusto=TI-001
# Verificar compliance
az policy state list --resource-group rg-contosoagro-lab \
--query "[].{recurso:resourceId, compliance:complianceState}" -o table
Nota: Se a política ainda não estiver em vigor (pode levar até 30 minutos), o recurso será criado mesmo sem a tag. Neste caso, exclua o recurso, aguarde e repita o teste.
Este teste de violação e conformidade demonstra o efeito Deny da política em tempo real, produzindo um resultado comportamental observável.
Tarefa 3.3 — Configurar Resource Locks
A Contoso Agro precisa proteger o Resource Group de produção contra exclusão acidental. Antes de aplicar o lock, verifique que o Resource Group pode ser excluído (estado desbloqueado) e depois aplique a proteção.
Via Portal
- Navegue até Resource groups >
rg-contosoagro-lab> Locks (menu lateral, em Settings). - Confirme que nenhum lock existe (estado anterior).
- Clique em Add.
- Preencha Lock name com
lock-protecao-producao. - Selecione Lock type = Delete.
- Em Notes, digite
Impedir exclusão acidental do RG de produção. - Clique em OK.
- Agora tente excluir o Resource Group: Navegue até Overview do
rg-contosoagro-lab> clique em Delete resource group. - Digite o nome do Resource Group e clique em Delete.
- Resultado esperado: A exclusão deve falhar com uma mensagem indicando que um lock está ativo.
Via CLI
# Verificar locks existentes (estado anterior: nenhum)
az lock list --resource-group rg-contosoagro-lab -o table
# Criar lock de exclusão
az lock create \
--name "lock-protecao-producao" \
--resource-group rg-contosoagro-lab \
--lock-type CanNotDelete \
--notes "Impedir exclusão acidental do RG de produção"
# Tentar excluir o RG (deve falhar)
az group delete --name rg-contosoagro-lab --yes 2>&1 || echo "ESPERADO: Exclusão bloqueada pelo lock"
# Confirmar que o RG ainda existe
az group show --name rg-contosoagro-lab --query "{nome:name, estado:properties.provisioningState}" -o table
O lock impede a exclusão do Resource Group independentemente das permissões RBAC do usuário. Mesmo um Owner não consegue excluir sem antes remover o lock.
Tarefa 3.4 — Aplicar e gerenciar tags em recursos e Resource Groups
A Contoso Agro padroniza o uso das tags CentroCusto, Ambiente e Projeto em todos os recursos. Aplique tags ao Resource Group e aos recursos filhos, depois use o portal para consultar recursos por tag.
Via Portal
- Navegue até Resource groups >
rg-contosoagro-lab> Tags (menu lateral). - Adicione as seguintes tags:
CentroCusto=TI-001Ambiente=ProducaoProjeto=PlataformaSafras
- Clique em Apply.
- Navegue até o Storage Account criado na Tarefa 3.2 > Tags.
- Verifique que ele já possui a tag
CentroCusto=TI-001(aplicada na criação). - Adicione as tags
Ambiente=ProducaoeProjeto=PlataformaSafras. - Clique em Apply.
- Para consultar recursos por tag, navegue até All resources e utilize o filtro Tag no topo da página. Filtre por
Ambiente=Producaoe confirme que os recursos tagueados aparecem.
Via CLI
# Aplicar tags ao Resource Group
az group update --name rg-contosoagro-lab \
--tags CentroCusto=TI-001 Ambiente=Producao Projeto=PlataformaSafras
# Aplicar tags ao Storage Account (merge com existentes)
az tag update --resource-id $(az storage account show \
--name stcontosoagrotest01 --resource-group rg-contosoagro-lab \
--query id -o tsv) \
--operation merge \
--tags Ambiente=Producao Projeto=PlataformaSafras
# Listar recursos por tag
az resource list --tag Ambiente=Producao \
--query "[].{nome:name, tipo:type, tags:tags}" -o table
# Verificar se algum recurso do RG está sem a tag CentroCusto
az resource list --resource-group rg-contosoagro-lab \
--query "[?tags.CentroCusto==null].{nome:name, tipo:type}" -o table
Cenário adverso: Tags no Resource Group não são herdadas automaticamente pelos recursos filhos. O último comando verifica se existem recursos sem a tag obrigatória, simulando uma auditoria de conformidade manual.
As tags permitem organizar, filtrar e alocar custos. A distinção entre tags de Resource Group e tags de recursos filhos é um conceito crítico para a administração Azure.
Fase 4 — Gestão de Subscriptions, Resource Groups e Management Groups
Nesta fase, você trabalhará com a hierarquia administrativa do Azure: Management Groups, Subscriptions e Resource Groups. Utilizará os Resource Groups e políticas criados nas fases anteriores para demonstrar governança em escala.
Objetivos cobertos: Manage resource groups | Manage subscriptions | Configure management groups
Tarefa 4.1 — Gerenciar propriedades e mover recursos entre Resource Groups
A Contoso Agro decidiu reorganizar o ambiente movendo o Storage Account de teste do Resource Group principal para o Resource Group de desenvolvimento. Antes de mover, verifique as dependências do recurso.
Via Portal
- Navegue até Resource groups >
rg-contosoagro-lab> Overview. - Anote a lista de recursos presentes (estado anterior).
- Selecione o Storage Account
stcontosoagrotest01marcando o checkbox. - Clique em Move > Move to another resource group.
- Selecione Resource group =
rg-greenfield-dev. - Marque a checkbox de confirmação de entendimento.
- Clique em Next para validação. Aguarde a verificação de dependências.
- Clique em Move.
- Aguarde a conclusão da operação (pode levar alguns minutos).
- Navegue até
rg-greenfield-deve confirme que o Storage Account está lá. - Navegue até
rg-contosoagro-labe confirme que o Storage Account não está mais listado.
Via CLI
# Obter o ID do Storage Account
STORAGE_ID=$(az storage account show \
--name stcontosoagrotest01 \
--resource-group rg-contosoagro-lab \
--query id -o tsv)
# Verificar recursos no RG de origem (estado anterior)
az resource list --resource-group rg-contosoagro-lab \
--query "[].{nome:name, tipo:type}" -o table
# Validar se o recurso pode ser movido
az resource invoke-action \
--action validateMoveResources \
--ids "$STORAGE_ID" \
--request-body "{\"targetResourceGroup\":\"/subscriptions/$SUB_ID/resourceGroups/rg-greenfield-dev\"}" 2>&1 || true
# Mover o recurso
az resource move \
--destination-group rg-greenfield-dev \
--ids "$STORAGE_ID"
# Confirmar que o recurso está no RG de destino
az resource list --resource-group rg-greenfield-dev \
--query "[].{nome:name, tipo:type}" -o table
Cenário adverso: A movimentação de recursos pode falhar se o Resource Group de destino possuir uma política que o recurso viola. Se o Storage Account não possuir a tag exigida por uma política no RG de destino, a operação pode ser impedida. Verifique as políticas de ambos os RGs antes de mover.
A movimentação de recursos entre Resource Groups não altera o recurso nem sua região, apenas o agrupamento lógico e o escopo de RBAC/políticas aplicáveis.
Tarefa 4.2 — Gerenciar subscription e analisar configurações
Examine as propriedades da subscription ativa, verifique os provedores de recursos registrados e o escopo das atribuições de políticas herdadas.
Via Portal
- Navegue até Subscriptions > selecione sua subscription ativa.
- Observe as informações de Subscription ID, Offer, Status e Directory.
- No menu lateral, clique em Resource providers.
- Pesquise por
Microsoft.Storagee verifique que o status é Registered. - Pesquise por
Microsoft.PolicyInsightse registre-o se não estiver registrado (clique em Register). - No menu lateral, clique em Policies.
- Observe as políticas atribuídas no escopo da subscription e as herdadas de Management Groups (se houver).
Via CLI
# Exibir propriedades da subscription
az account show --query "{nome:name, id:id, estado:state, oferta:tenantId}" -o table
# Verificar status do provider Microsoft.Storage
az provider show --namespace Microsoft.Storage --query "registrationState" -o tsv
# Registrar provider se necessário
az provider register --namespace Microsoft.PolicyInsights
# Listar policies atribuídas na subscription
az policy assignment list --scope "/subscriptions/$SUB_ID" \
--query "[].{nome:displayName, escopo:scope}" -o table
O gerenciamento de subscriptions inclui garantir que os provedores de recursos necessários estejam registrados e que as políticas aplicadas estejam alinhadas com os requisitos organizacionais.
Tarefa 4.3 — Criar e configurar Management Groups
A Contoso Agro precisa organizar sua hierarquia administrativa criando Management Groups. Você criará um Management Group raiz e um filho, e depois moverá a subscription para dentro da hierarquia.
Via Portal
- Navegue até Management groups no portal Azure.
- Se for a primeira vez usando Management Groups, clique em Start using management groups.
- Clique em Add management group.
- Preencha Management group ID com
mg-contosoagro-roote Display name comContoso Agro Root. - Clique em Submit.
- Clique sobre o Management Group recém-criado e depois em Add management group.
- Preencha Management group ID com
mg-contosoagro-producaoe Display name comContoso Agro Producao. - Clique em Submit.
- No Management Group
mg-contosoagro-producao, clique em Details > Add subscription. - Selecione sua subscription ativa e clique em Save.
- Verifique a hierarquia:
Tenant Root Group>mg-contosoagro-root>mg-contosoagro-producao> [sua subscription].
Via CLI
# Criar Management Group raiz
az account management-group create \
--name "mg-contosoagro-root" \
--display-name "Contoso Agro Root"
# Criar Management Group filho
az account management-group create \
--name "mg-contosoagro-producao" \
--display-name "Contoso Agro Producao" \
--parent "mg-contosoagro-root"
# Mover a subscription para dentro do MG de produção
az account management-group subscription add \
--name "mg-contosoagro-producao" \
--subscription "$SUB_ID"
# Verificar a hierarquia
az account management-group show \
--name "mg-contosoagro-root" \
--expand \
--recurse \
--query "{nome:displayName, filhos:children[].{nome:displayName, subs:children[].displayName}}" -o json
Cenário adverso: Se a subscription já estiver associada a outro Management Group customizado, a operação de movimentação irá transferi-la. Verifique a hierarquia resultante para garantir que a subscription não ficou em um Management Group indesejado. A remoção incorreta pode afetar a herança de políticas e RBAC.
Os Management Groups permitem aplicar políticas e RBAC em escala, afetando todas as subscriptions e recursos abaixo deles na hierarquia.
Fase 5 — Gestão de Custos e Recomendações
Nesta fase, você configurará alertas de custo, orçamentos e analisará as recomendações do Azure Advisor. Os recursos criados nas fases anteriores (Storage Account, Resource Groups) serão usados como alvos das análises de custo.
Objetivos cobertos: Manage costs by using alerts, budgets, and Azure Advisor recommendations
Tarefa 5.1 — Criar um orçamento e configurar alertas de custo
A Contoso Agro precisa monitorar os gastos mensais e receber alertas quando os custos se aproximarem do limite. Antes de criar o orçamento, verifique a análise de custos atual.
Via Portal
- Navegue até Cost Management + Billing > Cost Management > Cost analysis.
- Selecione o escopo da sua subscription.
- Observe o gráfico de custos acumulados. Anote o custo atual do mês (estado anterior).
- Navegue até Budgets no menu lateral.
- Confirme que nenhum orçamento está configurado (estado anterior).
- Clique em Add.
- Preencha os campos:
- Name:
budget-contosoagro-mensal - Reset period:
Monthly - Expiration date: selecione uma data 12 meses à frente.
- Amount:
100(USD ou BRL conforme sua moeda de billing).
- Name:
- Clique em Next.
- Configure alertas:
- Alert condition 1: Type =
Actual, % of budget =50, Action group = (configure um email de alerta para seu endereço). - Alert condition 2: Type =
Actual, % of budget =80. - Alert condition 3: Type =
Forecasted, % of budget =100.
- Alert condition 1: Type =
- Em Alert recipients (email), adicione seu email.
- Clique em Create.
Via CLI
# Verificar budgets existentes (estado anterior)
az consumption budget list --query "[].{nome:name, valor:amount, periodo:timePeriod}" -o table 2>/dev/null || echo "Nenhum budget encontrado"
# Criar budget mensal
az consumption budget create \
--budget-name "budget-contosoagro-mensal" \
--amount 100 \
--time-grain Monthly \
--start-date "2026-04-01" \
--end-date "2027-04-01" \
--resource-group rg-contosoagro-lab \
--notifications '{
"Actual_GreaterThan_50_Percent": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 50,
"contactEmails": ["seu-email@dominio.com"],
"thresholdType": "Actual"
},
"Actual_GreaterThan_80_Percent": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 80,
"contactEmails": ["seu-email@dominio.com"],
"thresholdType": "Actual"
}
}'
O orçamento com múltiplos alertas escalonados permite acompanhar a progressão dos custos antes que ultrapassem o limite definido.
Tarefa 5.2 — Analisar custo por tags e por Resource Group
Utilize a análise de custos para verificar a alocação por centro de custo e por Resource Group, validando que as tags aplicadas na Fase 3 estão produzindo agrupamentos úteis.
Via Portal
- Navegue até Cost Management > Cost analysis.
- No filtro superior, selecione o escopo da subscription.
- Altere o agrupamento (Group by) para Tag > selecione
CentroCusto. - Observe como os custos são distribuídos entre os valores de tag. Recursos sem a tag aparecerão como (untagged).
- Altere o agrupamento para Resource group.
- Compare os custos entre
rg-contosoagro-laberg-greenfield-dev. - Exporte a visualização clicando em Download > Download data as CSV para referência futura.
Via CLI
# Consultar custos do mês atual por Resource Group
az costmanagement query --type ActualCost \
--scope "/subscriptions/$SUB_ID" \
--timeframe MonthToDate \
--dataset-grouping name=ResourceGroup type=Dimension \
--query "rows" -o table 2>/dev/null || echo "Dados de custo podem levar 24-48h para aparecer"
Cenário adverso: Recursos criados recentemente podem levar até 24 a 48 horas para aparecer na análise de custos. Se os dados não aparecerem, verifique novamente após esse período. Recursos sem tags aparecerão como não classificados, dificultando a alocação de custos.
Tarefa 5.3 — Consultar recomendações do Azure Advisor
O Azure Advisor fornece recomendações proativas de custo, segurança, confiabilidade, excelência operacional e desempenho. Consulte as recomendações e identifique oportunidades de otimização.
Via Portal
- Navegue até Advisor na barra de pesquisa do portal.
- Clique na aba Cost.
- Examine as recomendações de custo (se houver). Exemplos comuns incluem: redimensionar VMs subutilizadas, excluir discos órfãos, ou comprar reservas.
- Clique na aba Security e observe as recomendações de segurança.
- Para cada recomendação, clique para ver os detalhes e o Potential yearly savings (economia potencial anual).
- Na aba All recommendations, filtre por Resource Group para ver recomendações específicas dos Resource Groups do lab.
Via CLI
# Listar recomendações do Advisor
az advisor recommendation list \
--query "[].{categoria:category, impacto:impact, descricao:shortDescription.problem}" -o table
# Filtrar recomendações de custo
az advisor recommendation list \
--category Cost \
--query "[].{recurso:resourceMetadata.resourceId, descricao:shortDescription.problem, economia:extendedProperties.savingsAmount}" -o table
Nota: Em ambientes de laboratório recém-criados, o Advisor pode não ter recomendações significativas devido ao baixo uso. Em ambientes de produção, as recomendações de custo são uma ferramenta essencial para otimização contínua.
As recomendações do Advisor complementam os orçamentos e alertas, fornecendo orientações acionáveis para reduzir custos e melhorar a postura geral do ambiente.
Validação Final
Após completar todas as fases, verifique os seguintes critérios para confirmar a execução correta do laboratório:
Critério 1 — Identidades e SSPR: Abra uma janela anônima do navegador e acesse https://aka.ms/sspr com as credenciais de ana.silva@{domínio}. O fluxo de registro de SSPR deve ser apresentado. Repita com carlos.mendes@{domínio} e confirme que o SSPR não está disponível para ele (pois grp-operacoes não está no escopo do SSPR). Verifique em Microsoft Entra ID > Users que existem ao menos dois usuários internos e um usuário Guest.
Critério 2 — RBAC e herança de escopo: Navegue até Resource groups > rg-greenfield-dev > Access control (IAM) > Check access. Pesquise por carlos.mendes e confirme que ele possui Reader herdado da Subscription. Pesquise por Consultor GreenField e confirme que ele possui Contributor atribuído diretamente. Pesquise por ana.silva e confirme que ela não possui atribuição direta neste Resource Group (sua atribuição é apenas em rg-contosoagro-lab).
Critério 3 — Política de tag (validação comportamental): No Resource Group rg-contosoagro-lab, tente criar qualquer recurso (ex: um segundo Storage Account) sem a tag CentroCusto. A criação deve ser negada pelo Azure Policy com mensagem de não conformidade. Adicione a tag e confirme que a criação é bem-sucedida. Este é um teste de comportamento que confirma o efeito Deny da política.
Critério 4 — Resource Lock: Navegue até Resource groups > rg-contosoagro-lab > tente excluir o Resource Group. A exclusão deve falhar com mensagem indicando que um lock do tipo Delete está ativo. Verifique em Locks que o lock lock-protecao-producao está presente.
Critério 5 — Hierarquia de Management Groups: Navegue até Management groups e confirme a seguinte hierarquia: Tenant Root Group > mg-contosoagro-root > mg-contosoagro-producao > [sua subscription]. Verifique que a subscription está corretamente associada ao Management Group de produção.
Cleanup do Ambiente
Siga os passos abaixo na ordem indicada para remover todos os recursos e evitar cobranças desnecessárias.
Via Portal
-
Remover a subscription do Management Group: Navegue até Management groups >
mg-contosoagro-producao> selecione a subscription > clique em Move e mova de volta para o Tenant Root Group. -
Excluir os Management Groups: Navegue até Management groups > selecione
mg-contosoagro-producao> clique em Delete. Repita paramg-contosoagro-root. -
Remover o Resource Lock: Navegue até Resource groups >
rg-contosoagro-lab> Locks > selecionelock-protecao-producao> clique em Delete. -
Remover a atribuição de política: Navegue até Resource groups >
rg-contosoagro-lab> Policies > selecione a atribuiçãoExigir tag CentroCusto> clique em Delete assignment. -
Remover atribuições de RBAC: Navegue até cada escopo (Subscription, Resource Groups) > Access control (IAM) > Role assignments > selecione cada atribuição criada no lab > clique em Remove.
-
Excluir o orçamento: Navegue até Cost Management > Budgets > selecione
budget-contosoagro-mensal> clique em Delete. -
Excluir os Resource Groups: Navegue até Resource groups > selecione
rg-greenfield-dev> Delete resource group > confirme. Repita pararg-contosoagro-lab. -
Remover usuários e grupos: Navegue até Microsoft Entra ID > Users > selecione
Ana Silva,Carlos MendeseConsultor GreenField> clique em Delete. Em Groups > selecionegrp-engenharia,grp-operacoesegrp-greenfield-integracao> clique em Delete. -
Reverter configuração de SSPR: Navegue até Microsoft Entra ID > Password reset > Properties > altere para None > clique em Save.
Via CLI
# 1. Remover subscription do Management Group
az account management-group subscription remove \
--name "mg-contosoagro-producao" \
--subscription "$SUB_ID"
# 2. Excluir Management Groups (filho primeiro)
az account management-group delete --name "mg-contosoagro-producao"
az account management-group delete --name "mg-contosoagro-root"
# 3. Remover o Resource Lock
az lock delete --name "lock-protecao-producao" --resource-group rg-contosoagro-lab
# 4. Remover atribuição de política
az policy assignment delete --name "exigir-tag-centro-custo" \
--scope "$(az group show --name rg-contosoagro-lab --query id -o tsv)"
# 5. Remover atribuições de RBAC
az role assignment delete --assignee "$GRP_ENG_ID" --role "Contributor" \
--resource-group rg-contosoagro-lab
az role assignment delete --assignee "$GRP_OPS_ID" --role "Reader" \
--scope "/subscriptions/$SUB_ID"
az role assignment delete --assignee "$GUEST_ID" --role "Contributor" \
--resource-group rg-greenfield-dev
# 6. Excluir o orçamento
az consumption budget delete --budget-name "budget-contosoagro-mensal"
# 7. Excluir Resource Groups (remove todos os recursos filhos)
az group delete --name rg-greenfield-dev --yes --no-wait
az group delete --name rg-contosoagro-lab --yes --no-wait
# 8. Excluir usuários e grupos
az ad user delete --id "ana.silva@$DOMAIN"
az ad user delete --id "carlos.mendes@$DOMAIN"
az ad user delete --id "$GUEST_ID"
az ad group delete --group "grp-engenharia"
az ad group delete --group "grp-operacoes"
az ad group delete --group "grp-greenfield-integracao"
# 9. Aguardar exclusão dos RGs e confirmar
echo "Aguardando exclusão dos Resource Groups..."
az group wait --name rg-contosoagro-lab --deleted 2>/dev/null
az group wait --name rg-greenfield-dev --deleted 2>/dev/null
echo "Limpeza concluída. Verifique no portal que nenhum recurso residual permanece."
Para confirmar que a limpeza foi concluída, navegue até Resource groups no portal e verifique que rg-contosoagro-lab e rg-greenfield-dev não aparecem mais na lista. Verifique também em Microsoft Entra ID > Users e Groups que os objetos criados foram removidos.