Efeito deployIfNotExists das definições do Azure Policy
Semelhante a auditIfNotExists
, uma definição de política deployIfNotExists
executa uma implantação de modelo quando a condição é atendida. As atribuições de política com efeito definido como DeployIfNotExists exigem uma identidade gerenciada para fazer a correção.
Observação
Os modelos aninhados são compatíveis com deployIfNotExists
, mas modelos vinculados atualmente não são compatíveis.
Avaliação de DeployIfNotExists
deployIfNotExists
é executado depois de um atraso configurável, quando um Provedor de Recursos trata uma solicitação de criação ou atualização de uma assinatura ou recurso e retornou um código de status de êxito. Uma implantação de modelo ocorre quando não existem recursos relacionados ou se os recursos definidos por existenceCondition
não são avaliados como verdadeiros. A duração da implantação depende da complexidade dos recursos incluídos no modelo.
Durante um ciclo de avaliação, as definições de política com um efeito DeployIfNotExists que correspondam a recursos são marcadas como não conformes, mas nenhuma ação é realizada no recurso. Os recursos fora de conformidade existentes podem ser corrigidos com uma tarefa de correção.
Propriedades de DeployIfNotExists
A propriedade details
do efeito DeployIfNotExists tem todas as subpropriedades que definem os recursos relacionados a serem correspondidos e a implantação de modelo a ser executada.
type
(obrigatório)- Especifica o tipo do recurso relacionado a ser correspondido.
- Se
type
for um tipo de recurso abaixo do recurso da condiçãoif
, a política consultará recursos dessetype
no escopo do recurso avaliado. Caso contrário, a política consultará no mesmo grupo de recursos ou assinatura do recurso avaliado, dependendo doexistenceScope
.
name
(opcional)- Especifica o nome exato do recurso a ser correspondido e faz com que a política busque um recurso específico em vez de todos os recursos do tipo especificado.
- Quando os valores da condição para
if.field.type
ethen.details.type
corresponderem,name
torna-se necessária e deve ser[field('name')]
, ou[field('fullName')]
para um recurso filho.
Observação
Os segmentos type
e name
podem ser combinados para recuperar genericamente recursos aninhados.
Para recuperar um recurso específico, você pode usar "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
e "name": "parentResourceName/nestedResourceName"
.
Para recuperar uma coleção de recursos aninhados, um caractere curinga ?
pode ser fornecido no lugar do segmento de sobrenome. Por exemplo, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
e "name": "parentResourceName/?"
. Isso pode ser combinado com funções de campo para acessar recursos relacionados ao recurso avaliado, como "name": "[concat(field('name'), '/?')]"
."
resourceGroupName
(opcional)- Permite que a correspondência do recurso relacionado venha de um grupo de recursos diferente.
- Não se aplica se
type
for um recurso que estaria sob o recurso de condiçãoif
. - O padrão é o grupo de recursos do recurso de condição
if
. - Se uma implantação de modelo é executada, ele é implantado no grupo de recursos desse valor.
existenceScope
(opcional)- Os valores permitidos são Assinatura e ResourceGroup.
- Define o escopo de onde buscar o recurso relacionado com o qual corresponder.
- Não se aplica se
type
for um recurso que estaria sob o recurso de condiçãoif
. - Para ResourceGroup, limitaria o grupo de recursos em
resourceGroupName
se especificado. SeresourceGroupName
não for especificado, limitará ao grupo de recursos do recurso condiçãoif
, que é o comportamento padrão. - Para Assinatura, consulta a assinatura inteira para o recurso relacionado. O escopo de atribuição deve ser definido na assinatura ou superior para uma avaliação adequada.
- O padrão é ResourceGroup.
evaluationDelay
(opcional)- Especifica quando a existência dos recursos relacionados deve ser avaliada. O atraso é usado somente para avaliações que são resultado de uma solicitação de criação ou atualização de recurso.
- Os valores permitidos são
AfterProvisioning
,AfterProvisioningSuccess
,AfterProvisioningFailure
ou uma duração ISO 8601 entre 0 e 360 minutos. - Os valores de AfterProvisioning inspecionam o resultado de provisionamento do recurso que foi avaliado na condição
if
da regra de política.AfterProvisioning
é executado após a conclusão do provisionamento, independentemente do resultado. O provisionamento que leva mais de seis horas é tratado como uma falha ao determinar atrasos na avaliação do AfterProvisioning. - O padrão é
PT10M
(10 minutos). - A especificação de um atraso de avaliação longo pode fazer com que o estado de conformidade registrado do recurso não seja atualizado até o próximo gatilho de avaliação.
existenceCondition
(opcional)- Se não for especificado, todos os recursos relacionados de
type
cumprem o efeito e não acionam a implantação. - Usa a mesma linguagem como a regra de política para a condição
if
, mas é avaliada em relação a cada recurso relacionado individualmente. - Se algum recurso relacionado correspondente for avaliado como verdadeiro, o efeito será atendido e não acionará a implantação.
- Pode usar [field()] para verificar a equivalência com valores na condição
if
. - Por exemplo, pode ser usado para validar que o recurso pai (na condição
if
) está no mesmo local que recursos como o recurso relacionado correspondente.
- Se não for especificado, todos os recursos relacionados de
roleDefinitionIds
(obrigatório)- Essa propriedade deve incluir uma matriz de cadeias de caracteres que correspondem à ID de controle de acesso baseado em função que pode ser acessada pela assinatura. Para saber mais, confira correção – configurar a definição de política.
deploymentScope
(opcional)- Os valores permitidos são Assinatura e ResourceGroup.
- Define o tipo de implantação a ser disparada. Subscription indica uma implantação no nível de assinatura, ResourceGroup indica uma implantação em um grupo de recursos.
- Uma propriedade localização deverá ser especificada na Implantação quando usar implantações no nível de assinatura.
- O padrão é ResourceGroup.
deployment
(obrigatório)- Essa propriedade deve incluir a implantação de modelo completo que seria passada para o API PUT de
Microsoft.Resources/deployments
. Para obter mais informações, consulte a API REST de implantações. Microsoft.Resources/deployments
aninhado dentro do modelo deve usar nomes exclusivos para evitar a contenção entre várias avaliações de política. O nome da implantação pai pode ser usado como parte do nome da implantação aninhada por meio de[concat('NestedDeploymentName-', uniqueString(deployment().name))]
.
Observação
Todas as funções dentro da propriedade
deployment
são avaliadas como componentes do modelo, não da política. A exceção é a propriedadeparameters
, que passa os valores da política para o modelo. Ovalue
nesta seção em um nome de parâmetro de modelo é usado para executar essa passagem de valor (consulte fullDbName no exemplo do efeito DeployIfNotExists).- Essa propriedade deve incluir a implantação de modelo completo que seria passada para o API PUT de
Exemplo de DeployIfNotExists
Exemplo: avalia os bancos de dados do SQL Server para determinar se transparentDataEncryption
está habilitado. Se não estiver, uma implantação será executada para habilitá-lo.
"if": {
"field": "type",
"equals": "Microsoft.Sql/servers/databases"
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"name": "current",
"evaluationDelay": "AfterProvisioning",
"roleDefinitionIds": [
"/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
"/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
],
"existenceCondition": {
"field": "Microsoft.Sql/transparentDataEncryption.status",
"equals": "Enabled"
},
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"fullDbName": {
"type": "string"
}
},
"resources": [
{
"name": "[concat(parameters('fullDbName'), '/current')]",
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"apiVersion": "2014-04-01",
"properties": {
"status": "Enabled"
}
}
]
},
"parameters": {
"fullDbName": {
"value": "[field('fullName')]"
}
}
}
}
}
}
Próximas etapas
- Examine os exemplos em amostras do Azure Policy.
- Revise a estrutura de definição do Azure Policy.
- Entenda como criar políticas de forma programática.
- Saiba como obter dados de conformidade.
- Saiba como corrigir recursos fora de conformidade.
- Examine os grupos de gerenciamento do Azure.