Padrão de política do Azure: implantar recursos
O efeito deployIfNotExists torna possível implantar um modelo do Azure Resource Manager (modelo ARM) ao criar ou atualizar um recurso que não é compatível. Essa abordagem pode ser preferível ao uso do efeito negar , pois permite que os recursos continuem a ser criados, mas garante que as alterações sejam feitas para torná-los compatíveis.
Exemplo de definição de política
Esta definição de política usa o operador de campo para avaliar o type
recurso criado ou atualizado. Quando esse recurso é um Microsoft.Network/virtualNetworks, a política procura um observador de rede no local do recurso novo ou atualizado. Se um observador de rede correspondente não for localizado, o modelo ARM será implantado para criar o recurso ausente.
Nota
Esta política requer que você tenha um grupo de recursos chamado NetworkWatcherRG em sua assinatura. O Azure cria o grupo de recursos NetworkWatcherRG quando você habilita o Inspetor de Rede em uma região.
{
"properties": {
"displayName": "Deploy network watcher when virtual networks are created",
"mode": "Indexed",
"description": "This policy creates a network watcher resource in regions with virtual networks. You need to ensure existence of a resource group named networkWatcherRG, which will be used to deploy network watcher instances.",
"metadata": {
"category": "Network"
},
"parameters": {},
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.Network/virtualNetworks"
},
"then": {
"effect": "DeployIfNotExists",
"details": {
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
}
},
"resources": [{
"apiVersion": "2016-09-01",
"type": "Microsoft.Network/networkWatchers",
"name": "[concat('networkWacher_', parameters('location'))]",
"location": "[parameters('location')]"
}]
},
"parameters": {
"location": {
"value": "[field('location')]"
}
}
}
}
}
}
}
}
}
Explicação
existênciaCondição
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
O bloco properties.policyRule.then.details informa ao Azure Policy o que procurar relacionado ao recurso criado ou atualizado no bloco properties.policyRule.if . Neste exemplo, um inspetor de rede no grupo de recursos networkWatcherRG deve existir com campo location
igual ao local do recurso novo ou atualizado. O uso da field()
função permite que existenceCondition acesse propriedades no recurso novo ou atualizado, especificamente a location
propriedade.
roleDefinitionIds
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
A propriedade da matriz roleDefinitionIds no bloco properties.policyRule.then.details informa à definição de política quais direitos a identidade gerenciada precisa para implantar o modelo do Gerenciador de Recursos incluído. Essa propriedade deve ser definida para incluir funções que tenham as permissões necessárias para a implantação do modelo, mas devem usar o conceito de 'princípio de menor privilégio' e ter apenas as operações necessárias e nada mais.
Modelo de implementação
A parte de implantação da definição de política tem um bloco de propriedades que define os três componentes principais:
mode - Esta propriedade define o modo de implantação do modelo.
template - Esta propriedade inclui o próprio modelo. Neste exemplo, o parâmetro location template define o local do novo recurso do inspetor de rede.
"template": { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string" } }, "resources": [{ "apiVersion": "2016-09-01", "type": "Microsoft.Network/networkWatchers", "name": "[concat('networkWacher_', parameters('location'))]", "location": "[parameters('location')]" }] },
parameters - Esta propriedade define parâmetros que são fornecidos ao modelo. Os nomes dos parâmetros devem corresponder ao que estão definidos no modelo. Neste exemplo, o parâmetro é nomeado local para corresponder. O valor de location usa a
field()
função novamente para obter o valor do recurso avaliado, que é a rede virtual no bloco policyRule.if ."parameters": { "location": { "value": "[field('location')]" } }
Próximos passos
- Analise outros padrões e definições incorporadas.
- Reveja a estrutura de definição do Azure Policy.
- Veja Compreender os efeitos do Policy.