Drücke "Enter", um den Text zu überspringen.

Azure – RBAC Custom Role für das starten und stoppen von VMs

Weil es die Tage bei einem meiner Kunden wieder mal ein Thema war, möchte ich es hier nun mal im Detail beleuchten. Und zwar geht es um die Anforderung, Virtuelle Maschinen in Azure starten und stoppen zu können, ohne beispielsweise die VM löschen zu können oder ihre SKU zu verändern. Natürlich gibt es den „Virtual Machine Contributor“ als built-in Role, aber diese darf eben deutlich zu viel.

Wie geht man nun an das Thema heran? Zunächst muss man zwei Dinge in Erfahrung bringen:

  • Den Namen des Resource-Providers um den es geht
  • Die Operationen auf diesem Provider, die man erlauben oder verbieten möchte

Dazu kann man sich in den Microsoft Docs informieren:

Für den Fall der Virtual Machine finden wir dazu also:

  • Der Resource Provider heisst „Microsoft.Compute
  • Auf diesem sind u.a. folgende Aktionen vorgesehen:
    • Microsoft.Compute/virtualMachines/powerOff/action
      • Powers off the virtual machine. Note that the virtual machine will continue to be billed.
    • Microsoft.Compute/virtualMachines/read
      • Get the properties of a virtual machine
    • Microsoft.Compute/virtualMachines/restart/action
      • Restarts the virtual machine
    • Microsoft.Compute/virtualMachines/start/action
      • Starts the virtual machine

Die Liste der möglichen Aktionen auf einem Resource Provider kann man auch via PowerShell bekommen, z.B.:

1
Get-AzProviderOperation "Microsoft.Compute/*" | FT Operation, Description -AutoSize

Man muss allerdings berücksichtigen, dass es zum Starten einer VM auch erstmal nötig ist, die VM überhaupt sehen zu dürfen…

Als nächstes muss man die Rollen-Definition im JSON-Format schreiben. Dazu kann man sich auch vorab eine bereits existierende Rollendefinition herunterladen, z.B. mit

1
Get-AzRoleDefinition -Name "Virtual Machine Contributor" | ConvertTo-Json

Nun passt man sich das JSON so an, dass die gewünschten Aktionen abgedeckt sind. Dabei wird die „ID“ Zeile entfernt und „IsCustom“ auf „true“ gesetzt. Außerdem muss der AssignableScope gesetzt werden. In unserem Fall führt das in etwa zu dieser Definition:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "Name": "Virtual Machine Starter-Stopper",
  "IsCustom": true,
  "Description": "Lets you see, start, restart and stop Virtual Machines.",
  "Actions": [
	"Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Compute/virtualMachines/read",
	"Microsoft.Compute/virtualMachines/start/action",
	"Microsoft.Compute/virtualMachines/restart/action",
	"Microsoft.Compute/virtualMachines/powerOff/action",
	"Microsoft.Compute/virtualMachines/deallocate/action"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-1234-5678-91234-000000000000"
  ]
}

Diese Definition kann man z.B. mit vi in der Azure Cloud Shell in ein File schreiben. Diese kann man dann wiederum mit

1
New-AzRoleDefinition -InputFile myRole.json

in eine neue Rolle schreiben lassen.

Nun kann man die Rolle bspw. über das Azure Portal zuweisen:

Und damit kann der Benutzer dann genau die definierten Rechte wahrnehmen – und nicht mehr!

Viel Spaß beim Ausprobieren!

2 Comments

  1. Stefan
    Stefan 19. Februar 2020

    Hi Haiko,

    welche Anlaufstelle kannst du zum Thema Azure empfehlen? Irgendeine bestimmte Lektüre?

    Gruß,

    Stefan

  2. Haiko
    Haiko 19. Februar 2020

    Hallo Stefan, danke für deine Frage. Leider ist diese ziemlich aktuell gehalten. Erste Anlaufstelle ist natürlich immer https://docs.microsoft.com/de-de/azure bzw. https://docs.microsoft.com/en-us/azure. Ansonsten sind die Blogs von Microsoft sehr hilfreich: https://azure.microsoft.com/en-us/updates/ und https://azure.microsoft.com/en-us/blog/. Ansonten kann ich noch folgende Seiten empfehlen, wenn es um Allgemeines geht: https://azurecharts.com/ + https://azureprice.net/ + https://nnmer.github.io/azure-services-map/dist/. Wenn du konkretere Fragen hast, gerne her damit! Liebe Grüße, Haiko.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.