Azure Policy 定義の deployIfNotExists 効果
auditIfNotExists
と同様に、deployIfNotExists
ポリシー定義は条件が満たされたときにテンプレートのデプロイを実行します。 DeployIfNotExists として設定された有効なポリシー割り当てには、修復を行うための マネージド ID が必要です。
Note
deployIfNotExists
で 入れ子になったテンプレートがサポートされていますが、リンク済みテンプレートは現在サポートされていません。
DeployIfNotExists の評価
deployIfNotExists
は、リソース プロバイダーによって、サブスクリプションまたはリソースの作成または更新要求が処理され、成功を示す状態コードが返されてから、構成可能な遅延後に実行されます。 関連するリソースがない場合、または existenceCondition
によって定義されたリソースが true と評価されない場合、テンプレートのデプロイが発生します。 デプロイの時間は、テンプレートに含まれるリソースの複雑さによって異なります。
評価サイクル中は、リソースを照合する DeployIfNotExists 効果があるポリシー定義は非準拠としてマークされ、リソースに対するアクションは実行されません。 準拠していない既存のリソースは、修復タスクで修復できます。
DeployIfNotExists のプロパティ
DeployIfNotExists 効果の details
プロパティは、照合する関連リソースおよび実行するテンプレートのデプロイを定義するすべてのサブプロパティを含みます。
type
(必須)- 照合する関連リソースの型を指定します。
type
がif
条件リソース下にあるリソースの種類である場合、このtype
のリソースが、ポリシーによって評価対象リソースのスコープ内から照会されます。 それ以外の場合、ポリシーは、existenceScope
に応じて、評価されたリソースと同じリソース グループまたはサブスクリプション内でクエリを実行します。
name
(省略可)- 照合するリソースの正確な名前を指定して、指定した型のすべてのリソースではなく 1 つの特定のリソースを取得します。
if.field.type
とthen.details.type
の条件値が一致する場合、name
は "必須" になり、子リソースに対し[field('name')]
または[field('fullName')]
であることが必要です。
Note
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
(任意)- 使用できる値は Subscription と ResourceGroup です。
- 照合する関連リソースを取得する範囲を設定します。
type
がif
条件リソースの下にあるリソースである場合は適用されません。- ResourceGroup については、
resourceGroupName
内のリソース グループに制限されます (指定されている場合)。resourceGroupName
が指定されていない場合は、if
条件リソースのリソース グループに制限されます。これは既定の動作です。 - Subscription の場合は、関連リソースのサブスクリプション全体を検索します。 適切に評価するためには、割り当てスコープがサブスクリプション以上で設定されている必要があります。
- 既定値は ResourceGroup です。
evaluationDelay
(任意)- 関連リソースの存在を評価する必要があるタイミングを指定します。 遅延は、リソースの作成または更新要求の結果である評価のみに使用されます。
- 使用できる値は
AfterProvisioning
、AfterProvisioningSuccess
、AfterProvisioningFailure
、または ISO 8601 期間の 0 から 360 分の間です。 - AfterProvisioning 値では、ポリシー規則の
if
条件で評価されたリソースのプロビジョニング結果が検査されます。 結果に関係なく、プロビジョニングが完了した後にAfterProvisioning
が実行されます。 6 時間より長くかかるプロビジョニングは、AfterProvisioning の評価の遅延を判断するときに失敗として扱われます。 - 既定値は
PT10M
(10 分間) です。 - 長い評価遅延を指定すると、リソースの記録されたコンプライアンス状態が、次の評価のトリガーまで更新されない場合があります。
existenceCondition
(任意)- 指定されない場合、
type
の関連リソースは効果を満たすため、デプロイはトリガーされません。 if
条件のポリシー規則と同じ言語が使用されますが、それぞれの関連リソースに対して個別に評価されます。- 照合する関連リソースのいずれかが true と評価された場合、効果は条件を満たしているため、デプロイはトリガーされません。
- [field()] を使用して、
if
条件の値と等しいことを確認できます。 - たとえば、(
if
条件内の) 親リソースが照合する関連リソースと同じリソースの場所にあることを検証できます。
- 指定されない場合、
roleDefinitionIds
(必須)- このプロパティには、サブスクリプションでアクセス可能なロールベースのアクセス制御ロール ID と一致する文字列の配列を含める必要があります。 詳細については、修復 - ポリシー定義の構成に関するページを参照してください。
deploymentScope
(任意)- 使用できる値は Subscription と ResourceGroup です。
- トリガーされるデプロイの種類を設定します。 Subscription はサブスクリプション レベルでのデプロイを示し、ResourceGroup はリソース グループへのデプロイを示します。
- サブスクリプション レベルのデプロイを使用する場合は、Deployment で location プロパティを指定する必要があります。
- 既定値は ResourceGroup です。
deployment
(必須)- このプロパティは
Microsoft.Resources/deployments
PUT API に渡されるため、完全なテンプレートのデプロイを含める必要があります。 詳細については、Deployments REST API をご覧ください。 - テンプレート内で入れ子になっている
Microsoft.Resources/deployments
では、複数のポリシー評価間の競合を避けるために、固有の名前を使用する必要があります。[concat('NestedDeploymentName-', uniqueString(deployment().name))]
を使用すると、入れ子になったデプロイの一部として親デプロイの名前を使用できます。
Note
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')]"
}
}
}
}
}
}
次のステップ
- Azure Policy のサンプルを確認します。
- 「Azure Policy の定義の構造」を確認します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループ」を参照してください。