Definice azure Policy nasazují efektIfNotExists

auditIfNotExistsdeployIfNotExists Podobně jako definice zásady spustí nasazení šablony při splnění podmínky. Přiřazení zásad s nastavenými efekty jako DeployIfNotExists vyžadují spravovanou identitu k nápravě.

Poznámka:

Vnořené šablony se podporují deployIfNotExists, ale propojené šablony se v současné době nepodporují.

Vyhodnocení DeployIfNotExists

deployIfNotExists spustí se po konfigurovatelné prodlevě, když poskytovatel prostředků zpracuje požadavek na vytvoření nebo aktualizaci předplatného nebo prostředku a vrátí stavový kód úspěchu. Nasazení šablony nastane, pokud neexistují žádné související prostředky nebo pokud se prostředky definované existenceCondition nehodnotí jako true. Doba trvání nasazení závisí na složitosti prostředků zahrnutých v šabloně.

Během zkušebního cyklu se definice zásad s efektem DeployIfNotExists, který odpovídá prostředkům, označí jako nevyhovující, ale u tohoto prostředku se neprojeví žádná akce. Stávající nekompatibilní prostředky je možné napravit úlohou nápravy.

DeployIfNotExists – vlastnosti

Vlastnost details DeployIfNotExists efekt má všechny dílčí podmínky, které definují související prostředky, které se mají shodovat, a nasazení šablony, které se má provést.

  • type (povinné)
    • Určuje typ souvisejícího prostředku, který se má shodovat.
    • Pokud type je typ prostředku pod prostředkem if podmínky, zásady se dotazují na prostředky tohoto type prostředku v rámci rozsahu vyhodnoceného prostředku. V opačném případě se zásady dotazují ve stejné skupině prostředků nebo předplatném jako vyhodnocený prostředek v závislosti na hodnotě existenceScope.
  • name (volitelné)
    • Určuje přesný název prostředku, který se má shodovat, a způsobí, že zásada místo všech prostředků zadaného typu načte jeden konkrétní prostředek.
    • Pokud jsou hodnoty podmínek pro if.field.type a then.details.type shodné, name pak se vyžadují a musí být [field('name')]nebo [field('fullName')] pro podřízený prostředek.

Poznámka:

type a name segmenty lze zkombinovat za účelem obecného načtení vnořených prostředků.

K načtení konkrétního prostředku můžete použít "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" a "name": "parentResourceName/nestedResourceName".

Pokud chcete načíst kolekci vnořených prostředků, můžete místo segmentu příjmení zadat zástupný znak ? . Příklad: "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" a "name": "parentResourceName/?". To lze kombinovat s funkcemi polí pro přístup k prostředkům souvisejícím s vyhodnoceným prostředkem, například "name": "[concat(field('name'), '/?')]""

  • resourceGroupName (volitelné)

    • Umožňuje porovnávání souvisejících prostředků pocházet z jiné skupiny prostředků.
    • Nevztahuje se, pokud type se jedná o prostředek, který by byl pod prostředkem if podmínky.
    • Výchozí hodnota je if skupina prostředků podmínky.
    • Pokud se spustí nasazení šablony, nasadí se ve skupině prostředků této hodnoty.
  • existenceScope (volitelné)

    • Povolené hodnoty jsou Subscription a ResourceGroup.
    • Nastaví obor, ze kterého se má načíst související prostředek, ze kterého se má shodovat.
    • Nevztahuje se, pokud type se jedná o prostředek, který by byl pod prostředkem if podmínky.
    • V případě skupiny prostředků by se v případě zadání omezila na skupinu resourceGroupName prostředků. Pokud resourceGroupName není zadáno, omezí se to na if skupinu prostředků podmínky, což je výchozí chování.
    • V případě předplatného se dotazuje na celé předplatné souvisejícího prostředku. Pro správné vyhodnocení by měl být obor přiřazení nastavený na předplatné nebo vyšší.
    • Výchozí hodnota je ResourceGroup.
  • evaluationDelay (volitelné)

    • Určuje, kdy se má vyhodnotit existence souvisejících prostředků. Zpoždění se používá pouze pro vyhodnocení, která jsou výsledkem požadavku na vytvoření nebo aktualizaci prostředku.
    • Povolené hodnoty jsou AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailurenebo ISO 8601 doba trvání mezi 0 a 360 minut.
    • Hodnoty AfterProvisioning kontrolují výsledek zřizování prostředku, který byl vyhodnocen v podmínce pravidla if zásad. AfterProvisioning po dokončení zřizování bez ohledu na výsledek. Zřizování, které trvá déle než šest hodin, se při určování zpoždění vyhodnocení po zřízení považuje za selhání.
    • Výchozí hodnota je PT10M (10 minut).
    • Určení dlouhé prodlevy vyhodnocení může způsobit, že se zaznamenaný stav dodržování předpisů prostředku neaktualizuje, dokud se neaktualizuje další aktivační událost vyhodnocení.
  • existenceCondition (volitelné)

    • Pokud není zadaný, jakýkoli související prostředek type splňuje účinek a neaktivuje nasazení.
    • Používá stejný jazyk jako pravidlo zásad pro podmínku if , ale vyhodnocuje se vůči jednotlivým souvisejícím prostředkům.
    • Pokud se některý z odpovídajících souvisejících prostředků vyhodnotí jako pravdivý, efekt se splní a neaktivuje nasazení.
    • Pomocí funkce [field()] můžete zkontrolovat ekvivalenci s hodnotami v podmínce if .
    • Můžete například použít k ověření, že nadřazený prostředek (v if podmínce) je ve stejném umístění prostředku jako odpovídající související prostředek.
  • roleDefinitionIds (povinné)

    • Tato vlastnost musí obsahovat pole řetězců, které odpovídají ID role řízení přístupu na základě role přístupné pro předplatné. Další informace najdete v tématu náprava – konfigurace definice zásady.
  • deploymentScope (volitelné)

    • Povolené hodnoty jsou Subscription a ResourceGroup.
    • Nastaví typ nasazení, který se má aktivovat. Předplatné označuje nasazení na úrovni předplatného a skupina prostředků označuje nasazení do skupiny prostředků.
    • Vlastnost umístění musí být zadána v nasazení při použití nasazení na úrovni předplatného.
    • Výchozí hodnota je ResourceGroup.
  • deployment (povinné)

    • Tato vlastnost by měla obsahovat úplné nasazení šablony, protože by bylo předáno Microsoft.Resources/deployments rozhraní PUT API. Další informace najdete v rozhraní REST API pro nasazení.
    • Vnořené Microsoft.Resources/deployments do šablony by měly používat jedinečné názvy, aby nedocházelo k kolizím mezi více vyhodnoceními zásad. Název nadřazeného nasazení lze použít jako součást vnořeného názvu nasazení prostřednictvím [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Poznámka:

    Všechny funkce uvnitř deployment vlastnosti se vyhodnocují jako součásti šablony, ne jako zásady. Výjimkou je parameters vlastnost, která předává hodnoty ze zásady do šablony. V value této části pod názvem parametru šablony se používá k předání této hodnoty (viz fullDbName v příkladu DeployIfNotExists).

Příklad DeployIfNotExists

Příklad: Vyhodnotí databáze SQL Serveru a určí, jestli transparentDataEncryption je povolená. Pokud ne, spustí se nasazení, které se povolí.

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

Další kroky