Erstellen oder Aktualisieren benutzerdefinierter Rollen in Azure mithilfe einer ARM-Vorlage

Wenn die integrierten Azure-Rollen die Anforderungen Ihrer Organisation nicht erfüllen, können Sie Ihre eigenen benutzerdefinierten Rollen erstellen. In diesem Artikel wird beschrieben, wie eine benutzerdefinierte Rolle mithilfe einer Azure Resource Manager-Vorlage (ARM) erstellt oder aktualisiert wird.

Eine Azure Resource Manager-Vorlage ist eine JSON-Datei (JavaScript Object Notation), die die Infrastruktur und die Konfiguration für Ihr Projekt definiert. Die Vorlage verwendet eine deklarative Syntax. Sie beschreiben Ihre geplante Bereitstellung, ohne die Abfolge der Programmierbefehle zu schreiben, mit denen die Bereitstellung erstellt wird.

Zum Erstellen einer benutzerdefinierten Rolle geben Sie einen Rollennamen, Berechtigungen und den Ort an, an dem die Rolle verwendet werden kann. In diesem Artikel erstellen Sie eine Rolle namens Custom Role – RG Reader mit Ressourcenberechtigungen, die in einem Abonnementbereich oder einer niedrigeren Ebene zugewiesen werden können.

Wenn Ihre Umgebung die Voraussetzungen erfüllt und Sie mit der Verwendung von ARM-Vorlagen vertraut sind, klicken Sie auf die Schaltfläche In Azure bereitstellen. Die Vorlage wird im Azure-Portal geöffnet.

Button to deploy the Resource Manager template to Azure.

Voraussetzungen

Zum Erstellen einer benutzerdefinierten Rolle benötigen Sie Folgendes:

Sie müssen die folgende Version verwenden:

  • 2018-07-01 oder höher

Weitere Informationen finden Sie unter API-Versionen von Azure RBAC REST-APIs.

Überprüfen der Vorlage

Die in diesem Artikel verwendete Vorlage stammt aus den Azure-Schnellstartvorlagen. Die Vorlage hat vier Parameter und einen Ressourcenabschnitt. Die vier Parameter sind:

  • Array von Aktionen mit dem Standardwert ["Microsoft.Resources/subscriptions/resourceGroups/read"]
  • Array von notActions mit einem leeren Standardwert
  • Rollenname mit dem Standardwert Custom Role - RG Reader
  • Rollenbeschreibung mit dem Standardwert Subscription Level Deployment of a Role Definition

Der Bereich, in dem diese benutzerdefinierte Rolle zugeordnet werden kann, wird auf das aktuelle Abonnement festgelegt.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.25.53.49325",
      "templateHash": "16704138909949665309"
    }
  },
  "parameters": {
    "actions": {
      "type": "array",
      "defaultValue": [
        "Microsoft.Resources/subscriptions/resourceGroups/read"
      ],
      "metadata": {
        "description": "Array of actions for the roleDefinition"
      }
    },
    "notActions": {
      "type": "array",
      "defaultValue": [],
      "metadata": {
        "description": "Array of notActions for the roleDefinition"
      }
    },
    "roleName": {
      "type": "string",
      "defaultValue": "Custom Role - RG Reader",
      "metadata": {
        "description": "Friendly name of the role definition"
      }
    },
    "roleDescription": {
      "type": "string",
      "defaultValue": "Subscription Level Deployment of a Role Definition",
      "metadata": {
        "description": "Detailed description of the role definition"
      }
    }
  },
  "variables": {
    "roleDefName": "[guid(parameters('roleName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleDefinitions",
      "apiVersion": "2022-04-01",
      "name": "[variables('roleDefName')]",
      "properties": {
        "roleName": "[parameters('roleName')]",
        "description": "[parameters('roleDescription')]",
        "type": "customRole",
        "permissions": [
          {
            "actions": "[parameters('actions')]",
            "notActions": "[parameters('notActions')]"
          }
        ],
        "assignableScopes": [
          "[subscription().id]"
        ]
      }
    }
  ]
}

In der Vorlage ist die folgende Ressource definiert:

Bereitstellen der Vorlage

