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. Se Installera Azure PowerShell för att komma igång. 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:

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 , ActionsNotActionseller 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 NotActionskrä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

  1. Ta bort alla rolltilldelningar som använder den anpassade rollen. Mer information finns i Hitta rolltilldelningar för att ta bort en anpassad roll.

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

Nästa steg