Поделиться через


Создание или обновление пользовательских ролей Azure с помощью Azure PowerShell

Если встроенные роли Azure не соответствуют потребностям вашей организации, вы можете создать собственные настраиваемые роли. В этой статье описывается, как перечислять, создавать, обновлять или удалять пользовательские роли с помощью Azure PowerShell.

Пошаговое руководство по созданию настраиваемой роли см. в руководстве по созданию настраиваемой роли Azure с помощью Azure PowerShell.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как осуществить переход на модуль Az PowerShell, см. статью Перенос Azure PowerShell с AzureRM на Az.

Предпосылки

Для создания пользовательских ролей в Azure требуются:

Список настраиваемых ролей

Чтобы вывести список ролей, доступных для назначения в области, используйте команду Get-AzRoleDefinition. В следующем примере перечислены все роли, доступные для назначения в выбранной подписке.

Get-AzRoleDefinition | FT Name, IsCustom
Name                                              IsCustom
----                                              --------
Virtual Machine Operator                              True
AcrImageSigner                                       False
AcrQuarantineReader                                  False
AcrQuarantineWriter                                  False
API Management Service Contributor                   False
...

В следующем примере перечислены только пользовательские роли, доступные для назначения в выбранной подписке.

Get-AzRoleDefinition -Custom | FT Name, IsCustom
Name                     IsCustom
----                     --------
Virtual Machine Operator     True

Если выбранная подписка не включена в AssignableScopes роль, пользовательская роль не будет указана.

Перечислите определение настраиваемой роли

Чтобы вывести список настраиваемых определений ролей, используйте Get-AzRoleDefinition. Это та же команда, что и для встроенной роли.

Get-AzRoleDefinition <role_name> | ConvertTo-Json
PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | ConvertTo-Json

