Skapa eller uppdatera anpassade Azure-roller med Hjälp av Azure PowerShell
Om de inbyggda Azure-rollerna inte uppfyller organisationens specifika behov kan du skapa egna anpassade roller. I den här artikeln beskrivs hur du listar, skapar, uppdaterar eller tar bort anpassade roller med hjälp av Azure PowerShell.
En stegvis självstudie om hur du skapar en anpassad roll finns i Självstudie: Skapa en anpassad Azure-roll med Hjälp av Azure PowerShell.
Kommentar
Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Information om hur du kommer igång finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.
Förutsättningar
Om du vill skapa anpassade roller behöver du:
- Behörigheter för att skapa anpassade roller, till exempel administratör för användaråtkomst
- Azure Cloud Shell eller Azure PowerShell
Lista anpassade roller
Om du vill visa en lista över de roller som är tillgängliga för tilldelning i ett omfång använder du kommandot Get-AzRoleDefinition . I följande exempel visas alla roller som är tillgängliga för tilldelning i den valda prenumerationen.
Get-AzRoleDefinition | FT Name, IsCustom
Name IsCustom
---- --------
Virtual Machine Operator True
AcrImageSigner False
AcrQuarantineReader False
AcrQuarantineWriter False
API Management Service Contributor False
...
I följande exempel visas bara de anpassade roller som är tillgängliga för tilldelning i den valda prenumerationen.
Get-AzRoleDefinition -Custom | FT Name, IsCustom
Name IsCustom
---- --------
Virtual Machine Operator True
Om den valda prenumerationen AssignableScopes
inte finns i rollen visas inte den anpassade rollen.
Visa en lista över en anpassad rolldefinition
Om du vill visa en anpassad rolldefinition använder du Get-AzRoleDefinition. Det här är samma kommando som du använder för en inbyggd roll.
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"
]
}
I följande exempel visas bara rollens åtgärder:
(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/*"
Skapa en anpassad roll
Om du vill skapa en anpassad roll använder du kommandot New-AzRoleDefinition . Det finns två metoder för att strukturera rollen med hjälp av PSRoleDefinition
objekt eller en JSON-mall.
Hämta åtgärder för en resursprovider
När du skapar anpassade roller är det viktigt att känna till alla möjliga åtgärder från resursprovidrar. Du kan visa listan över resursprovideråtgärder eller använda kommandot Get-AzProviderOperation för att hämta den här informationen. Om du till exempel vill kontrollera alla tillgängliga åtgärder för virtuella datorer använder du det här kommandot:
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...
...
Skapa en anpassad roll med PSRoleDefinition-objektet
När du använder PowerShell för att skapa en anpassad roll kan du använda en av de inbyggda rollerna som utgångspunkt eller börja från början. Det första exemplet i det här avsnittet börjar med en inbyggd roll och anpassar den sedan med fler behörigheter. Redigera attributen för att lägga till , Actions
NotActions
eller AssignableScopes
som du vill använda och spara sedan ändringarna som en ny roll.
Följande exempel börjar med den inbyggda rollen Virtuell datordeltagare för att skapa en anpassad roll med namnet Virtual Machine Operator. Den nya rollen ger åtkomst till alla läsåtgärder för Microsoft.Compute,Microsoft.Storage och Microsoft.Network-resursproviders och ger åtkomst till start, omstart och övervakning av virtuella datorer. Den anpassade rollen kan användas i två prenumerationer.
$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
I följande exempel visas ett annat sätt att skapa den anpassade rollen Virtual Machine Operator . Det börjar med att skapa ett nytt PSRoleDefinition
objekt. Åtgärderna anges i variabeln perms
och anges till Actions
egenskapen . Egenskapen NotActions
anges genom att läsa från NotActions
den inbyggda rollen Virtuell datordeltagare . Eftersom Virtual Machine Contributor inte har någon NotActions
krävs inte den här raden, men den visar hur information kan hämtas från en annan roll.
$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
Skapa en anpassad roll med JSON-mall
En JSON-mall kan användas som källdefinition för den anpassade rollen. I följande exempel skapas en anpassad roll som ger läsåtkomst till lagrings- och beräkningsresurser, åtkomst till support och lägger till rollen i två prenumerationer. Skapa en ny fil C:\CustomRoles\customrole1.json
med följande exempel. ID:t ska anges till null
vid första skapandet av rollen eftersom ett nytt ID genereras automatiskt.
{
"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"
]
}
Om du vill lägga till rollen i prenumerationerna kör du följande PowerShell-kommando:
New-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"
Uppdatera en anpassad roll
På samma sätt som när du skapar en anpassad roll kan du ändra en befintlig anpassad roll med antingen PSRoleDefinition
objektet eller en JSON-mall.
Uppdatera en anpassad roll med PSRoleDefinition-objektet
Om du vill ändra en anpassad roll använder du först kommandot Get-AzRoleDefinition för att hämta rolldefinitionen. För det andra gör du önskade ändringar i rolldefinitionen. Använd slutligen kommandot Set-AzRoleDefinition för att spara den ändrade rolldefinitionen.
I följande exempel läggs åtgärden till i Microsoft.Insights/diagnosticSettings/*
den anpassade rollen Virtual Machine Operator .
$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}
I följande exempel läggs en Azure-prenumeration till i de tilldelningsbara omfången för den anpassade rollen Virtual Machine Operator .
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}
I följande exempel läggs en hanteringsgrupp till AssignableScopes
för den anpassade rollen Virtual Machine Operator .
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}
Uppdatera en anpassad roll med en JSON-mall
Med hjälp av den tidigare JSON-mallen kan du enkelt ändra en befintlig anpassad roll för att lägga till eller ta bort åtgärder. Uppdatera JSON-mallen och lägg till läsåtgärden för nätverk enligt följande exempel. Definitionerna som anges i mallen tillämpas inte kumulativt på en befintlig definition, vilket innebär att rollen visas exakt som du anger i mallen. Du måste också uppdatera ID-fältet med ID:t för rollen. Om du inte är säker på vad det här värdet är kan du använda cmdleten Get-AzRoleDefinition för att hämta den här informationen.
{
"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"
]
}
Om du vill uppdatera den befintliga rollen kör du följande PowerShell-kommando:
Set-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"
Ta bort en anpassad roll
Ta bort alla rolltilldelningar som använder den anpassade rollen. Mer information finns i Hitta rolltilldelningar för att ta bort en anpassad roll.
Använd kommandot Remove-AzRoleDefinition för att ta bort den anpassade rollen.
Följande exempel tar bort den anpassade rollen Virtual Machine Operator .
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