次の方法で共有


Azure Policy 定義の deployIfNotExists 効果

auditIfNotExistsと同様に、deployIfNotExists ポリシー定義は、条件が満たされたときにテンプレートのデプロイを実行します。 効果が DeployIfNotExists として設定されたポリシー割り当てには、修復を行うために マネージド ID が 必要です。

入れ子になったテンプレートdeployIfNotExistsでサポートされていますが、 リンクされたテンプレート は現在サポートされていません。

DeployIfNotExists の評価

deployIfNotExists は、リソース プロバイダーがサブスクリプションまたはリソースの作成または更新要求を処理し、成功状態コードを返したときに、構成可能な遅延の後に実行されます。 テンプレートのデプロイは、関連するリソースがない場合、または existenceCondition によって定義されたリソースが true と評価されない場合に発生します。 デプロイの時間は、テンプレートに含まれるリソースの複雑さによって異なります。

評価サイクル中、リソースに一致する DeployIfNotExists 効果を持つポリシー定義は非準拠としてマークされますが、そのリソースに対するアクションは実行されません。 既存の準拠していないリソースは、 修復タスクを使用して修復できます。

DeployIfNotExists のプロパティ

DeployIfNotExists 効果の details プロパティには、一致する関連リソースと実行するテンプレートのデプロイを定義するすべてのサブプロパティがあります。

  • type (必須)
    • 一致する関連リソースの種類を指定します。
    • typeif条件リソースの下にあるリソースの種類である場合、ポリシーはこのtypeのリソースを評価されたリソースのスコープ内で照会します。 それ以外の場合、ポリシーは、existenceScope に応じて、評価対象リソースと同じリソース グループまたはサブスクリプション内でクエリを実行します。
  • name (省略可)
    • 一致するリソースの正確な名前を指定すると、そのためのポリシーが発動し、指定した種類のすべてのリソースではなく、特定の1つのリソースのみを取得するようになります。
    • if.field.typethen.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 (任意)

    • 関連するリソースの照合を別のリソース グループから取得できるようにします。
    • typeif条件リソースの下にあるリソースの場合は適用されません。
    • 既定値は、 if 条件リソースのリソース グループです。
    • テンプレートのデプロイが実行されると、この値のリソース グループにデプロイされます。
  • existenceScope (任意)

    • 使用できる値は 、SubscriptionResourceGroup です
    • 照合する関連リソースを取得する範囲を設定します。
    • typeif条件リソースの下にあるリソースの場合は適用されません。
    • ResourceGroup の場合、指定した場合、resourceGroupName内のリソース グループに制限されます。 resourceGroupNameが指定されていない場合、if条件リソースのリソース グループに制限されます。これは既定の動作です。
    • サブスクリプションの場合は、関連リソースのサブスクリプション全体を照会します。 適切な評価を行う場合は、割り当てスコープをサブスクリプション以上に設定する必要があります。
    • 既定値は ResourceGroup です
  • evaluationDelay (任意)

    • 関連リソースの存在を評価するタイミングを指定します。 遅延は、リソースの作成または更新要求の結果である評価にのみ使用されます。
    • 使用できる値は、 AfterProvisioningAfterProvisioningSuccessAfterProvisioningFailure、または 0 ~ 360 分の間の ISO 8601 期間です。
    • AfterProvisioning の値は、ポリシー ルールのif条件で評価されたリソースのプロビジョニング結果を調べます。 AfterProvisioning は、結果に関係なく、プロビジョニングが完了した後に実行されます。 6 時間以上かかるプロビジョニングは、 AfterProvisioning 評価の遅延を決定するときにエラーとして扱われます。
    • 既定値は PT10M (10 分) です。
    • 長い評価遅延を指定すると、記録されたリソースのコンプライアンス状態が次の 評価トリガーまで更新されない可能性があります。
  • existenceCondition (任意)

    • 指定しない場合、 type の関連リソースは効果を満たし、デプロイはトリガーされません。
    • if条件のポリシー 規則と同じ言語を使用しますが、関連する各リソースに対して個別に評価されます。
    • 一致する関連リソースが true と評価された場合、効果は満たされ、デプロイはトリガーされません。
    • [field()] を使用して、 if 条件の値との等価性を確認できます。
    • たとえば、親リソース ( if 条件) が一致する関連リソースと同じリソースの場所にあることを検証するために使用できます。
  • roleDefinitionIds (必須)

    • このプロパティには、サブスクリプションでアクセス可能なロールベースのアクセス制御ロール ID と一致する文字列の配列を含める必要があります。 詳細については、修復 - ポリシー定義の構成に関するページを参照してください。
  • deploymentScope (任意)

    • 使用できる値は 、SubscriptionResourceGroup です
    • トリガーするデプロイの種類を設定します。 サブスクリプション はサブスクリプション レベルでのデプロイ を示し、 ResourceGroup はリソース グループへのデプロイを示します。
    • サブスクリプション レベルのデプロイを使用する場合は、Deployment で場所プロパティを指定する必要があります。
    • 既定値は ResourceGroup です
  • deployment (必須)

    • このプロパティには、 Microsoft.Resources/deployments PUT API に渡されるため、完全なテンプレートデプロイを含める必要があります。 詳細については、 デプロイ 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')]"
          }
        }
      }
    }
  }
}

次のステップ