Share via


Skapa eller uppdatera anpassade Azure-roller med hjälp av en ARM-mall

Om de inbyggda Azure-rollerna inte uppfyller organisationens specifika behov kan du skapa egna anpassade roller. Den här artikeln beskriver hur du skapar eller uppdaterar en anpassad roll med hjälp av en Azure Resource Manager-mall (ARM-mall).

En Azure Resource Manager-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för projektet. Mallen använder deklarativ syntax. Du beskriver den avsedda distributionen utan att skriva sekvensen med programmeringskommandon för att skapa distributionen.

Om du vill skapa en anpassad roll anger du ett rollnamn, behörigheter och var rollen kan användas. I den här artikeln skapar du en roll med namnet Anpassad roll – RG-läsare med resursbehörigheter som kan tilldelas i ett prenumerationsomfång eller lägre.

Om din miljö uppfyller förhandskraven och du är van att använda ARM-mallar väljer du knappen Distribuera till Azure. Mallen öppnas på Azure-portalen.

Button to deploy the Resource Manager template to Azure.

Förutsättningar

Om du vill skapa en anpassad roll måste du ha:

Du måste använda följande version:

  • 2018-07-01 eller senare

Mer information finns i API-versioner av Azure RBAC REST API:er.

Granska mallen

Mallen som används i den här artikeln kommer från Azure-snabbstartsmallar. Mallen har fyra parametrar och ett resursavsnitt. De fyra parametrarna är:

  • Matris med åtgärder med standardvärdet ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • Matris med notActions med ett tomt standardvärde.
  • Rollnamn med standardvärdet Custom Role - RG Reader.
  • Rollbeskrivning med standardvärdet Subscription Level Deployment of a Role Definition.

Omfånget där den här anpassade rollen kan tilldelas anges till den aktuella prenumerationen.

{
  "$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]"
        ]
      }
    }
  ]
}

Resursen som definieras i mallen är:

Distribuera mallen

Följ de här stegen för att distribuera den tidigare mallen.

  1. Logga in på Azure-portalen.

  2. Öppna Azure Cloud Shell för PowerShell.

  3. Kopiera och klistra in följande skript i Cloud Shell.

    $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. Ange en plats för distributionen, till exempel centralus.

  5. Ange en lista över åtgärder för den anpassade rollen som en kommaavgränsad lista, till exempel Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read.

  6. Om det behövs trycker du på Retur för att köra New-AzDeployment kommandot.

    Kommandot New-AzDeployment distribuerar mallen för att skapa den anpassade rollen.

    Du bör se utdata som liknar följande:

    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 :
    

Granska distribuerade resurser

Följ de här stegen för att kontrollera att den anpassade rollen har skapats.

  1. Kör kommandot Get-AzRoleDefinition för att visa en lista över den anpassade rollen.

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

    Du bör se utdata som liknar följande:

    {
      "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. Öppna din prenumeration i Azure-portalen.

  3. Välj Åtkomstkontroll (IAM) i den vänstra menyn.

  4. Välj fliken Roller .

  5. Ange listan Typ till CustomRole.

  6. Kontrollera att rollen Anpassad roll – RG-läsare visas.

    New custom role in Azure portal

Uppdatera en anpassad roll

På samma sätt som när du skapar en anpassad roll kan du uppdatera en befintlig anpassad roll med hjälp av en mall. Om du vill uppdatera en anpassad roll måste du ange den roll som du vill uppdatera.

Här är de ändringar som du skulle behöva göra i den tidigare snabbstartsmallen för att uppdatera den anpassade rollen.

  • Inkludera roll-ID:t som en parameter.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Inkludera roll-ID-parametern i rolldefinitionen.

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

Här är ett exempel på hur du distribuerar mallen.

$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

Rensa resurser

Följ dessa steg om du vill ta bort den anpassade rollen.

  1. Kör följande kommando för att ta bort den anpassade rollen.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Ange Y för att bekräfta att du vill ta bort den anpassade rollen.

Nästa steg