Führen Sie diese Schritte aus, um die vorherige Vorlage bereitzustellen.

  1. Melden Sie sich beim Azure-Portal an.

  2. Öffnen Sie Azure Cloud Shell für PowerShell.

  3. Kopieren Sie das folgende Skript, und fügen Sie es in Cloud Shell ein.

    $location = Read-Host -Prompt "Enter a location (i.e. centralus)"
    [string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)"
    $actions = $actions.Split(',')
    $templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json"
    New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions
    
  4. Geben Sie einen Standort für die Bereitstellung ein, z. B. centralus.

  5. Geben Sie eine Liste von Aktionen für die benutzerdefinierte Rolle als durch Trennzeichen getrennte Liste ein, z. B. Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read.

  6. Drücken Sie ggf. die EINGABETASTE, um den Befehl New-AzDeployment auszuführen.

    Der Befehl New-AzDeployment stellt die Vorlage zum Erstellen der benutzerdefinierten Rolle bereit.

    Die Ausgabe sollte etwa folgendermaßen aussehen:

    PS> New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions
    
    Id                      : /subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/azuredeploy
    DeploymentName          : azuredeploy
    Location                : centralus
    ProvisioningState       : Succeeded
    Timestamp               : 6/25/2020 8:08:32 PM
    Mode                    : Incremental
    TemplateLink            :
                              Uri            : https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name               Type                       Value
                              =================  =========================  ==========
                              actions            Array                      [
                                "Microsoft.Resources/resources/read",
                                "Microsoft.Resources/subscriptions/resourceGroups/read"
                              ]
                              notActions         Array                      []
                              roleName           String                     Custom Role - RG Reader
                              roleDescription    String                     Subscription Level Deployment of a Role Definition
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

Überprüfen der bereitgestellten Ressourcen

Führen Sie diese Schritte aus, um sicherzustellen, dass die benutzerdefinierte Rolle erstellt wurde.

  1. Führen Sie den Befehl Get-AzRoleDefinition aus, um die benutzerdefinierte Rolle aufzulisten.

    Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
    

    Die Ausgabe sollte etwa folgendermaßen aussehen:

    {
      "Name": "Custom Role - RG Reader",
      "Id": "11111111-1111-1111-1111-111111111111",
      "IsCustom": true,
      "Description": "Subscription Level Deployment of a Role Definition",
      "Actions": [
        "Microsoft.Resources/resources/read",
        "Microsoft.Resources/subscriptions/resourceGroups/read"
      ],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": [],
      "AssignableScopes": [
        "/subscriptions/{subscriptionId}"
      ]
    }
    
  2. Öffnen Sie im Azure-Portal Ihr Abonnement.

  3. Wählen Sie im linken Menü Zugriffssteuerung (IAM) aus.

  4. Wählen Sie die Registerkarte Rollen aus.

  5. Legen Sie die Liste Typ auf CustomRole fest.

  6. Stellen Sie sicher, dass die Rolle Benutzerdefinierte Rolle – RG Reader aufgeführt ist.

    New custom role in Azure portal

Aktualisieren einer benutzerdefinierten Rolle

Ähnlich wie beim Erstellen einer benutzerdefinierten Rolle können Sie auch für das Aktualisieren einer vorhandenen benutzerdefinierte Rolle eine Vorlage verwenden. Um eine benutzerdefinierte Rolle zu aktualisieren, müssen Sie die Rolle angeben, die Sie aktualisieren möchten.

Im Folgenden finden Sie die Änderungen, die Sie an der vorherigen Schnellstartvorlage vornehmen müssen, um die benutzerdefinierte Rolle zu aktualisieren.

  • Fügen Sie die Rollen-ID als Parameter ein.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Fügen Sie den Parameter mit der Rollen-ID in die Rollendefinition ein.

      ...
      "resources": [
        {
          "type": "Microsoft.Authorization/roleDefinitions",
          "apiVersion": "2022-04-01",
          "name": "[parameters('roleDefName')]",
          "properties": {
            ...
    

Hier sehen Sie ein Beispiel für die Bereitstellung der Vorlage:

$location = Read-Host -Prompt "Enter a location (i.e. centralus)"
[string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)"
$actions = $actions.Split(',')
$roleDefName = Read-Host -Prompt "Enter the role ID to update"
$templateFile = "rg-reader-update.json"
New-AzDeployment -Location $location -TemplateFile $templateFile -actions $actions -roleDefName $roleDefName

Bereinigen von Ressourcen

Um die benutzerdefinierte Rolle zu entfernen, führen Sie die folgenden Schritte aus.

  1. Führen Sie den folgenden Befehl aus, um die benutzerdefinierte Rolle zu entfernen.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Geben Sie J ein, um zu bestätigen, dass Sie die benutzerdefinierte Rolle entfernen möchten.

Nächste Schritte