Partilhar via


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 deployIfNotExistso , 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 do if recurso de condição, a política consultará recursos deste type 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 do existenceScope.
  • 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 e then.details.type correspondem, então name 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 do if 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 do if recurso de condição.
    • Para ResourceGroup, limitaria ao grupo de recursos em resourceGroupName se especificado. Se resourceGroupName não for especificado, limitará ao if 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.
  • 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 é a parameters propriedade que passa valores da política para o modelo. O value nesta seção sob um nome de parâmetro de modelo é usado para executar essa passagem de valor (consulte fullDbName no exemplo DeployIfNotExists).

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