Efekt wdrażania definicji usługi Azure PolicyIfNotExists

Podobnie jak auditIfNotExistsw przypadku deployIfNotExists , definicja zasad wykonuje wdrożenie szablonu po spełnieniu warunku. Przypisania zasad z ustawionym efektem jako DeployIfNotExists wymagają tożsamości zarządzanej w celu skorygowania.

Ocena deployIfNotExists

deployIfNotExists uruchamia się po konfigurowalnym opóźnieniu, gdy dostawca zasobów obsługuje żądanie utworzenia lub zaktualizowania subskrypcji lub zasobu i zwrócił kod stanu powodzenia. Wdrożenie szablonu występuje, jeśli nie ma powiązanych zasobów lub jeśli zasoby zdefiniowane przez existenceCondition program nie są obliczane na wartość true. Czas trwania wdrożenia zależy od złożoności zasobów zawartych w szablonie.

Podczas cyklu oceny definicje zasad z efektem DeployIfNotExists pasujące do zasobów są oznaczone jako niezgodne, ale nie są podejmowane żadne działania na tym zasobie. Istniejące niezgodne zasoby można skorygować za pomocą zadania korygowania.

Właściwości DeployIfNotExists

Właściwość details efektu DeployIfNotExists ma wszystkie podwłaściwości definiujące powiązane zasoby, które mają być zgodne, oraz wdrożenie szablonu do wykonania.

  • type (wymagane)
    • Określa typ powiązanego zasobu, który ma być zgodny.
    • Jeśli type jest typem if zasobu pod warunkiem, zasady wysyłają zapytania o zasoby tego type zasobu w zakresie ocenianego zasobu. W przeciwnym razie zapytania dotyczące zasad w tej samej grupie zasobów lub subskrypcji co oceniony zasób w zależności od existenceScope.
  • name (opcjonalnie)
    • Określa dokładną nazwę zasobu do dopasowania i powoduje, że zasady pobierają jeden konkretny zasób zamiast wszystkich zasobów określonego typu.
    • Gdy wartości warunku dla if.field.type i then.details.type są zgodne, staje name się wymagane i musi mieć [field('name')]wartość , lub [field('fullName')] dla zasobu podrzędnego.

Uwaga

type segmenty i name można łączyć w celu ogólnego pobierania zagnieżdżonych zasobów.

Aby pobrać określony zasób, możesz użyć elementów "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" i "name": "parentResourceName/nestedResourceName".

