Azure Policy 定義の denyAction 効果

denyAction 効果は、リソースに意図されるアクションに基づいて要求を大規模にブロックするために使われます。 現在、サポートされているアクションは DELETE のみです。 この効果とアクション名は、重要なリソースが誤って削除されるのを防ぐのに役立ちます。

DenyAction の評価

該当するアクション名と対象スコープを持つ要求の呼び出しを送信すると、denyAction により、要求は成功しなくなります。 要求は 403 (Forbidden) として返されます。 ポータルでは、Forbidden はポリシー割り当てによって阻止されたデプロイの状態として表示されます。

ロックアウト シナリオを防ぐために、Microsoft.Authorization/policyAssignmentsMicrosoft.Authorization/denyAssignmentsMicrosoft.Blueprint/blueprintAssignmentsMicrosoft.Resources/deploymentStacksMicrosoft.Resources/subscriptionsMicrosoft.Authorization/locks はいずれも denyAction の適用から除外されています。

サブスクリプションの削除

サブスクリプションの削除中に発生するリソースの削除は、ポリシーによってブロックされません。

リソース グループの削除

ポリシーにより、リソース グループの削除中に denyAction ポリシーに対して場所とタグをサポートするリソースが評価されます。 リソース グループの削除をブロックするのは、ポリシー規則で cascadeBehaviorsdeny に設定されているポリシーのみです。 場所とタグ、または mode:all が設定されたポリシーをサポートしていないリソースの削除は、ポリシーによってブロックされません。

カスケード削除

カスケード削除が発生するのは、親リソースを削除したときに、そのすべての子および拡張リソースも暗黙的に削除される場合です。 削除アクションが親リソースを対象としている場合、子および拡張リソースの削除はポリシーによってブロックされません。 Microsoft.Storage/storageaccounts の拡張リソースの例として、Microsoft.Insights/diagnosticSettings が挙げられます。 denyAction ポリシーが Microsoft.Insights/diagnosticSettings を対象としている場合、診断設定 (子) に対する削除の呼び出しは失敗しますが、ストレージ アカウント (親) の削除によって、診断設定 (拡張) が暗黙的に削除されます。

この表は、割り当てられた denyAction ポリシーに適用されるリソースと、DELETE 呼び出しのターゲット スコープを考慮して、リソースが削除から保護されるかどうかを説明するものです。 この表のコンテキストでは、インデックス付きリソースはタグと場所をサポートするものであり、非インデックス付きリソースはタグと場所をサポートしないものです。 インデックス付きと非インデックス付きのリソースの詳細については、定義モードに関する記事を参照してください。 子リソースとは、別のリソースのコンテキスト内でのみ存在するリソースのことです。 たとえば、仮想マシン拡張機能リソースは、親リソースである仮想マシンの子です。

削除されるエンティティ ポリシー条件に適用されるエンティティ 実行した操作
リソース リソース Protected
サブスクリプション リソース Deleted
Resource group インデックス付きリソース 依存先 cascadeBehaviors
Resource group 非インデックス付きリソース Deleted
子リソース 親リソース 親が保護される、子が削除される
親リソース 子リソース Deleted

DenyAction のプロパティ

denyAction 効果の details プロパティには、アクションと動作を定義するすべてのサブプロパティがあります。

  • actionNames (必須)
    • 実行を阻止するアクションを指定する "配列"。
    • サポートされているアクション名は delete です。
  • cascadeBehaviors (省略可)
    • リソース グループが削除されたときにリソースが暗黙的に削除される場合に実行される動作を定義するオブジェクト。
    • modeindexed に設定されているポリシー定義でのみサポートされます。
    • 使用できる値は allow または deny です。
    • 既定値は deny です。

DenyAction の例

例: 運用環境と等しいタグ環境のデータベース アカウントを対象とした削除の呼び出しをすべて拒否します。カスケード動作は Deny に設定されているため、該当するデータベース アカウントを持つリソース グループを対象とするすべての DELETE 呼び出しをブロックします。

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.DocumentDb/accounts"
      },
      {
        "field": "tags.environment",
        "equals": "prod"
      }
    ]
  },
  "then": {
    "effect": "denyAction",
    "details": {
      "actionNames": [
        "delete"
      ],
      "cascadeBehaviors": {
        "resourceGroup": "deny"
      }
    }
  }
}

次のステップ