Partilhar via


Definições de Policiais do Azure efeito deployIfNotExists

Semelhante ao auditIfNotExists, uma definição de política deployIfNotExists executa um modelo de implantação quando a condição é atendida. As atribuições de política com efeito definido como DeployIfNotExists exigem uma identidade gerida para fazer a correção.

Observação

Modelos aninhados são suportados com deployIfNotExists, mas 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 solicitação de criação ou atualização de assinatura ou 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 propriedade details 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 recurso de condição if, a política consultará recursos desse 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 corresponderem, name se torna necessário 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 carácter curinga ? pode ser fornecido no lugar do segmento do nome final. 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 associação do recurso relacionado seja proveniente de um grupo de recursos diferente.
    • Não se aplica se type for um recurso que estaria abaixo do recurso de condição if.
    • O padrão é o grupo de recursos do recurso de condição if.
    • Se uma implantação de modelo for executada, será implantada no grupo de recursos associado a esse 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 recurso de condição if.
    • Para ResourceGroup, limitar-se-ia ao grupo de recursos em resourceGroupName se especificado. Se resourceGroupName não for especificado, limitará ao grupo de recursos do recurso de condição if, que é o comportamento padrão.
    • Para Subscrição, consulta toda a subscrição para o recurso associado. O escopo da atribuição deve ser definido a nível de 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, AfterProvisioningFailureou 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 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 considerar AfterProvisioning atrasos de avaliação.
    • O padrão é PT10M (10 minutos).
    • Especificar um longo atraso de avaliação pode fazer com que o estado de conformidade registado do recurso não seja atualizado até ao próximo acionador de avaliação.
  • existenceCondition (opcional)

    • Se não for especificado, qualquer recurso relacionado do type satisfaz o efeito e não aciona a implantação.
    • Usa a mesma linguagem que a regra de política para a condição if, mas avalia cada recurso relacionado de forma individual.
    • Se algum recurso relacionado correspondente for considerado verdadeiro, o efeito é satisfeito e não desencadeia 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, estando na condição if, está na mesma localização 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 correção - configurar a definição de política.
  • deploymentScope (opcional)

    • Os valores permitidos são Subscription e ResourceGroup.
    • Configura o tipo de implantação a ser ativada. de Assinatura indica uma implantação de no nível de assinatura e ResourceGroup indica uma implantação em um grupo de recursos.
    • Uma propriedade de localização deve ser especificada no de Implantação ao usar implantação ao nível de subscrição.
    • O padrão é ResourceGroup.
  • deployment (obrigatório)

    • Essa propriedade deve incluir a implantação completa do modelo, pois ela seria passada para a API PUT do Microsoft.Resources/deployments. Para obter mais informações, consulte a REST API de Deployments .
    • Os Microsoft.Resources/deployments aninhados no template devem usar nomes exclusivos para evitar conflitos durante várias avaliações de políticas. 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 propriedade parameters 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, será executada uma implantação para ser habilitada.

"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