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.
Voraussetzungen
Zum Erstellen einer benutzerdefinierten Rolle benötigen Sie Folgendes:
- Berechtigungen zum Erstellen von benutzerdefinierten Rollen, wie z. B. Benutzerzugriffsadmin
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.
Melden Sie sich beim Azure-Portal an.
Öffnen Sie Azure Cloud Shell für PowerShell.
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
Geben Sie einen Standort für die Bereitstellung ein, z. B.
centralus
.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
.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.
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}" ] }
Öffnen Sie im Azure-Portal Ihr Abonnement.
Wählen Sie im linken Menü Zugriffssteuerung (IAM) aus.
Wählen Sie die Registerkarte Rollen aus.
Legen Sie die Liste Typ auf CustomRole fest.
Stellen Sie sicher, dass die Rolle Benutzerdefinierte Rolle – RG Reader aufgeführt ist.
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.
Führen Sie den folgenden Befehl aus, um die benutzerdefinierte Rolle zu entfernen.
Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
Geben Sie J ein, um zu bestätigen, dass Sie die benutzerdefinierte Rolle entfernen möchten.