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"
}
}
}