Azure Policy definitions deployIfNotExists effect
Semelhante ao auditIfNotExists
, uma deployIfNotExists
definição de política 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.
Nota
Os modelos aninhados são suportados com deployIfNotExists
o , mas os modelos vinculados não são suportados no momento.
Avaliação de DeployIfNotExists
deployIfNotExists
é executado após um atraso configurável quando um Provedor de Recursos lida com uma assinatura de criação ou atualização ou solicitação de recurso e retorna um código de status de sucesso. Uma implantação de modelo ocorre se não houver recursos relacionados ou se os recursos definidos por existenceCondition
não forem avaliados como verdadeiros. A duração da implementaçã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 correspondem aos recursos são marcadas como não compatíveis, mas nenhuma ação é executada nesse recurso. Os recursos não compatíveis existentes podem ser remediados com uma tarefa de correção.
Propriedades DeployIfNotExists
A details
propriedade do efeito DeployIfNotExists tem todas as subpropriedades que definem os recursos relacionados a serem correspondidos e a implantação do modelo a ser executada.
type
(obrigatório)- Especifica o tipo do recurso relacionado a ser correspondido.
- Se
type
for um tipo de recurso abaixo doif
recurso de condição, a política consultará recursos destetype
dentro do escopo do recurso avaliado. Caso contrário, as consultas de política dentro do mesmo grupo de recursos ou assinatura que o recurso avaliado, dependendo doexistenceScope
.
name
(facultativo)- 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 de condição para
if.field.type
ethen.details.type
correspondem, entãoname
torna-se necessário e deve ser[field('name')]
, ou[field('fullName')]
para um recurso filho.
Nota
type
e name
segmentos 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 abaixo doif
recurso de condição. - O padrão é o
if
grupo de recursos do recurso de condição. - Se uma implantação de modelo for executada, ela será implantada no grupo de recursos desse valor.
existenceScope
(opcional)- Os valores permitidos são Subscription e ResourceGroup.
- Define o escopo de onde buscar o recurso relacionado a ser correspondido.
- Não se aplica se
type
for um recurso que estaria abaixo doif
recurso de condição. - Para ResourceGroup, limitaria ao grupo de recursos em
resourceGroupName
se especificado. SeresourceGroupName
não for especificado, limitará aoif
grupo de recursos do recurso de condição, que é o comportamento padrão. - Para Assinatura, consulta toda a assinatura para o recurso relacionado. O escopo da atribuição deve ser definido como 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 apenas para avaliações que são resultado de uma solicitação de recurso de criação ou atualização.
- Os valores permitidos são
AfterProvisioning
,AfterProvisioningSuccess
,AfterProvisioningFailure
, ou uma duração ISO 8601 entre 0 e 360 minutos. - Os valores AfterProvisioning inspecionam o resultado do provisionamento do recurso que foi avaliado na condição da regra de
if
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). - Especificar um longo atraso de avaliação 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, qualquer recurso relacionado de
type
satisfaz o efeito e não aciona a implantação. - Usa a mesma linguagem que a regra de política para a
if
condição, mas é avaliado em relação a cada recurso relacionado individualmente. - Se qualquer recurso relacionado correspondente for avaliado como verdadeiro, o efeito será satisfeito e não acionará a implantação.
- Pode usar [field()] para verificar a
if
equivalência com valores na condição. - Por exemplo, pode ser usado para validar que o recurso pai (na
if
condição) está no mesmo local do recurso que o recurso relacionado correspondente.
- Se não for especificado, qualquer recurso relacionado de
roleDefinitionIds
(obrigatório)- Essa propriedade deve incluir uma matriz de cadeias de caracteres que correspondam ao ID da função de controle de acesso baseado em função acessível pela assinatura. Para obter mais informações, consulte remediation - configure the policy definition.
deploymentScope
(opcional)- Os valores permitidos são Subscription e ResourceGroup.
- Define o tipo de implantação a ser acionada. Subscrição indica uma implementação ao nível da subscrição e Grupo de Recursos indica uma implementação para um grupo de recursos.
- Uma propriedade location deve ser especificada na Implantação ao usar implantações no nível de assinatura.
- O padrão é ResourceGroup.
deployment
(obrigatório)- Essa propriedade deve incluir a implantação completa do modelo, pois ela seria passada para a
Microsoft.Resources/deployments
API PUT. Para obter mais informações, consulte a API REST de implantações. - Aninhado
Microsoft.Resources/deployments
no modelo deve usar nomes exclusivos para evitar 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 via[concat('NestedDeploymentName-', uniqueString(deployment().name))]
.
Nota
Todas as funções dentro da
deployment
propriedade são avaliadas como componentes do modelo, não da política. A exceção é aparameters
propriedade que passa valores da política para o modelo. Ovalue
nesta seção sob um nome de parâmetro de modelo é usado para executar essa passagem de valor (consulte fullDbName no exemplo DeployIfNotExists).- Essa propriedade deve incluir a implantação completa do modelo, pois ela seria passada para a
Exemplo de DeployIfNotExists
Exemplo: avalia bancos de dados do SQL Server para determinar se transparentDataEncryption
está habilitado. Caso contrário, uma implantação a ser habilitada será executada.
"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óximos passos
- Analise exemplos em Exemplos de Política do Azure.
- Reveja 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 não compatíveis.
- Revise os grupos de gerenciamento do Azure.