Creare o aggiornare ruoli personalizzati di Azure usando un modello di Resource Manager

Se i ruoli predefiniti di Azure non soddisfano le esigenze specifiche dell'organizzazione, è possibile creare ruoli personalizzati. Questo articolo descrive come creare o aggiornare un ruolo personalizzato usando un modello di Azure Resource Manager .This article describe how to create or update a custom role using an Azure Resource Manager template (ARM template).

Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione per il progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione per creare la distribuzione.

Per creare un ruolo personalizzato, è necessario specificare un nome di ruolo, le autorizzazioni e la posizione in cui è possibile usare il ruolo. In questo articolo viene creato un ruolo denominato Ruolo personalizzato - Lettore RG con autorizzazioni di risorsa che possono essere assegnate a un ambito di sottoscrizione o inferiore.

Se l'ambiente soddisfa i prerequisiti e si ha familiarità con l'uso dei modelli di Resource Manager, selezionare il pulsante Distribuisci in Azure. Il modello verrà aperto nel portale di Azure.

Button to deploy the Resource Manager template to Azure.

Prerequisiti

Per creare un ruolo personalizzato, è necessario disporre di:

È necessario usare la versione seguente:

  • 2018-07-01 o versioni successive

Per altre informazioni, vedere Versioni API delle API REST di Controllo degli accessi in base al ruolo di Azure.

Rivedere il modello

Il modello usato in questo articolo proviene dai modelli di avvio rapido di Azure. Il modello ha quattro parametri e una sezione resources. I quattro parametri sono:

  • Matrice di azioni con un valore predefinito di ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • Matrice di notActions con un valore predefinito vuoto.
  • Nome del ruolo con un valore predefinito di Custom Role - RG Reader.
  • Descrizione del ruolo con un valore predefinito di Subscription Level Deployment of a Role Definition.

L'ambito in cui è possibile assegnare questo ruolo personalizzato è impostato sulla sottoscrizione corrente.

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

Nel modello è definita la risorsa seguente:

Distribuire il modello

Seguire questa procedura per distribuire il modello precedente.

  1. Accedere al portale di Azure.

  2. Aprire Azure Cloud Shell per PowerShell.

  3. Copiare e incollare lo script seguente in 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. Immettere un percorso per la distribuzione, centralusad esempio .

  5. Immettere un elenco di azioni per il ruolo personalizzato come elenco delimitato da virgole, Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/readad esempio .

  6. Se necessario, premere INVIO per eseguire il New-AzDeployment comando.

    Il comando New-AzDeployment distribuisce il modello per creare il ruolo personalizzato.

    L'output dovrebbe essere simile al seguente:

    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 :
    

Esaminare le risorse distribuite

Seguire questa procedura per verificare che il ruolo personalizzato sia stato creato.

  1. Eseguire il comando Get-AzRoleDefinition per elencare il ruolo personalizzato.

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

    L'output dovrebbe essere simile al seguente:

    {
      "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. Nella portale di Azure aprire la sottoscrizione.

  3. Nel menu a sinistra selezionare Controllo di accesso (IAM).

  4. Selezionare la scheda Ruoli .

  5. Impostare l'elenco Tipo su CustomRole.

  6. Verificare che sia elencato il ruolo personalizzato Ruolo - Lettore RG.

    New custom role in Azure portal

Aggiornare un ruolo personalizzato

Analogamente alla creazione di un ruolo personalizzato, è possibile aggiornare un ruolo personalizzato esistente usando un modello. Per aggiornare un ruolo personalizzato, è necessario specificare il ruolo da aggiornare.

Ecco le modifiche che è necessario apportare al modello di avvio rapido precedente per aggiornare il ruolo personalizzato.

  • Includere l'ID ruolo come parametro.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Includere il parametro ID ruolo nella definizione del ruolo.

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

Ecco un esempio di come distribuire il modello.

$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

Pulire le risorse

Per rimuovere il ruolo personalizzato, seguire questa procedura.

  1. Eseguire il comando seguente per rimuovere il ruolo personalizzato.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Immettere Y per confermare che si vuole rimuovere il ruolo personalizzato.

Passaggi successivi