RBAC a Custom Roles

Jakub Heinz
6 minuty, 46 sekundy
3

Tímto článkem navazuji na můj přechozí článek popisující nastavení RBAC (Role-based access control) v Microsoft Azure. Jen shrnu, že RBAC umožnuje nastavit Role pro konkrétní uživatele, nebo skupiny a na základě této role, má pak konkrétní uživatel možnost provádět konkrétní akce. Tedy například vytvořit virtuální stroj, nebo jej spustit. Pořád platí, že role a RBAC je možné nastavit jen v novém portálu https://portal.azure.com Ovšem standardně jsou v Microsoft Azure na výběr jen předvytvořené role, jako například „Owner“, nebo „Contributor“ apod. Což né vždy může ve všech případech vyhovovat. U větších organizací zde může vzniknout potřeba si vytvořit vlastní specifické role, např. dle odpovědnosti zaměstnanců v dané organizaci. Na obrázku níže pak vidíte schématický pohled na způsob přiřazení práv. Pod samotným „Azure Resource Managerem“ jsou k dispozici různí „Resource Providers“, jako například „Microsoft.Storage Provider“ pro práci se Storage Accounts, disky apod. Nebo třeba „Microsoft.keyvault Provider“ pro práci s Key Vault apod. Přičemž práva se dají nastavit primárně nad „Resource Group“, která obsahuje další konkrétní objekty/zdroje. Nebo pak nad konkrétními zdroji/objekty, například nad Virtuálními stroji apod.

Zde v článku si na příkladu ukážeme, jak si vytvořit novou roli a této roli nastavit konkrétní práva. Cílem je v tomto případě vytvořit kopii role „Owner“ pro samotnou subskripci, což je role s absolutními právy nad celou subskripcí a omezit tuto nově vzniklou roli tak, aby tato nová role měla práva pouze na čtení v rámci Providera „Microsoft.ClassicCompute“ a „Microsoft.Compute“. Tím docílíme, že uživatel, nebude schopen například vypnout, nebo zapnout virtuální stroj, nicméně bude mít všechny ostatní práva. Tedy například vytvořit Storage Account, nebo vytvořit Key Vault apod. V novém portálu tedy vybereme v levé části položku „Subscriptions“ a v pravé části vybereme konkrétní subskripci, ve které budeme vytvářet „Custom Role“.

Dále v rámci vybrané subskripce vybereme ikonu „dvou osob“ a tím se dostaneme na záložku „Users“. Zde klikněte na tlačítko „Roles“.

V seznamu rolí vyberte roli „Owner“. A v pravé části pak vyberte položku „Permissions“.

Dojde k zobrazení samotných „Resource Providers“ a k nim přiřazených „PERMISSIONS“.

Pokud vyberete konkrétního „Resource Provider“, pak v pravé části vidíte ke každému „Resource type“ konkrétní práva („Permissions“).

Pokud kliknete na konkrétní „Resource type“, tedy jako v tomto případě na virtuální stroj „Virtual Machines“, vidíte v pravé části soupis akcí „Actions“, a práv „Permissions“. Tedy lze zjistit například, zda existující Role „Owner“, má práva v rámci „Resource Provider“ „Microsoft Compute“ právo provést akci „Action“ nastartování virtuálního stroje „Start Virtual Machine“ v rámci „Resource type“ „Virtual Machines“.

Pokud se kurzorem myši přiblížíte k ikoně „i“, zobrazí se popis konkrétní akce „Actions“.

  Vytvoření vlastní role: Pomocí PowerShell příkazu Get-AzureRmRoleDefinition můžete vylistovat informace o dané roli, tedy i seznam akcí, na které má daná role práva. V tomto případě má role „Owner“ práva na všechny existující akce. Get-AzureRmRoleDefinition -Name "Owner"

Provedeme export role do souboru ve formátu JSON. Get-AzureRmRoleDefinition -Name "Owner" | ConvertTo-Json | Out-File C:\temp\OwnerRole.json Ukázka vyexportovaného souboru ve formátu JSON.

Pomocí níže uvedeného PowerShell příkazu vypíšete seznam Operation …pro oblast Compute, do které spadají i virtuální stroje. Tyto seznamy je možné použit pro tvorbu, nebo editaci souboru ve formátu JSON. Get-AzureRmProviderOperation -OperationSearchString "Microsoft.Compute/*"

