Condividi tramite


effetto deployIfNotExists delle definizioni Criteri di Azure

Analogamente a auditIfNotExists, una deployIfNotExists definizione di criteri esegue una distribuzione di modelli quando viene soddisfatta la condizione. Le assegnazioni di criteri con effetto impostate come DeployIfNotExists richiedono un'identità gestita per eseguire la correzione.

Nota

I modelli annidati sono supportati con deployIfNotExists, ma i modelli collegati non sono attualmente supportati.

Valutazione di DeployIfNotExists

deployIfNotExists viene eseguito dopo un ritardo configurabile quando un provider di risorse gestisce una sottoscrizione di creazione o aggiornamento o una richiesta di risorsa e ha restituito un codice di stato di esito positivo. Una distribuzione di modelli si verifica se non sono presenti risorse correlate o se le risorse definite da existenceCondition non restituiscono true. La durata della distribuzione dipende dalla complessità delle risorse incluse nel modello.

Durante un ciclo di valutazione, le definizioni dei criteri con un effetto DeployIfNotExists che corrispondono alle risorse vengono contrassegnate come non conformi, ma non vengono eseguite azioni sulla risorsa stessa. È possibile correggere le risorse non conformi esistenti con un'attività di correzione.

Proprietà di DeployIfNotExists

La details proprietà dell'effetto DeployIfNotExists ha tutte le sottoproprietà che definiscono le risorse correlate da associare e la distribuzione del modello da eseguire.

  • type (obbligatorio)
    • Specifica il tipo della risorsa correlata a cui corrispondere.
    • Se type è un tipo di risorsa sotto la if risorsa condizione, i criteri eseguono query per le risorse di questo type tipo all'interno dell'ambito della risorsa valutata. In caso contrario, le query sui criteri all'interno dello stesso gruppo di risorse o della stessa sottoscrizione della risorsa valutata a seconda di existenceScope.
  • name (facoltativo)
    • Specifica il nome esatto della risorsa a cui corrispondere e fa sì che il criterio recuperi una risorsa specifica invece di tutte le risorse del tipo specificato.
    • Quando i valori della condizione per if.field.type e then.details.type corrispondono, name diventa obbligatorio e devono essere [field('name')]o [field('fullName')] per una risorsa figlio.

Nota

type i segmenti e name possono essere combinati per recuperare in modo generico le risorse annidate.

Per recuperare una risorsa specifica, è possibile usare "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" e "name": "parentResourceName/nestedResourceName".

Per recuperare una raccolta di risorse nidificate, è possibile specificare un carattere ? jolly al posto del segmento del cognome. Ad esempio, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" e "name": "parentResourceName/?". Questa operazione può essere combinata con le funzioni di campo per accedere alle risorse correlate alla risorsa valutata, ad esempio "name": "[concat(field('name'), '/?')]"".

  • resourceGroupName (facoltativo)

    • Consente che la corrispondenza della risorsa correlata provenga da un gruppo di risorse diverso.
    • Non si applica se type è una risorsa che si trova sotto la risorsa della if condizione.
    • Il valore predefinito è il if gruppo di risorse della risorsa condizione.
    • Se viene eseguita una distribuzione di modelli, la distribuzione avviene nel gruppo di risorse di questo valore.
  • existenceScope (facoltativo)

    • I valori consentiti sono Subscription e ResourceGroup.
    • Imposta l'ambito dove recuperare la risorsa correlata a cui corrispondere.
    • Non si applica se type è una risorsa che si trova sotto la risorsa della if condizione.
    • Per ResourceGroup, limitarebbe il gruppo di risorse in se resourceGroupName specificato. Se resourceGroupName non viene specificato, limitare il gruppo di risorse della if risorsa della condizione, ovvero il comportamento predefinito.
    • Per Subscription, esegue una query nell'intera sottoscrizione per la risorsa correlata. L'ambito di assegnazione deve essere impostato in una sottoscrizione o superiore per una valutazione corretta.
    • L'impostazione predefinita è ResourceGroup.
  • evaluationDelay (facoltativo)

    • Specifica quando deve essere valutata l'esistenza delle risorse correlate. Il ritardo viene usato solo per le valutazioni risultanti da una richiesta di risorsa di creazione o aggiornamento.
    • I valori consentiti sono AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailureo una durata ISO 8601 compresa tra 0 e 360 minuti.
    • I valori AfterProvisioning controllano il risultato del provisioning della risorsa valutata nella condizione della regola dei if criteri. AfterProvisioning viene eseguito dopo il completamento del provisioning, indipendentemente dal risultato. Il provisioning che richiede più di sei ore viene considerato come un errore durante la determinazione dei ritardi di valutazione AfterProvisioning .
    • Il valore predefinito è PT10M (10 minuti).
    • Se si specifica un lungo ritardo di valutazione, lo stato di conformità registrato della risorsa potrebbe non essere aggiornato fino al trigger di valutazione successivo.
  • existenceCondition (facoltativo)

    • Se non specificato, qualsiasi risorsa correlata di type soddisfa l'effetto e non attiva la distribuzione.
    • Usa la stessa lingua della regola dei criteri per la if condizione, ma viene valutata in base a ogni risorsa correlata singolarmente.
    • Se qualsiasi risorsa correlata corrispondente restituisce true, l'effetto è soddisfatto e non attiva la distribuzione.
    • Può usare [field()] per verificare l'equivalenza con i valori nella if condizione.
    • Ad esempio, può essere usato per verificare che la risorsa padre (nella if condizione) si trova nella stessa posizione della risorsa correlata corrispondente.
  • roleDefinitionIds (obbligatorio)

    • Questa proprietà deve contenere una matrice di stringhe che corrispondono all'ID ruolo di controllo degli accessi in base al ruolo accessibile dalla sottoscrizione. Per altre informazioni, vedere Correzione: configurare la definizione dei criteri.
  • deploymentScope (facoltativo)

    • I valori consentiti sono Subscription e ResourceGroup.
    • Imposta il tipo di distribuzione da attivare. La sottoscrizione indica una distribuzione a livello di sottoscrizione e ResourceGroup indica una distribuzione in un gruppo di risorse.
    • Una proprietà location deve essere specificata in Deployment quando si usano distribuzioni a livello di sottoscrizione.
    • L'impostazione predefinita è ResourceGroup.
  • deployment (obbligatorio)

    • Questa proprietà deve contenere la distribuzione di modelli completa passata all'API PUT Microsoft.Resources/deployments. Per altre informazioni, vedere l'API REST per le distribuzioni.
    • Annidati Microsoft.Resources/deployments all'interno del modello devono usare nomi univoci per evitare conflitti tra più valutazioni dei criteri. Il nome della distribuzione padre può essere usato come parte del nome della distribuzione annidata tramite [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Nota

    Tutte le funzioni all'interno della deployment proprietà vengono valutate come componenti del modello, non come criteri. L'eccezione è la parameters proprietà che passa i valori dai criteri al modello. In value questa sezione sotto un nome di parametro modello viene usato per eseguire il passaggio di questo valore (vedere fullDbName nell'esempio DeployIfNotExists).

Esempio di DeployIfNotExists

Esempio: valuta i database di SQL Server per determinare se transparentDataEncryption è abilitato. In caso contrario, viene eseguita una distribuzione per abilitarlo.

"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')]"
          }
        }
      }
    }
  }
}

Passaggi successivi