Estratégias Avançadas para o Azure Policy: Definições Personalizadas e Boas Práticas de Governança
O Azure Policy é uma ferramenta essencial no Microsoft Azure, projetada para auxiliar as organizações a manter a conformidade e a segurança de seus recursos na nuvem. Este guia aborda técnicas avançadas para a criação de políticas personalizadas e a aplicação de boas práticas, com o objetivo de otimizar a governança de recursos e fortalecer a postura de segurança.
Estrutura Fundamental de uma Política Azure
Cada política no Azure é composta por três elementos primários: a Regra da Política (Policy Rule), os Parâmetros (Parameters) e o Efeito (Effect). Para ilustrar, considere a esrtutura JSON de uma política típica:
{
"properties": {
"displayName": "Auditoria de Contas de Armazenamento por Nível de Acesso",
"policyType": "Custom",
"mode": "Indexed",
"description": "Esta política verifica se as contas de armazenamento estão utilizando um nível de acesso aprovado, como Hot ou Cool.",
"parameters": {
"nivelAcessoPermitido": {
"type": "String",
"metadata": {
"displayName": "Nível de Acesso Esperado",
"description": "Selecione o nível de acesso que as contas de armazenamento devem usar."
},
"allowedValues": ["Hot", "Cool"],
"defaultValue": "Hot"
},
"efeitoPolitica": {
"type": "String",
"metadata": {
"displayName": "Efeito da Política",
"description": "Define a ação a ser tomada quando a política for violada."
},
"allowedValues": ["Audit", "Deny", "Disabled"],
"defaultValue": "Audit"
}
},
"policyRule": {
"if": {
"allOf": [
{ "field": "type", "equals": "Microsoft.Storage/storageAccounts" },
{ "field": "Microsoft.Storage/storageAccounts/accessTier", "notEquals": "[parameters('nivelAcessoPermitido')]" }
]
},
"then": { "effect": "[parameters('efeitoPolitica')]" }
}
}
}
No exemplo acima, a seção policyRule define a lógica. A condição if especifica quando a política deve ser acionada, e a seção then, através do effect, determina a ação a ser executada (como Audit para auditoria, Deny para bloqueio ou Modify para correção).
Explorando os Pirncipais Efeitos de Política
1. Audit (Auditoria)
A opção Audit é a mais segura para começar. Ela não impede a criação de recursos não conformes, mas registra as violações. É ideal para avaliar o impacto potencial de uma política antes de impor restrições mais severas:
"effect": "Audit"
2. Deny (Bloqueio)
O efeito Deny impõe um controle rigoroso, impedindo a criação ou atualização de recursos que não estejam em conformidade. É recomendado para requisitos críticos de segurança:
"effect": "Deny"
3. Modify (Modificação)
O Modify permite que as políticas corrijam automaticamente as configurações não conformes, como garantir que o tráfego HTTPS seja forçado para contas de armazenamento ou adicionar tags ausentes:
{
"type": "Modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/17d1049b-9a84-46cb-834c-87d7b1d620e0"
],
"operations": [
{
"operation": "addOrReplace",
"field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
"value": true
}
]
}
}
O roleDefinitionIds especifica as permissões necessárias para que a política realize a modificação.
Processo de Desenvolvimento de Políticas Personalizadas
1. Definição Clara do Objetivo
Comece identificando o problema que a política visa resolver. Exemplos incluem:
- Restringir a implantação de recursos a regiões geográficas específicas.
- Garantir que a criptografia de dados esteja ativada para todos os serviços de armazenamento.
- Proibir a criação de máquinas virtuais com endereços IP públicos diretamente anexados.
2. Elaboração da Regra de Política
Escreva a lógica condicional usando a linguagem JSON do Azure Policy. É aconselhável consultar a vasta biblioteca de políticas internas do Azure ou exemplos disponíveis para inspiração e melhores práticas de codificação.
3. Teste e Validação
Após a criação, teste a política rigorosamente:
- Implante a definição da política usando a CLI do Azure (
az policy definition create) ou o portal. - Atribua a política a um escopo relevante (grupo de gerenciamento, assinatura ou grupo de recursos).
- Monitore os resultados na seção "Conformidade" do Azure Policy no portal, observando os recursos que foram sinalizados ou modificados.
5 Boas Práticas Essenciais para Azure Policy
1. Parametrização Robusta das Definições
Utilizar parâmetros torna as políticas mais flexíveis e reutilizáveis em diferentes ambientes, reduzindo a necessidade de criar múltiplas definições para variações semelhantes.
{
"parameters": {
"skuNamesPermitidosVM": {
"type": "Array",
"metadata": {
"displayName": "SKUs de Máquina Virtual Permitidos",
"description": "Lista de SKUs de máquina virtual que podem ser implantados."
},
"defaultValue": ["Standard_D2s_v3", "Standard_B2ms"]
},
"efeito": {
"type": "String",
"metadata": { "displayName": "Efeito" },
"allowedValues": ["Deny", "Audit", "Disabled"],
"defaultValue": "Deny"
}
},
"policyRule": {
"if": {
"allOf": [
{ "field": "type", "equals": "Microsoft.Compute/virtualMachines" },
{ "not": { "field": "Microsoft.Compute/virtualMachines/sku.name", "in": "[parameters('skuNamesPermitidosVM')]" } }
]
},
"then": { "effect": "[parameters('efeito')]" }
}
}
2. Aplicação de Operadores Lógicos Complexos
Combine allOf, anyOf e not para construir regras que se adequem a cenários complexos, verificando múltiplos critérios simultaneamente.
"if": {
"allOf": [
{ "field": "type", "equals": "Microsoft.Storage/storageAccounts" },
{ "not": { "field": "tags['Projeto']", "exists": true } },
{ "anyOf": [
{ "field": "Microsoft.Storage/storageAccounts/encryption.services.blob.enabled", "equals": false },
{ "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess", "equals": true }
]
}
]
},
"then": { "effect": "Audit" }
3. Preferência por Políticas Nativas (Built-in)
Sempre que possível, utilize as políticas internas fornecidas pela Microsoft. Elas são amplamente testadas e alinhadas com as melhores práticas de segurança e conformidade, servindo também como base para políticas personalizadas.
4. Organização com Iniciativas de Política
Agrupe políticas relacionadas em uma iniciativa (anteriormente conhecida como "conjunto de políticas") para simplificar a atribuição e o gerenciamento em larga escala.
{
"properties": {
"displayName": "Conformidade Essencial de Rede",
"description": "Conjunto de políticas para garantir a segurança da rede na sua assinatura.",
"policyDefinitions": [
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/83a86a60-8356-42d4-8332-cf777e4e8913",
"policyDefinitionReferenceId": "denyPublicIp",
"parameters": {
"effect": { "value": "Deny" }
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/e427187e-e141-4122-863a-23d2011b714b",
"policyDefinitionReferenceId": "auditNsgOnSubnet",
"parameters": {
"effect": { "value": "Audit" }
}
}
]
}
}
5. Análise e Atualização Contínua
O ambiente de nuvem é dinâmico. Revise regularmente suas políticas para garantir que permaneçam relevantes, removendo as obsoletas, ajustando parâmetros e incorporando novas exigências de segurança e conformidade.
Recursos para Início Rápido
Para aprofundar seus conhecimentos e prática com o Azure Policy, explore:
- Repositórios de Amostras Oficiais: Contêm exemplos completos para diversos cenários, como gerenciamento automatizado de tags ou auditoria de extensões de máquinas virtuais.
- Padrões de Política: Consulte guias de padrões que demonstram o uso de operadores lógicos e configurações avançadas de parâmetros.
- Integração com Kubernetes: Explore definições de política específicas para ambientes de contêiner.