Создание или обновление пользовательских ролей Azure с помощью шаблона ARMCreate or update Azure custom roles using an ARM template

Если встроенные роли Azure не отвечают конкретным потребностям Организации, можно создать собственные пользовательские роли.If the Azure built-in roles don't meet the specific needs of your organization, you can create your own custom roles. В этой статье описывается создание или обновление пользовательской роли с помощью шаблона Azure Resource Manager (шаблон ARM).This article describes how to create or update a custom role using an Azure Resource Manager template (ARM template).

Шаблон ARM является файлом нотации объектов JavaScript (JSON), определяющими инфраструктуру и конфигурацию вашего проекта.An ARM template is a JavaScript Object Notation (JSON) file that defines the infrastructure and configuration for your project. В шаблоне используется декларативный синтаксис.The template uses declarative syntax. В декларативном синтаксисе вы можете описать предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.In declarative syntax, you describe your intended deployment without writing the sequence of programming commands to create the deployment.

Чтобы создать пользовательскую роль, необходимо указать имя роли, разрешения и место, где можно использовать эту роль.To create a custom role, you specify a role name, permissions, and where the role can be used. В этой статье вы создадите роль Custom Role-RG читатель с разрешениями ресурсов, которые могут быть назначены в области действия подписки или ниже.In this article, you create a role named Custom Role - RG Reader with resource permissions that can be assigned at a subscription scope or lower.

Если среда соответствует предварительным требованиям и вы знакомы с использованием шаблонов ARM, нажмите кнопку Развертывание в Azure.If your environment meets the prerequisites and you're familiar with using ARM templates, select the Deploy to Azure button. Шаблон откроется на портале Azure.The template will open in the Azure portal.

Развертывание в AzureDeploy to Azure

Предварительные требованияPrerequisites

Чтобы создать настраиваемую роль, необходимо иметь следующее:To create a custom role, you must have:

Изучение шаблонаReview the template

Шаблон, используемый в этой статье, относится к шаблонамбыстрого запуска Azure.The template used in this article is from Azure Quickstart Templates. Шаблон содержит четыре параметра и раздел ресурсов.The template has four parameters and a resources section. Четыре параметра:The four parameters are:

  • Массив действий со значением по умолчанию ["Microsoft.Resources/subscriptions/resourceGroups/read"] .Array of actions with a default value of ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • Массив notActions с пустым значением по умолчанию.Array of notActions with an empty default value.
  • Имя роли со значением по умолчанию Custom Role - RG Reader .Role name with a default value of Custom Role - RG Reader.
  • Описание роли со значением по умолчанию Subscription Level Deployment of a Role Definition .Role description with a default value of Subscription Level Deployment of a Role Definition.

Областью, в которой можно назначить эту настраиваемую роль, назначается текущая подписка.The scope where this custom role can be assigned is set to the current subscription.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "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(subscription().id, string(parameters('actions')), string(parameters('notActions')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleDefinitions",
      "apiVersion": "2018-07-01",
      "name": "[variables('roleDefName')]",
      "properties": {
        "roleName": "[parameters('roleName')]",
        "description": "[parameters('roleDescription')]",
        "type": "customRole",
        "isCustom": true,
        "permissions": [
          {
            "actions": "[parameters('actions')]",
            "notActions": "[parameters('notActions')]"
          }
        ],
        "assignableScopes": [
          "[subscription().id]"
        ]
      }
    }
  ]
}

В шаблоне определен следующий ресурс:The resource defined in the template is:

Развертывание шаблонаDeploy the template

Выполните следующие действия, чтобы развернуть предыдущий шаблон.Follow these steps to deploy the previous template.

  1. Войдите на портал Azure.Sign in to the Azure portal.

  2. Откройте Azure Cloud Shell для PowerShell.Open Azure Cloud Shell for PowerShell.

  3. Скопируйте и вставьте следующий скрипт в Cloud Shell.Copy and paste the following script into 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. Введите расположение для развертывания, например centralus .Enter a location for the deployment such as centralus.

  5. Введите список действий для пользовательской роли в виде списка с разделителями-запятыми, например Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read .Enter a list of actions for the custom role as a comma-separated list such as Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read.

  6. При необходимости нажмите клавишу ВВОД, чтобы выполнить New-AzDeployment команду.If necessary, press Enter to run the New-AzDeployment command.

    Команда New-аздеплоймент развертывает шаблон для создания настраиваемой роли.The New-AzDeployment command deploys the template to create the custom role.

    Выходные данные должны иметь следующий вид.You should see output similar to the following:

    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 :
    

Просмотр развернутых ресурсовReview deployed resources

Выполните следующие действия, чтобы убедиться, что пользовательская роль создана.Follow these steps to verify that the custom role was created.

  1. Выполните команду Get-азроледефинитион , чтобы получить список настраиваемой роли.Run the Get-AzRoleDefinition command to list the custom role.

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

    Выходные данные должны иметь следующий вид.You should see output similar to the following:

    {
      "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. В портал Azure откройте подписку.In the Azure portal, open your subscription.

  3. В меню слева выберите Управление доступом (IAM).In the left menu, select Access control (IAM).

  4. Перейдите на вкладку роли .Select the Roles tab.

  5. Задайте для списка типов значение кустомроле.Set the Type list to CustomRole.

  6. Убедитесь, что в списке указана пользовательская роль читателя RG .Verify that the Custom Role - RG Reader role is listed.

    Новая настраиваемая роль в портал Azure

Обновление пользовательской ролиUpdate a custom role

Аналогично созданию пользовательской роли можно обновить существующую пользовательскую роль с помощью шаблона.Similar to creating a custom role, you can update an existing custom role by using a template. Чтобы обновить пользовательскую роль, необходимо указать роль, которую требуется обновить.To update a custom role, you must specify the role you want to update.

Ниже приведены изменения, которые необходимо внести в предыдущий шаблон быстрого запуска для обновления пользовательской роли.Here are the changes you would need to make to the previous Quickstart template to update the custom role.

  • Включите идентификатор роли в качестве параметра.Include the role ID as a parameter.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Включите параметр идентификатора роли в определение роли.Include the role ID parameter in the role definition.

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

Ниже приведен пример развертывания шаблона.Here's an example of how to deploy the template.

$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

Очистка ресурсовClean up resources

Чтобы удалить настраиваемую роль, выполните следующие действия.To remove the custom role, follow these steps.

  1. Выполните следующую команду, чтобы удалить настраиваемую роль.Run the following command to remove the custom role.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Введите Y , чтобы подтвердить, что вы хотите удалить настраиваемую роль.Enter Y to confirm that you want to remove the custom role.

Дальнейшие действияNext steps