Aby pobrać kolekcję zasobów zagnieżdżonych, można podać symbol ? wieloznaczny zamiast segmentu nazwiska. Przykład: "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" i "name": "parentResourceName/?". Można to połączyć z funkcjami pól w celu uzyskania dostępu do zasobów związanych z ocenianym zasobem, takimi jak "name": "[concat(field('name'), '/?')]"."

  • resourceGroupName (opcjonalny)

    • Umożliwia dopasowanie powiązanego zasobu z innej grupy zasobów.
    • Nie ma zastosowania, jeśli type jest zasobem, który znajduje się pod zasobem if warunku.
    • Wartość domyślna if to grupa zasobów zasobu warunku.
    • Jeśli wdrożenie szablonu zostanie wykonane, zostanie wdrożone w grupie zasobów tej wartości.
  • existenceScope (opcjonalny)

    • Dozwolone wartości to Subscription i ResourceGroup.
    • Ustawia zakres, z którego ma być pobierany powiązany zasób, z którego ma być zgodny.
    • Nie ma zastosowania, jeśli type jest zasobem, który znajduje się pod zasobem if warunku.
    • W przypadku grupy zasobów należy ograniczyć grupę zasobów, jeśli resourceGroupName zostanie określona. Jeśli resourceGroupName nie zostanie określony, ograniczenie do if grupy zasobów zasobu warunku, która jest zachowaniem domyślnym.
    • W polu Subskrypcja wysyła zapytanie do całej subskrypcji powiązanego zasobu. Zakres przypisania należy ustawić w subskrypcji lub wyższej w celu odpowiedniej oceny.
    • Wartość domyślna to ResourceGroup.
  • evaluationDelay (opcjonalny)

    • Określa, kiedy należy ocenić istnienie powiązanych zasobów. Opóźnienie jest używane tylko w przypadku ocen, które są wynikiem żądania utworzenia lub zaktualizowania zasobu.
    • Dozwolone wartości to AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailurelub ISO 8601 czas trwania od 0 do 360 minut.
    • Wartości AfterProvisioning sprawdzają wynik aprowizacji zasobu, który został oceniony w warunku reguły if zasad. AfterProvisioning przebiegi po zakończeniu aprowizacji, niezależnie od wyniku. Aprowizowanie, które trwa dłużej niż sześć godzin, jest traktowane jako błąd podczas określania opóźnień oceny AfterProvisioning .
    • Wartość domyślna to PT10M (10 minut).
    • Określenie długiego opóźnienia oceny może spowodować, że zarejestrowany stan zgodności zasobu nie zostanie zaktualizowany do momentu następnego wyzwalacza oceny.
  • existenceCondition (opcjonalny)

    • Jeśli nie zostanie określony, jakikolwiek powiązany zasób type spełnia ten efekt i nie wyzwoli wdrożenia.
    • Używa tego samego języka co reguła zasad dla if warunku, ale jest obliczana dla każdego powiązanego zasobu indywidualnie.
    • Jeśli jakikolwiek pasujący zasób ma wartość true, efekt jest spełniony i nie wyzwala wdrożenia.
    • Można użyć [field()] do sprawdzenia równoważności z wartościami w if warunku.
    • Na przykład może służyć do sprawdzania, czy zasób nadrzędny (w warunku) znajduje się w if tej samej lokalizacji zasobu co pasujący powiązany zasób.
  • roleDefinitionIds (wymagane)

    • Ta właściwość musi zawierać tablicę ciągów pasujących do identyfikatora roli kontroli dostępu opartej na rolach dostępnego dla subskrypcji. Aby uzyskać więcej informacji, zobacz Korygowanie — konfigurowanie definicji zasad.
  • deploymentScope (opcjonalny)

    • Dozwolone wartości to Subscription i ResourceGroup.
    • Ustawia typ wdrożenia, który ma zostać wyzwolony. Subskrypcjawskazuje wdrożenie na poziomie subskrypcji, a grupa zasobów wskazuje wdrożenie w grupie zasobów.
    • Właściwość lokalizacji musi być określona we wdrożeniupodczas korzystania z wdrożeń na poziomie subskrypcji.
    • Wartość domyślna to ResourceGroup.
  • deployment (wymagane)

    • Ta właściwość powinna zawierać pełne wdrożenie szablonu, ponieważ zostanie przekazane do interfejsu Microsoft.Resources/deployments API PUT. Aby uzyskać więcej informacji, zobacz Interfejs API REST wdrożeń.
    • Zagnieżdżone Microsoft.Resources/deployments w szablonie powinny używać unikatowych nazw, aby uniknąć rywalizacji między wieloma ocenami zasad. Nazwa wdrożenia nadrzędnego może być używana jako część nazwy zagnieżdżonego wdrożenia za pomocą polecenia [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Uwaga

    Wszystkie funkcje wewnątrz deployment właściwości są oceniane jako składniki szablonu, a nie zasady. Wyjątkiem jest właściwość przekazująca parameters wartości z zasad do szablonu. W value tej sekcji pod nazwą parametru szablonu służy do przekazywania tej wartości (zobacz fullDbName w przykładzie DeployIfNotExists).

Przykład deployIfNotExists

Przykład: ocenia bazy danych programu SQL Server w celu określenia, czy transparentDataEncryption jest włączona. Jeśli nie, zostanie wykonane wdrożenie do włączenia.

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

Następne kroki