Vytvoření nebo aktualizace vlastních rolí Azure pomocí Azure PowerShellu

Pokud předdefinované role Azure nevyhovují konkrétním potřebám vaší organizace, můžete vytvořit vlastní role. Tento článek popisuje, jak vypsat, vytvořit, aktualizovat nebo odstranit vlastní role pomocí Azure PowerShellu.

Podrobný kurz vytvoření vlastní role najdete v tématu Kurz: Vytvoření vlastní role Azure pomocí Azure PowerShellu.

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Požadavky

K vytváření vlastních rolí potřebujete:

Výpis vlastních rolí

Pokud chcete zobrazit seznam rolí dostupných pro přiřazení v oboru, použijte příkaz Get-AzRoleDefinition . Následující příklad uvádí všechny role, které jsou k dispozici pro přiřazení ve vybraném předplatném.

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

Následující příklad uvádí pouze vlastní role, které jsou k dispozici pro přiřazení ve vybraném předplatném.

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

Pokud vybrané předplatné není v AssignableScopes roli, nebude tato vlastní role uvedená.

Výpis definice vlastní role

Pokud chcete vypsat vlastní definici role, použijte rutinu Get-AzRoleDefinition. Jedná se o stejný příkaz jako u předdefinované role.

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

Následující příklad uvádí pouze akce role:

(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/*"

Vytvoření vlastní role

Pokud chcete vytvořit vlastní roli, použijte příkaz New-AzRoleDefinition . Existují dvě metody strukturování role pomocí PSRoleDefinition objektu nebo šablony JSON.

Získání operací pro poskytovatele prostředků

Při vytváření vlastních rolí je důležité znát všechny možné operace od poskytovatelů prostředků. Můžete zobrazit seznam operací poskytovatele prostředků nebo můžete k získání těchto informací použít příkaz Get-AzProviderOperation. Pokud například chcete zkontrolovat všechny dostupné operace pro virtuální počítače, použijte tento příkaz:

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...
...

Vytvoření vlastní role s objektem PSRoleDefinition

Když k vytvoření vlastní role použijete PowerShell, můžete jako výchozí bod použít některou z předdefinovaných rolí nebo můžete začít úplně od začátku. První příklad v této části začíná integrovanou rolí a pak ji přizpůsobí s dalšími oprávněními. Upravte atributy, které chcete přidat ActionsNotActions, nebo AssignableScopes které chcete, a pak změny uložte jako novou roli.

Následující příklad začíná integrovanou rolí Přispěvatel virtuálních počítačů pro vytvoření vlastní role s názvem Operátor virtuálního počítače. Nová role uděluje přístup ke všem akcím čtení poskytovatelů prostředků Microsoft.Compute, Microsoft.Storage a Microsoft.Network a uděluje přístup ke spuštění, restartování a monitorování virtuálních počítačů. Vlastní roli je možné použít ve dvou předplatných.

$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

Následující příklad ukazuje jiný způsob, jak vytvořit vlastní roli operátora virtuálního počítače. Začíná vytvořením nového PSRoleDefinition objektu. Akce jsou zadány v perms proměnné a nastaveny na Actions vlastnost. Vlastnost NotActions je nastavena čtením NotActions z předdefinované role Přispěvatel virtuálních počítačů. Vzhledem k tomu, že přispěvatel virtuálních počítačů nemá žádné NotActions, tento řádek není povinný, ale ukazuje, jak se informace dají načíst z jiné role.

$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

Vytvoření vlastní role pomocí šablony JSON

Šablonu JSON lze použít jako zdrojovou definici pro vlastní roli. Následující příklad vytvoří vlastní roli, která umožňuje přístup pro čtení k úložišti a výpočetním prostředkům, přístup k podpoře a přidá danou roli do dvou předplatných. Vytvořte nový soubor C:\CustomRoles\customrole1.json pomocí následujícího příkladu. Id by mělo být nastaveno na null počáteční vytvoření role, protože se automaticky vygeneruje nové ID.

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

Pokud chcete přidat roli do předplatných, spusťte následující příkaz PowerShellu:

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

Aktualizace vlastní role

Podobně jako při vytváření vlastní role můžete upravit existující vlastní roli pomocí objektu PSRoleDefinition nebo šablony JSON.

Aktualizace vlastní role pomocí objektu PSRoleDefinition

Pokud chcete upravit vlastní roli, nejprve pomocí příkazu Get-AzRoleDefinition načtěte definici role. Za druhé proveďte požadované změny definice role. Nakonec pomocí příkazu Set-AzRoleDefinition uložte upravenou definici role.

Následující příklad přidá Microsoft.Insights/diagnosticSettings/* akci do vlastní role Operátor virtuálního počítače.

$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}

Následující příklad přidá předplatné Azure do přiřaditelných oborů vlastní role Operátor virtuálního počítače.

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}

Následující příklad přidá skupinu pro správu do AssignableScopesvlastní role Operátor virtuálního počítače.

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}

Aktualizace vlastní role pomocí šablony JSON

Pomocí předchozí šablony JSON můžete snadno upravit existující vlastní roli a přidat nebo odebrat akce. Aktualizujte šablonu JSON a přidejte akci čtení pro sítě, jak je znázorněno v následujícím příkladu. Definice uvedené v šabloně nejsou kumulativní použity pro existující definici, což znamená, že role se zobrazí přesně tak, jak zadáte v šabloně. Musíte také aktualizovat pole ID s ID role. Pokud si nejste jistí, co je tato hodnota, můžete k získání těchto informací použít rutinu 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"
  ]
}

Pokud chcete aktualizovat existující roli, spusťte následující příkaz PowerShellu:

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

Odstranění vlastní role

  1. Odeberte všechna přiřazení rolí, která používají vlastní roli. Další informace najdete v tématu Vyhledání přiřazení rolí k odstranění vlastní role.

  2. K odstranění vlastní role použijte příkaz Remove-AzRoleDefinition.

    Následující příklad odebere vlastní roli operátora virtuálního počítače.

    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
    

Další kroky