Sdílet prostřednictvím


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

Pokud integrované role Azure nesplňují konkrétní požadavky vaší organizace, můžete si 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:

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. 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í u role AssignableScopes, vlastní role se nezobrazí.

Výpis definice vlastní role

Pokud chcete vypsat vlastní definici role, použijte 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

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

Získejte operace 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 použít některou z předdefinovaných rolí jako výchozí bod nebo můžete začít úplně od začátku. První příklad v této části začíná vestavěnou rolí a pak ji přizpůsobí s více oprávněními. Upravte atributy a přidejte Actions, NotActionsnebo AssignableScopes, které chcete, a uložte změny jako novou roli.

Následující příklad začíná přispěvatelem virtuálních počítačů předdefinované role 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 čtecím akcím poskytovatelů prostředků Microsoft.Compute, Microsoft.Storagea Microsoft.Network a také umožňuje spuštění, restartování a monitorování virtuálních počítačů. Vlastní roli je možné použít v rámci 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 objektu PSRoleDefinition. Akce jsou zadány v proměnné perms a jsou nastaveny na Actions vlastnost. Vlastnost NotActions je nastavena přečtením NotActions z předdefinované role Přispěvatel virtuálního počítače . Vzhledem k tomu, že Přispěvatel virtuálních počítačů nemá žádné NotActions, tento řádek není povinný, ale ukazuje, jak lze informace získat 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 se mělo nastavit na null při počátečním 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 existující vlastní roli upravit 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á akci Microsoft.Insights/diagnosticSettings/* do vlastní role pro operátora virtuálního stroje.

$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 vlastní role operátora virtuálního počítače u 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}

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ě aplikovány na existující definici, což znamená, že role se objeví přesně tak, jak zadáte v šabloně. Musíte také aktualizovat pole ID s ID role. Pokud si nejste jistí, jaká je tato hodnota, můžete k získání těchto informací použít příkaz 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"

Odstraňte vlastní roli

  1. Odeberte všechna přiřazení rolí, která používají vlastní roli. Další informace naleznete v části Vyhledání přiřazení rolí pro odstranění vlastní role.

  2. Pomocí příkazu Remove-AzRoleDefinition odstraňte vlastní roli.

    Následující příklad odstraní 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