Post

DenyAction Policy és ami mögötte van

Néha azért az Azure Policy világában is jönnek ki új dolgok. Az egyik ilyen újdonság a DenyAction Policy, amit a Microsoft már egy ideje tesztelgetett, de mostanra már általánosan is elérhetővé vált. Ebben a cikkben bemutatom, hogy mi is az a DenyAction Policy és hogyan működik.

Egy igen nagy hiányosságát hivatott befoltozni az eddigi Policy-nak, mégpedig azt, hogy a Policy nem tudja megakadályozni az erőforrás törlését. Egyszerűen nem reagál a törlésre, így ha egy erőforrást törölni akarunk, akkor azt meg is tudjuk tenni, abban az esetben is, ha a Policy-val valahogy letiltanánk.

Policy

Írtam is egy kis policy-t azért, hogy megakadályozzuk a központi diagnostic Settings eltávolítását.

Mi is a probléma a sima, pl. egy DeployIfNotExists policy-vel? A gond az, hogy a Policy nem tudja megakadályozni az erőforrás törlését, esetünkben ennek a diagnostic Settings-nek a törlését. A Policy nem fogja azonnal észrevenni, hogy eltávolítottuk a diagnostic Settings-t, így a Compliance-ben továbbra is zöld lesz a Policy, pedig nem megfelelő a beállítás. 24 óránként azért körbe fut a Policy és frissíti az adatokat, de mivel ez nem valós időben történik meg, így nem tudjuk, hogy mi is az aktuális állapot. DE!

A következő policy akár előfizetés, akár erőforrás diagnostic Settings-ről van szó, csak egy adott beállítás eltávolítását fogja megakadályozni. Ezzel két legyet üthetünk egy csapásra, hiszen a mi beállításunkat megvédjük, de ezzel együtt a felhasználóinknak továbbra is szabad kezet adunk a saját világukban.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "anyOf": [
            {
              "field": "type",
              "equals": "microsoft.insights/diagnosticSettings"
            },
            {
              "field": "type",
              "equals": "Microsoft.Resources/subscriptions/providers/diagnosticSettings"
            }
          ]
        },
        {
          "field": "name",
          "equals": "[parameters('diagsettings')]"
        }
      ]
    },
    "then": {
      "effect": "denyAction",
      "details": {
        "actionNames": [
          "delete"
        ]
      }
    }
  },
  "parameters": {
    "diagsettings": {
      "type": "String",
      "metadata": {
        "displayName": "CentralLog",
        "description": "Log"
      },
      "defaultValue": "CentralLog"
    }
  }
}
This post is licensed under CC BY 4.0 by the author.