Condividi tramite


Effetto deployIfNotExists delle definizioni dei 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.

Annotazioni

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

Valutazione 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 viene eseguita alcuna azione su tale risorsa. È possibile correggere le risorse esistenti non conformi 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 da trovare.
    • Se type è un tipo di risorsa sotto la risorsa di condizione if, la politica ricerca le risorse di questo tipo type nell'ambito della risorsa valutata. In alternativa, le query dei criteri all'interno dello stesso gruppo di risorse o sottoscrizione della risorsa valutata si basano su existenceScope.
  • name (facoltativo)
    • Specifica il nome esatto della risorsa da trovare e fa in modo che il criterio recuperi una risorsa specifica anziché 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.

Annotazioni

type e name i segmenti 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 la corrispondenza della risorsa correlata proveniente da un diverso gruppo di risorse.
    • Non si applica se type è una risorsa che si trova sotto la risorsa della if condizione.
    • L'impostazione predefinita è il gruppo di risorse della risorsa della condizione if.
    • Se una distribuzione di modelli viene eseguita, viene distribuita nel gruppo di risorse associato a 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, si limiterebbe al gruppo di risorse in resourceGroupName se specificato. Se resourceGroupName non viene specificato, limitare il gruppo di risorse della risorsa if della condizione, ovvero il comportamento predefinito.
    • Per Sottoscrizione, interroga l'intera sottoscrizione per la risorsa associata. L'ambito di assegnazione deve essere impostato a livello di sottoscrizione o superiore per una valutazione corretta.
    • Il valore predefinito è 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 ispezionano il risultato del provisioning della risorsa che è stata valutata nella condizione if della regola del criterio. AfterProvisioning viene eseguito al termine del provisioning, indipendentemente dal risultato. Il provisioning che richiede più di sei ore è considerato un errore nella 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 lo stesso linguaggio della regola dei criteri per la condizione if, ma viene valutato singolarmente rispetto a ogni risorsa correlata.
    • 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 nella distribuzione quando si usano distribuzioni a livello di sottoscrizione.
    • Il valore predefinito è ResourceGroup.
  • deployment (obbligatorio)

    • Questa proprietà deve includere la distribuzione completa del modello perché verrebbe passata all'API Microsoft.Resources/deployments PUT. Per altre informazioni, vedere l'API REST delle distribuzioni.
    • Elementi Microsoft.Resources/deployments annidati nel modello devono usare nomi univoci per evitare conflitti tra più valutazioni delle policy. Il nome della distribuzione padre può essere usato come parte del nome della distribuzione annidata tramite [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Annotazioni

    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 questa sezione, il value sotto il nome del parametro del modello viene usato per eseguire il passaggio di questo valore (vedere fullDbName nell'esempio DeployIfNotExists).

Esempio DeployIfNotExists

Esempio: valuta i database di SQL Server per determinare se transparentDataEncryption è abilitato. Se non lo è, viene eseguita una distribuzione per abilitare.

"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