{
  "Name": "Virtual Machine Operator",
  "Id": "00000000-0000-0000-0000-000000000000",
  "IsCustom": true,
  "Description": "Can monitor and restart virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

В следующем примере перечислены только действия роли:

(Get-AzRoleDefinition <role_name>).Actions
PS C:\> (Get-AzRoleDefinition "Virtual Machine Operator").Actions

"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"

Создание настраиваемой роли

Чтобы создать пользовательскую роль, используйте команду New-AzRoleDefinition . Существует два метода структурирования роли, используя PSRoleDefinition объект или шаблон JSON.

Получение операций для поставщика ресурсов

При создании настраиваемых ролей важно знать все возможные операции ресурсных поставщиков. Список операций поставщика ресурсов можно просмотреть или использовать команду Get-AzProviderOperation для получения этих сведений. Например, если вы хотите проверить все доступные операции для виртуальных машин, используйте следующую команду:

Get-AzProviderOperation <operation> | FT OperationName, Operation, Description -AutoSize
PS C:\> Get-AzProviderOperation "Microsoft.Compute/virtualMachines/*" | FT OperationName, Operation, Description -AutoSize

OperationName                                  Operation                                                      Description
-------------                                  ---------                                                      -----------
Get Virtual Machine                            Microsoft.Compute/virtualMachines/read                         Get the propertie...
Create or Update Virtual Machine               Microsoft.Compute/virtualMachines/write                        Creates a new vir...
Delete Virtual Machine                         Microsoft.Compute/virtualMachines/delete                       Deletes the virtu...
Start Virtual Machine                          Microsoft.Compute/virtualMachines/start/action                 Starts the virtua...
...

Создание настраиваемой роли с помощью объекта PSRoleDefinition

При использовании PowerShell для создания настраиваемой роли можно использовать одну из встроенных ролей в качестве отправной точки или начать с нуля. Первый пример в этом разделе начинается со встроенной роли, а затем настраивает ее с дополнительными разрешениями. Измените атрибуты для добавления Actionsили NotActionsAssignableScopes нужного значения, а затем сохраните изменения в качестве новой роли.

В следующем примере мы начинаем с встроенной роли Virtual Machine Contributor, чтобы создать настраиваемую роль с именем Virtual Machine Operator. Новая роль предоставляет доступ ко всем действиям чтения поставщиков ресурсов Microsoft.Compute, Microsoft.Storage и Microsoft.Network и предоставляет доступ к запуску, перезапуску и мониторингу виртуальных машин. Пользовательская роль может использоваться в двух подписках.

$role = Get-AzRoleDefinition "Virtual Machine Contributor"
$role.Id = $null
$role.Name = "Virtual Machine Operator"
$role.Description = "Can monitor and restart virtual machines."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/*/read")
$role.Actions.Add("Microsoft.Network/*/read")
$role.Actions.Add("Microsoft.Compute/*/read")
$role.Actions.Add("Microsoft.Compute/virtualMachines/start/action")
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action")
$role.Actions.Add("Microsoft.Authorization/*/read")
$role.Actions.Add("Microsoft.ResourceHealth/availabilityStatuses/read")
$role.Actions.Add("Microsoft.Resources/subscriptions/resourceGroups/read")
$role.Actions.Add("Microsoft.Insights/alertRules/*")
$role.Actions.Add("Microsoft.Support/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/00000000-0000-0000-0000-000000000000")
$role.AssignableScopes.Add("/subscriptions/11111111-1111-1111-1111-111111111111")
New-AzRoleDefinition -Role $role

В следующем примере показано, как создать пользовательскую роль оператора виртуальной машины . Он начинается с создания нового PSRoleDefinition объекта. Действия указываются в переменной perms и задаются свойством Actions . Свойство NotActions задается путем чтения NotActions из встроенной роли Virtual Machine Contributor. Так как Virtual Machine Contributor не имеет NotActions, эта строка не требуется, но она показывает, как можно получить информацию из другой роли.

$role = [Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition]::new()
$role.Name = 'Virtual Machine Operator 2'
$role.Description = 'Can monitor and restart virtual machines.'
$role.IsCustom = $true
$perms = 'Microsoft.Storage/*/read','Microsoft.Network/*/read','Microsoft.Compute/*/read'
$perms += 'Microsoft.Compute/virtualMachines/start/action','Microsoft.Compute/virtualMachines/restart/action'
$perms += 'Microsoft.Authorization/*/read'
$perms += 'Microsoft.ResourceHealth/availabilityStatuses/read'
$perms += 'Microsoft.Resources/subscriptions/resourceGroups/read'
$perms += 'Microsoft.Insights/alertRules/*','Microsoft.Support/*'
$role.Actions = $perms
$role.NotActions = (Get-AzRoleDefinition -Name 'Virtual Machine Contributor').NotActions
$subs = '/subscriptions/00000000-0000-0000-0000-000000000000','/subscriptions/11111111-1111-1111-1111-111111111111'
$role.AssignableScopes = $subs
New-AzRoleDefinition -Role $role

Создание настраиваемой роли с помощью шаблона JSON

Шаблон JSON можно использовать в качестве определения источника для пользовательской роли. В следующем примере создается пользовательская роль, которая позволяет читать доступ к хранилищу и вычислительным ресурсам, получать доступ к поддержке и добавлять эту роль в две подписки. Создайте файл C:\CustomRoles\customrole1.json со следующим примером. Идентификатор должен быть задан null при первоначальном создании роли, так как новый идентификатор создается автоматически.

{
  "Name": "Custom Role 1",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows for read access to Azure storage and compute resources and access to support",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Storage/*/read",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-0000-0000-0000-000000000000",
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

Чтобы добавить роль в подписки, выполните следующую команду PowerShell:

New-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"

Обновление настраиваемой роли

Аналогично созданию настраиваемой роли, можно изменить существующую пользовательскую роль с помощью PSRoleDefinition объекта или шаблона JSON.

Обновление пользовательской роли с помощью объекта PSRoleDefinition

Чтобы изменить пользовательскую роль, сначала используйте команду Get-AzRoleDefinition для получения определения роли. Во-вторых, внесите необходимые изменения в определение роли. Наконец, используйте команду Set-AzRoleDefinition , чтобы сохранить измененное определение роли.

В следующем примере действие Microsoft.Insights/diagnosticSettings/* добавляется в пользовательскую роль Оператора виртуальной машины.

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
Set-AzRoleDefinition -Role $role
PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111}

В следующем примере добавляется подписка Azure на назначенные области настраиваемой роли оператора виртуальной машины .

Get-AzSubscription -SubscriptionName Production3

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzSubscription -SubscriptionName Production3

Name     : Production3
Id       : 22222222-2222-2222-2222-222222222222
TenantId : 99999999-9999-9999-9999-999999999999
State    : Enabled

PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111,
                   /subscriptions/22222222-2222-2222-2222-222222222222}

В следующем примере группа управления добавляется к настраиваемой роли оператора виртуальной машины AssignableScopes.

Get-AzManagementGroup

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/{groupId1}")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzManagementGroup

Id          : /providers/Microsoft.Management/managementGroups/marketing-group
Type        : /providers/Microsoft.Management/managementGroups
Name        : marketing-group
TenantId    : 99999999-9999-9999-9999-999999999999
DisplayName : Marketing group

PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/marketing-group")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111,
                   /subscriptions/22222222-2222-2222-2222-222222222222,
                   /providers/Microsoft.Management/managementGroups/marketing-group}

Обновление настраиваемой роли с помощью шаблона JSON

С помощью предыдущего шаблона JSON можно легко изменить существующую пользовательскую роль для добавления или удаления действий. Обновите шаблон JSON и добавьте действие чтения для сети, как показано в следующем примере. Определения, перечисленные в шаблоне, не применяются к существующему определению, что означает, что роль отображается точно так же, как указано в шаблоне. Кроме того, необходимо обновить поле идентификатора с идентификатором роли. Если вы не знаете, что такое значение, можно использовать командлет Get-AzRoleDefinition для получения этих сведений.

{
  "Name": "Custom Role 1",
  "Id": "acce7ded-2559-449d-bcd5-e9604e50bad1",
  "IsCustom": true,
  "Description": "Allows for read access to Azure storage and compute resources and access to support",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-0000-0000-0000-000000000000",
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

Чтобы обновить существующую роль, выполните следующую команду PowerShell:

Set-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"

Удаление настраиваемой роли

  1. Удалите все назначения ролей, использующие пользовательскую роль. Дополнительные сведения см. в разделе "Поиск назначений ролей" для удаления настраиваемой роли.

  2. Используйте команду Remove-AzRoleDefinition для удаления настраиваемой роли.

    В следующем примере удаляется пользовательская роль оператора виртуальной машины .

    Get-AzRoleDefinition "Virtual Machine Operator"
    Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
    
    PS C:\> Get-AzRoleDefinition "Virtual Machine Operator"
    
    Name             : Virtual Machine Operator
    Id               : 88888888-8888-8888-8888-888888888888
    IsCustom         : True
    Description      : Can monitor and restart virtual machines.
    Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                       Microsoft.Compute/virtualMachines/start/action...}
    NotActions       : {}
    AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                       /subscriptions/11111111-1111-1111-1111-111111111111}
    
    PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
    
    Confirm
    Are you sure you want to remove role definition with name 'Virtual Machine Operator'.
    [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y
    

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