다음을 통해 공유


Azure Policy 정의 deployIfNotExists 효과

auditIfNotExists마찬가지로 정책 정의는 deployIfNotExists 조건이 충족되면 템플릿 배포를 실행합니다. DeployIfNotExists로 설정된 정책 할당은 수정을 수행하려면 관리 ID 가 필요합니다.

비고

중첩된 템플릿은 지원 deployIfNotExists되지만 연결된 템플릿은 현재 지원되지 않습니다.

DeployIfNotExists 평가

deployIfNotExists 는 리소스 공급자가 구독 또는 리소스 만들기 또는 업데이트 요청을 처리하고 성공 상태 코드를 반환할 때 구성 가능한 지연 후에 실행됩니다. 관련 리소스가 없거나 정의된 existenceCondition 리소스가 true로 평가되지 않는 경우 템플릿 배포가 발생합니다. 배포 기간은 템플릿에 포함된 리소스의 복잡성에 따라 달라집니다.

평가 주기 동안 리소스와 일치하는 DeployIfNotExists 효과가 있는 정책 정의는 비준수로 표시되지만 해당 리소스에 대한 작업은 수행되지 않습니다. 기존 비규격 리소스는 수정 작업으로 수정할 수 있습니다.

DeployIfNotExists 속성

details DeployIfNotExists 효과의 속성에는 일치시킬 관련 리소스와 실행할 템플릿 배포를 정의하는 모든 하위 속성이 있습니다.

  • type(필수)
    • 일치시킬 관련 리소스의 형식을 지정합니다.
    • 조건 리소스 아래의 type 리소스 종류인 경우 if 정책은 평가된 리소스의 범위 내에서 이 type 리소스를 쿼리합니다. 그렇지 않으면 existenceScope에 따라 평가된 리소스와 동일한 리소스 그룹 또는 구독 내의 정책 쿼리입니다.
  • name(선택 사항)
    • 일치시킬 리소스의 정확한 이름을 지정하고 정책이 지정된 형식의 모든 리소스 대신 특정 리소스 하나를 가져오도록 합니다.
    • if.field.type 조건 값과 then.details.type이 일치하면 name필수로 설정되며, [field('name')] 또는 [field('fullName')]가 자식 리소스에 대한 값이어야 합니다.

비고

type 세그먼트와 name 세그먼트를 결합하여 일반적으로 중첩된 리소스를 검색할 수 있습니다.

특정 리소스를 검색하려면 다음을 사용할 "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType""name": "parentResourceName/nestedResourceName"수 있습니다.