Dále pomocí niže uvedeného PowerShell příkazu můžete vylistovat seznam všech Resource Provideru Get-AzureRmResourceProvider -ListAvailable Níže je příklad upraveného souboru ve formátu JSON, tak aby bylo dosaženo požadovaného výsledku. Tedy u „Resource Provideru“ „Microsoft.ClassicCompute“ a „Microsoft.Compute“ byly všechny actions () nastaveny na právo „Permissions“ „read“. Nezapomeňte upravit název „Name“ na unikární název role a smažte „Id“. { "Name": "Owner Read Compute", "Description": "Lets you manage everything, Compute only Read.", "Actions": [ "Microsoft.Batch/", "Microsoft.ClassicCompute/*/read", "Microsoft.ClassicNetwork/", "Microsoft.ClassicStorage/", "Microsoft.Compute/*/read", "Microsoft.DevTestLab/", "Microsoft.Insights/", "microsoft.keyvault/", “Microsoft.Network/", "Microsoft.OperationalInsights/", "Microsoft.Storage/", "Microsoft.ADHybridHealthService/", "Microsoft.ApiManagement/", "Microsoft.AppService/", "Microsoft.Authorization/", "Microsoft.Automation/", "Microsoft.BingMaps/", "Microsoft.BizTalkServices/", "Microsoft.Cache/", "Microsoft.Cdn/", "Microsoft.DataFactory/", "Microsoft.Devices/", "Microsoft.DocumentDB/", "Microsoft.DomainRegistration/", "Microsoft.DynamicsLcs/", "Microsoft.EventHub/", "Microsoft.Features/", "Microsoft.Logic/", "Microsoft.MarketplaceOrdering/", "Microsoft.NotificationHubs/", "Microsoft.Resources/", "Microsoft.Scheduler/", "Microsoft.Search/", "Microsoft.Security/", "Microsoft.ServiceBus/", "Microsoft.ServiceFabric/", "Microsoft.Sql/", "Microsoft.StreamAnalytics/", "microsoft.support/", "microsoft.visualstudio/", "Microsoft.Web/", "NewRelic.APM/", "Sendgrid.Email/", "SuccessBricks.ClearDB/*" ], "NotActions": [ ], "AssignableScopes": [ "/subscriptions/6c33a4dd-9441-4057-995f-0813ec28c1aa" ] } Poznámka: Pokud chcete, aby byla role vytvořena jen v rámci konkrétní subskripce, přidejte so souboru v JSON formátu položku ve formátu „/subscriptions/<SubscriptionId>“. Pak proveďte import upravené role. New-AzureRmRoleDefinition -InputFile C:\temp\OwnerRole.json

  Ukázka fungování nově vytvořené role: V rámci nového portálu vyberte konkrétní subskripci.

A přidejte pomocí tlačítka „+ Add“ nového uživatele a k němu roli.

Tedy vyberte roli, a tedy v našem případě „Custom Role“ „Owner Read Compute

Vyberte rovněž uživatele, nebo skupinu, které přiřadíte nově vytvořenou roli.

Výsledkem je přiřazení role „Owner Read Compute“ uživateli „Manage VMs“.

Kontrolou si lze ověřit, že skutečně došlo k nastavení práv, dle očekávání, tak jak je vidět na obrázku.

Jak jde pak vidět i na úrovni „Resource Type“ – „Permissions“ si lze ověřit, že uživatele „Manage VMs“, má pouze práva „read“ na všechny akce spadající pod providera „Microsoft.ClassicCompute“ a „Microsoft.Compute“.

  V praxi: Při pokusu uživatele „Manage VMs“ o zapnutí virtuálního stroje dojde k vygenerování chyby, která jednoznačně říká, že daný uživatel nemá na tuto akci dostatečná práva.

  Úprava role: Vlastnosti vámi vytvořené role můžete kdykoli modifikovat. Stačí upravit soubor ve formátu JSON a přidat, odebrat, nebo upravit „Role Definition“. Nesmíte zapomenout přidat do souboru „Id“ této „Custom Role“

  Níže pak vidíte příklad PowerShell příkazů, které vám dovolí vytvořit Custom Role jen pomocí PowerShellu, bez nutnosti exportovat a upravovat soubor ve formátu JSON. $roleDef = Get-AzureRmRoleDefinition "Helpdesk VM Admins" $roleDef.Actions.Add("Microsoft.ClassicCompute/virtualmachines/start/action") $roleDef.Description = "Can monitor all resources and start and restart virtual machines" $roleDef.AssignableScopes = @("/subscriptions/eb910d4f-edbf-429b-94F6-d76bae7ff401" , "/subscriptions/a846d197-5eac-45c7-b885-a6227fe6d388") New-AzureRmRoleDefinition -Role $roleDef   Užitečné odkazy: https://msdn.microsoft.com/en-us/library/mt603738.aspx https://msdn.microsoft.com/en-us/library/mt603738.aspx

Autor: Jakub Heinz

Následující článek Předchozí článek