Azure Policy na Landing Zone — governança, iniciativas ALZ e remediação
1) Visão geral
Azure Policy permite aplicar regras de governança que previnem, auditam e corrigem desvios de configuração em escala. Em uma Landing Zone, você combina políticas em iniciativas e as atribui no nível certo (Management Group, Assinatura ou Resource Group) para padronizar tagging, regiões permitidas, SKUs, diagnósticos, segurança e guardrails de rede.
2) Hierarquia de gerenciamento
Organize seus Management Groups por ambientes (Plataforma, Corp, Online, Sandbox) e atribua políticas nesses níveis. Assim, as assinaturas herdam as regras. Regras específicas podem ser aplicadas diretamente a Resource Groups/assinaturas quando necessário.
3) Tipos de efeitos: Deny, Audit, AuditIfNotExists, DeployIfNotExists
- Deny: bloqueia criação/atualização fora do padrão (ex.: regiões não permitidas).
- Audit/AuditIfNotExists: não bloqueia, mas sinaliza desvio.
- DeployIfNotExists (DINE): cria/ajusta recursos auxiliares quando um alvo não atende ao padrão (ex.: habilitar diagnósticos).
// Trecho de exemplo de DINE para habilitar diagnósticos
{
"policyRule": {
"if": { "field": "type", "equals": "Microsoft.Storage/storageAccounts" },
"then": {
"effect": "DeployIfNotExists",
"details": {
"type": "Microsoft.Insights/diagnosticSettings",
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6" // Monitoring Contributor
],
"deployment": {
"properties": {
"mode": "incremental",
"template": { "resources": [ /* ... */ ] },
"parameters": {}
}
}
}
}
}
}
4) Iniciativas do Azure Landing Zone (ALZ)
O ALZ fornece conjuntos de políticas prontos (iniciativas) para acelerar a governança: Resource Consistency, Security Baseline, Identity, Networking, Management e Tagging. Você pode atribuí-las por Management Group e parametrizar, por exemplo, allowed locations, required tags e destino de logs (Log Analytics).
5) Atribuição pelo Portal (passo a passo)
- Abra Policy → Definitions para explorar políticas e iniciativas (built‑in e custom).
- Vá em Assignments → Assign policy/initiative.
- Selecione o Scope (Management Group/Subscription/Resource Group).
- Escolha a Definition (ex.: iniciativa ALZ para Resource Consistency).
- Configure Parameters (tags requeridas, locations, workspaces de diagnóstico).
- (Opcional) Adicione Exclusions (RGs específicos).
- Conclua e aguarde a avaliação (normalmente alguns minutos).
6) Atribuição via Azure CLI
# Exemplo: atribuir iniciativa (policySet) em um Management Group
MG=alz-platform
DEF_ID="/providers/Microsoft.Authorization/policySetDefinitions/YourInitiativeId" # substitua
ASSIGN_NAME=alz-resource-consistency
az policy assignment create \
--name $ASSIGN_NAME \
--display-name "ALZ - Resource Consistency" \
--scope "/providers/Microsoft.Management/managementGroups/$MG" \
--policy-set-definition $DEF_ID \
--params @params.json
# Iniciar tarefa de remediação para uma policy com DINE/AuditIfNotExists
az policy remediation create \
--name remediate-diag \
--policy-assignment $ASSIGN_NAME \
--scope "/providers/Microsoft.Management/managementGroups/$MG"
7) Atribuição via Bicep (initiative + parâmetros)
// assignment-alz.bicep
@description('ID completo da initiative (policySetDefinition)')
param initiativeId string
@description('Scope alvo (ex.: /providers/Microsoft.Management/managementGroups/alz-platform)')
param scope string
@description('Parâmetros da initiative')
param initiativeParams object
resource assignment 'Microsoft.Authorization/policyAssignments@2021-06-01' = {
name: 'alz-resource-consistency'
scope: scope
properties: {
displayName: 'ALZ - Resource Consistency'
policyDefinitionId: initiativeId
parameters: initiativeParams
enforcementMode: 'Default' // ou 'DoNotEnforce' para fase de descoberta
}
}
// Exemplo de parâmetros (params.json)
/*
{
"allowedLocations": { "value": [ "brazilsouth", "southcentralus" ] },
"tagName": { "value": "owner" },
"tagValue": { "value": "bluecloud" },
"logAnalyticsWorkspaceId": { "value": "/subscriptions//resourceGroups/rg-ops/providers/Microsoft.OperationalInsights/workspaces/la-ops" }
}
*/
8) Remediação e tarefas
Políticas com DINE e AuditIfNotExists podem criar Remediation Tasks para corrigir recursos existentes. Garanta que a identidade gerenciada usada na atribuição tenha os role assignments necessários (ex.: Resource Policy Contributor, Monitoring Contributor no escopo certo).
9) Exemptions (isenções)
Use Exemptions para exceções justificadas e temporárias. Defina uma data de expiração e um motivo (waiver ou mitigated) para manter rastreabilidade.
10) Medindo compliance
Acompanhe Compliance por escopo, iniciativa e recurso. Use filtros por effect e exporte para Log Analytics/Workbooks para relatórios executivos. Tarefas de remediação bem-sucedidas aumentam o percentual de conformidade com o tempo.
11) Boas práticas
- Teste em Management Groups de não produção com DoNotEnforce antes de negar em produção.
- Mantenha parâmetros centralizados e versionados (Template Specs ou repositório IaC).
- Evite deny amplo no início. Comece com audit, meça impacto, evolua para deny.
- Combine com RBAC, Blueprints/ALZ Accelerator e pipelines de CI/CD (GitOps).
