Sdílet prostřednictvím


Definice azure Policy nasazují efektIfNotExists

Podobně jako auditIfNotExists, definice zásady deployIfNotExists spustí nasazení šablony, když je splněna podmínka. Přiřazení zásad s efektem nastaveným na DeployIfNotExists vyžadují spravovanou identitu k provedení nápravy.

Poznámka:

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

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 efektu details DeployIfNotExists má všechny podvlastnosti, které určují související prostředky, které mají odpovídat, a nasazení šablony, které se má provést.

  • type (povinné)
    • Určuje typ zdroje, který má být shodný.
    • Pokud je type typem prostředku v rámci podmínkového prostředku if, politika dotazuje na prostředky tohoto type v rámci hodnoceného prostředku. V opačném případě se dotazy na zásady provádějí ve stejné skupině prostředků nebo v předplatném jako vyhodnocovaný prostředek v závislosti na 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é, pak se name stává povinným a musí být [field('name')], nebo [field('fullName')] pro podřízený prostředek.

Poznámka:

type a name segmenty lze zkombinovat za účelem univerzální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 posledního segmentu názvu 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 spárování souvisejícího prostředku z jiné skupiny prostředků.
    • Nevztahuje se, pokud je type prostředkem, který by byl pod prostředkem if podmínky.
    • Výchozí hodnota je skupina prostředků zdroje podmínky if.
    • Pokud se spustí nasazení šablony, nasadí se ve skupině prostředků určené touto hodnotou.
  • existenceScope (volitelné)

    • Povolené hodnoty jsou Subscription a ResourceGroup.
    • Nastaví rozsah, ze kterého se má načíst odpovídající související prostředek.
    • Nevztahuje se, pokud je type prostředkem, 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 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 zásad pravidla if. AfterProvisioning se spustí po dokončení zřizování, a to 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 shody zdroje neaktualizuje, dokud nenastane další spouštěč vyhodnocení.
  • existenceCondition (volitelné)

    • Pokud není specifikováno, jakýkoli související prostředek type splňuje účinek a neaktivuje proces 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 .
    • Lze například použít k ověření, že nadřazený prostředek (v if podmínce) se nachází ve stejném umístění jako odpovídající související prostředek.
  • roleDefinitionIds (povinné)

    • Tato vlastnost musí obsahovat pole řetězců, které přesně odpovídají ID role přístupového řízení založeného na rolích, které jsou přístupné pro toto 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 v rámci šablony by měly používat jedinečné názvy, aby se zabránilo konfliktům mezi více vyhodnoceními zásad. Název nadřazeného nasazení lze použít jako součást názvu vnořeného nasazení pomocí [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. Tento element value v této části, umístěný pod názvem parametru šablony, slouží 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