중첩된 리소스의 컬렉션을 검색하기 위해 마지막 이름 세그먼트 대신 와일드카드 문자 ?를 제공할 수 있습니다. 예를 들어 "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType""name": "parentResourceName/?"를 지정합니다. 이를 필드 함수와 결합하여 평가된 리소스와 관련된 리소스(예: "name": "[concat(field('name'), '/?')]"")에 액세스할 수 있습니다.

  • resourceGroupName(선택 사항)

    • 관련 리소스의 일치가 다른 리소스 그룹에서 올 수 있도록 허용합니다.
    • 조건 리소스 아래에 type 있는 리소스인 경우 if 적용되지 않습니다.
    • 기본값은 if 조건 리소스의 리소스 그룹입니다.
    • 템플릿 배포가 실행되면 이 값의 리소스 그룹에 배포됩니다.
  • existenceScope(선택 사항)

    • 허용되는 값은 구독ResourceGroup입니다.
    • 일치시킬 관련 리소스를 가져올 위치의 범위를 설정합니다.
    • 조건 리소스 아래에 type 있는 리소스인 경우 if 적용되지 않습니다.
    • ResourceGroup의 경우 지정된 경우 리소스 그룹으로 resourceGroupName 제한됩니다. resourceGroupName이(가) 지정되지 않으면, 기본 동작으로 조건 자원의 리소스 그룹if으로 제한됩니다.
    • 구독의 경우 관련 리소스에 대한 전체 구독을 쿼리합니다. 할당 범위는 적절한 평가를 위해 구독 이상에서 설정해야 합니다.
    • 기본값은 ResourceGroup입니다.
  • evaluationDelay(선택 사항)

    • 관련 리소스의 존재가 평가되어야 하는 시기를 지정합니다. 지연은 리소스 만들기 또는 업데이트 요청의 결과인 평가에만 사용됩니다.
    • 허용되는 값은 AfterProvisioningAfterProvisioningSuccessAfterProvisioningFailure0~360분 사이의 ISO 8601 기간입니다.
    • AfterProvisioning 값은 정책 규칙 if 의 조건에서 평가된 리소스의 프로비전 결과를 검사합니다. AfterProvisioning 는 결과에 관계없이 프로비전이 완료된 후 실행됩니다. 6시간 이상 걸리는 프로비전은 AfterProvisioning 평가 지연을 결정할 때 실패로 처리됩니다.
    • 기본값은 10분입니다 PT10M .
    • 긴 평가 지연을 지정하면 다음 평가 트리거까지 리소스의 기록된 준수 상태가 업데이트되지 않을 수 있습니다.
  • existenceCondition(선택 사항)

    • 지정하지 않으면 type와 관련된 모든 리소스가 효과를 만족시키고 배포를 트리거하지 않습니다.
    • 조건에 대한 정책 규칙과 동일한 언어를 if 사용하지만 각 관련 리소스에 대해 개별적으로 평가됩니다.
    • 일치하는 관련 리소스가 true로 평가되면 효과가 충족되고 배포가 트리거되지 않습니다.
    • [field()]를 사용하여 조건의 값 if 과 동등성을 확인할 수 있습니다.
    • 예를 들어 부모 리소스( if 조건)가 일치하는 관련 리소스와 동일한 리소스 위치에 있는지 확인하는 데 사용할 수 있습니다.
  • roleDefinitionIds(필수)

    • 이 속성은 구독에서 액세스할 수 있는 역할 기반 액세스 제어 역할 ID와 일치하는 문자열 배열을 포함해야 합니다. 자세한 내용은 수정 - 정책 정의 구성을 참조하세요.
  • deploymentScope(선택 사항)

    • 허용되는 값은 구독ResourceGroup입니다.
    • 트리거할 배포 유형을 설정합니다. 구독구독 수준에서 배포 를 나타내고 ResourceGroup은 리소스 그룹에 대한 배포를 나타냅니다.
    • 구독 수준 배포를 사용하는 경우 배포에서 위치 속성을 지정해야 합니다.
    • 기본값은 ResourceGroup입니다.
  • deployment(필수)

    • 이 속성은 PUT API에 전달되므로 전체 템플릿 배포를 Microsoft.Resources/deployments 포함해야 합니다. 자세한 내용은 배포 REST API를 참조하세요.
    • 템플릿 내에 중첩된 Microsoft.Resources/deployments 고유한 이름을 사용하여 여러 정책 평가 간의 경합을 방지해야 합니다. 부모 배포의 이름은 [concat('NestedDeploymentName-', uniqueString(deployment().name))]을 통해 중첩된 배포 이름의 일부로 사용될 수 있습니다.

    비고

    속성 내의 deployment 모든 함수는 정책이 아닌 템플릿의 구성 요소로 평가됩니다. 정책의 parameters 값을 템플릿으로 전달하는 속성은 예외입니다. 템플릿 매개 변수 이름 아래의 이 섹션에서는 value 이 값을 전달하는 데 사용됩니다(DeployIfNotExists 예제의 fullDbName 참조).

DeployIfNotExists 예제

예: SQL Server 데이터베이스를 평가하여 transparentDataEncryption이(가) 사용 설정되어 있는지를 확인합니다. 그렇지 않은 경우 사용하도록 설정하는 배포가 실행됩니다.

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

다음 단계