Créer ou mettre à jour des rôles personnalisés Azure à l’aide d’un modèle ARM

Si les rôles intégrés Azure ne répondent pas aux besoins spécifiques de votre organisation, vous pouvez créer vos propres rôles personnalisés. Cet article décrit la procédure de création ou de mise à jour d’un rôle personnalisé à l’aide d’un modèle Azure Resource Manager (modèle ARM).

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez le déploiement que vous avez prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Pour créer un rôle personnalisé, vous spécifiez un nom de rôle, des autorisations et l’emplacement où le rôle peut être utilisé. Dans cet article, vous créez un rôle nommé Custom Role - RG Reader avec des autorisations de ressources qui peuvent être attribuées au niveau d’une étendue d’abonnement ou d’une étendue inférieure.

Si votre environnement remplit les prérequis et que vous êtes déjà familiarisé avec l’utilisation des modèles ARM, sélectionnez le bouton Déployer sur Azure. Le modèle s’ouvre dans le portail Azure.

Button to deploy the Resource Manager template to Azure.

Prérequis

Pour créer un rôle personnalisé, vous devez disposer des éléments suivants :

Vous devez utiliser la version suivante :

  • 2018-07-01 ou ultérieur

Pour plus d’informations, consultez Versions des API REST Azure RBAC.

Vérifier le modèle

Le modèle utilisé dans cet article provient des Modèles de démarrage rapide Azure. Le modèle dispose de quatre paramètres et d’une section de ressources. Les quatre paramètres sont :

  • Tableau d’actions avec la valeur par défaut ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • Tableau de notActions avec une valeur par défaut vide.
  • Nom de rôle avec la valeur par défaut Custom Role - RG Reader.
  • Description du rôle avec la valeur par défaut Subscription Level Deployment of a Role Definition.

L’étendue d’attribution de ce rôle personnalisé est définie sur l’abonnement actuel.

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

La ressource définie dans le modèle est :

Déployer le modèle

Procédez comme suit pour déployer le modèle précédent.

  1. Connectez-vous au portail Azure.

  2. Ouvrez Azure Cloud Shell pour PowerShell.

  3. Copiez et collez le script suivant dans 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. Entrez un emplacement pour le déploiement, tel que centralus.

  5. Entrez une liste d’actions pour le rôle personnalisé en tant que liste séparée par des virgules, comme Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read.

  6. Si nécessaire, appuyez sur Entrée pour exécuter la commande New-AzDeployment.

    La commande New-AzDeployment déploie le modèle pour créer un rôle personnalisé.

    Vous devez obtenir une sortie similaire à la suivante :

    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 :
    

Vérifier les ressources déployées

Procédez comme suit pour vérifier que le rôle personnalisé a été créé.

  1. Exécutez la commande Get-AzRoleDefinition pour lister le rôle personnalisé.

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

    Vous devez obtenir une sortie similaire à la suivante :

    {
      "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. Dans le portail Azure, ouvrez votre abonnement.

  3. Dans le menu de gauche, sélectionnez Contrôle d’accès (IAM) .

  4. Sélectionnez l’onglet Rôles.

  5. Définissez la liste Type sur CustomRole.

  6. Vérifiez que Rôle personnalisé - Lecteur RG est listé.

    New custom role in Azure portal

Mettre à jour un rôle personnalisé

À l’instar de la création d’un rôle personnalisé, vous pouvez mettre à jour un rôle personnalisé existant à l’aide d’un modèle. Pour mettre à jour un rôle personnalisé, vous devez spécifier le rôle que vous souhaitez mettre à jour.

Voici les modifications que vous devez apporter au modèle de démarrage rapide précédent pour mettre à jour le rôle personnalisé.

  • Incluez l’ID de rôle en tant que paramètre.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Incluez le paramètre ID de rôle dans la définition du rôle.

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

Voici un exemple montrant comment déployer le modèle.

$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

Nettoyer les ressources

Pour supprimer le rôle personnalisé, procédez comme suit.

  1. Exécutez la commande suivante pour supprimer le rôle personnalisé.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Entrez Y pour confirmer la suppression du rôle personnalisé.

Étapes suivantes