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. Pokud chcete začít, přečtěte si 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:
- Oprávnění k vytváření vlastních rolí, jako je uživatelský přístup Správa istrator
- Azure Cloud Shell nebo Azure PowerShell
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 Actions
NotActions
, 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 AssignableScopes
vlastní 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
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.
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