Jogosultság hozzárendelés korlátozása policy-val
Az RBAC egy nagyon hasznos dolog. Rengeteg benne a beállítható jogosultsági “szint”, az egyedi összerendelések, minden, mi szem szájnak ingere, de…
Régi módi a hozzáállása, vagyis hogy amihez nincs jog, az a jó. Ezt Én tisztelettel, de vitatom. Ahhoz, hogy csökkentsük az üzemeltetés túlterheltségét, bizony 1-1 feladatot át kell adnunk a másik oldalnak. A jogosultság osztás mindig is egy mumus volt, nincs ez máskép szerintem most se.
Úgy gonolom, és erre hoztam is egy példát, hogy nem csak azzal lehet a felhasználókat korlátozni, ha valamihez egyáltalán nincs joguk. Adjuk meg az “ügyfélnek” a lehetőséget, hogy maga rendelkezzen a világa felett, ne kelljen heteket, napokat, de akár csak órákat is várnia arra, hogy megkapjon egy jogosultságot, de korlátozzuk azt, hogy mit is választhat.
SharePoint-os múltamból megmaradt az a szokásom, hogy csoportokon keresztül szeretem, ha osztanak jogot. Ezt többé-kevésbé magammal hoztam az Azure világában is. (Persze, így nehezebb megnézni, hogy egy előfizetéshez ki fér hozzá, de a nap végén nekem így is kevesebb munkám lesz)
Szóval a célom az, hogy a felhasználó tudjon maga is jogosultságot osztani, ha létrehozott egy SPN-t vagy Managed identity-t, de embereket ne tudjon direktbe hozzáadni az előfizetéshez.
Egyszerű példa, felhasználó “fully private” AKS-t akar kirakni “user defined routing”-al. Neki bizony vannak előfeltételei, az egyik, hogy kell neki 1 db spn vagy managed identity, akinek “write” joga van a felhasználni kíván subnet route tábláján. Amennyiben nem biztosítjuk, hogy a felhasználó ezeket be tudja magának állítani, akkor több terület fáradhatatlan munkája szükséges ahhoz, hogy egy darab egyszerű Azure Kubernetes Services-t kirakjanak, mikor elég lenne hozzá 1 ember :)
1 szó mint 100, policy-val tiltom meg azt, hogy user-t direktben hozzá lehesen rendelni bármihez, közben a többi típusú objektum esetén maga rendelkezik a jogosultságok beállításával.
Policy létrehozása
Magát a policy létrehozását már leírtam ebben a postban, a menete pedig ugyanaz, csak ezt a kódot kell használni ;)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"mode": "All",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Authorization/roleAssignments"
},
{
"field": "Microsoft.Authorization/roleAssignments/principalType",
"equals": "User"
}
]
},
"then": {
"effect": "deny"
}
},
"parameters": {}
}
Természetesen más alapján is dolgozhazhatunk, mint például jogosultsági szint, így bizonyos role-okat kitilhatunk vagy csak bizonyosakat engedélyezünk. Rengeteg megoldás jut kapásból eszembe, de ez már az ügyfél igényein is múlik ;)