Ein bekanntes Problem: man will in Azure für bestimmte Einzelpersonen oder Personengruppen auf diverse Ressourcen und Objekte Zugriffsrechte vergeben, aber keine der Standardrollen passt wirklich. Die Lösung ist einfach und lautet RBAC: Azure Role-Based Access Control.


Voraussetzungen

Azure Role-Based Access Control lässt zu, individuelle Zugriffsrollen zu definieren, diese anschließend auf gewünschte Objekte anzuwenden und Benutzern oder Gruppen zuzuweisen.

Zunächst sollte Euer Benutzer die erforderlichen Rechte aufweisen, um RBAC-Rollen erstellen und in Azure bereitstellen zu können, beispielsweise globale Administrator-Rechte. Weiterhin ist die Azure Powershell notwendig. Diese muss zunächst heruntergeladen auf dem lokalen PC installiert werden. Den Download findet Ihr unter: http://aka.ms/webpi-azps .
Danach werden die entsprechenden Module wie folgt in die PowerShell geladen:

[code lang=“powershell“]# Install the Azure Resource Manager modules from the PowerShell Gallery
Install-Module AzureRM
Install-AzureRM
# Install the Azure Service Management module from the PowerShell Gallery
Install-Module Azure
# Import AzureRM modules for the given version manifest in the AzureRM module
Import-AzureRM
# Import Azure Service Management module
Import-Module Azure [/code]

Zugriff mit der Powershell auf die Azure Subscription

Ihr solltet Euch nach der Installation zunächst mit der richtigen Azure Subscription verbinden.

[code lang=“powershell“]Login-AzureRmAccount[/code]

Mit dem Befehl könnt Ihr Euch alle Subscriptions anzeigen lassen:

[code lang=“powershell“] Get-AzureSubscription[/code]

Mit einem weiteren Befehl  könnt Ihr Euch mit der gewünschten Subscription verbinden:

[code lang=“powershell“]Select-AzureRmSubscription -Subscriptionid [GUID of subscription][/code]

Benutzerdefinierte RBAC-Rolle erstellen

Generell gibt es drei Arten, wie Rollen erstellt und in Azure implementiert werden können: Powershell – Azure CLI – REST API. In diesem Beispiel verwende ich die Powershell-Methode.
Der nachfolgende PowerShell-Code erstellt eine Rolle, welche in der kompletten Subscription sichtbar ist und auf klassische und V2 virtuelle Maschinen im neuen Azure Portal angewendet werden können. Sie befähigt die jeweiligen Benutzer lediglich, die ihnen angezeigten VMs zu starten, zu stoppen und neu zu starten.

[code lang=“powershell“]

$role = Get-AzureRmRoleDefinition „Virtual Machine Contributor“
$role.Id = $null
$role.Name = „Virtual Machine Operator“

$role.Actions.Clear()
$role.Actions.Add(„Microsoft.Compute/*/read“)
$role.Actions.Add(„Microsoft.Compute/virtualMachines/start/action“)
$role.Actions.Add(„Microsoft.Compute/virtualMachines/restart/action“)
$role.Actions.Add(„Microsoft.Compute/virtualMachines/powerOff/action“)

$role.Actions.Add(„Microsoft.ClassicCompute/*/read“)
$role.Actions.Add(„Microsoft.ClassicCompute/virtualMachines/stop/action“)
$role.Actions.Add(„Microsoft.ClassicCompute/virtualMachines/shutdown/action“)
$role.Actions.Add(„Microsoft.ClassicCompute/virtualMachines/start/action“)
$role.Actions.Add(„Microsoft.ClassicCompute/virtualMachines/restart/action“)
$role.Actions.Add(„Microsoft.ClassicCompute/virtualMachines/downloadRemoteDesktopConnectionFile/Action“)

$role.AssignableScopes.Clear()
$role.AssignableScopes.Add(„/subscriptions/[Subscription-ID]“)

[/code]

Wenn das Objekt erfolgreich erstellt wurde und alle Parameter soweit passen, kann die Rolle wie folgt nach Azure exportiert werden:

[code lang=“powershell“]New-AzureRmRoleDefinition -Role $role[/code]

Es sollte folgende Ausgabe erscheinen:

[code lang=“powershell“]Name : Virtual Machine Operator
Id : e4ede12d-aa65-4729-b3d9-dbc6689acb58
IsCustom : True
Description : Lets you manage virtual machines, but not access to them, and not the virtual network or storage
account they’re connected to.
Actions : {Microsoft.Compute/*/read, Microsoft.Compute/virtualMachines/start/action,Microsoft.Compute/virtualMachines/restart/action,Microsoft.Compute/virtualMachines/powerOff/action…}
NotActions : {}
AssignableScopes : {/subscriptions/[Subscription-ID]}
[/code]

RBAC-Rolle auf einen Benutzer oder Gruppe in Azure anwenden
Zunächst solltet ihr die Object Id des Users und der eben angelegten Roledefinition ermitteln:

[code lang=“powershell“]$userObjectId = (Get-AzureRmADUser -UserPrincipalName [UPN]).id
$roleDefinitionId = (Get-AzureRmRoleDefinition $role.Name).id[/code]

Weiterhin müsst ihr die Resource-ID der jeweiligen VM herausfinden:

[code lang=“powershell“]$ResourceID = (Get-AzureRmResource | where{($_.Name -like „[VM-Name]“)} | where{$_.ResourceType -like „*virtualMachines“}).ResourceId[/code]

Rolle zuweisen:

[code lang=“powershell“]New-AzureRmRoleAssignment -ObjectId $userObjectId -RoleDefinitionId $roleDefinitionId -Scope $ResourceID[/code]

Abschließend überprüfen ob die Rolle an den richtigen Benutzer, mit dem richtigen Objekt verknüpft wurde.

[code lang=“powershell“]Get-AzureRmRoleAssignment | where {$_.SignInName -like „[UPN]“}[/code]

Das ist nur der Anfang von unbegrenzten Möglichkeiten, granulare Berechtigungen in Microsoft Azure zu definieren und auszurollen. Diejenigen, die sich brennend für das Thema interessieren, können sich hier informieren.

Weiteres