Aangepaste Azure-rollen maken of bijwerken met behulp van Azure PowerShell

Als de ingebouwde rollen van Azure niet voldoen aan de specifieke behoeften van uw organisatie, kunt u uw eigen aangepaste rollen maken. In dit artikel wordt beschreven hoe u aangepaste rollen kunt weergeven, maken, bijwerken of verwijderen met behulp van Azure PowerShell.

Zie Zelfstudie: Een aangepaste Azure-rol maken met behulp van Azure PowerShell voor een stapsgewijze zelfstudie over het maken van een aangepaste rol.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Vereisten

Als u aangepaste rollen wilt maken, hebt u het volgende nodig:

Aangepaste rollen opvragen

Gebruik de opdracht Get-AzRoleDefinition om de rollen weer te geven die beschikbaar zijn voor toewijzing in een bereik. In het volgende voorbeeld ziet u alle rollen die beschikbaar zijn voor toewijzing in het geselecteerde abonnement.

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

In het volgende voorbeeld ziet u alleen de aangepaste rollen die beschikbaar zijn voor toewijzing in het geselecteerde abonnement.

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

Als het geselecteerde abonnement zich niet in de AssignableScopes rol bevindt, wordt de aangepaste rol niet weergegeven.

Een aangepaste roldefinitie weergeven

Als u een aangepaste roldefinitie wilt weergeven, gebruikt u Get-AzRoleDefinition. Dit is dezelfde opdracht als u gebruikt voor een ingebouwde rol.

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

In het volgende voorbeeld ziet u alleen de acties van de rol:

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

Een aangepaste rol maken

Gebruik de opdracht New-AzRoleDefinition om een aangepaste rol te maken. Er zijn twee methoden voor het structureren van de rol, met behulp van PSRoleDefinition een object of een JSON-sjabloon.

Bewerkingen ophalen voor een resourceprovider

Wanneer u aangepaste rollen maakt, is het belangrijk dat u alle mogelijke bewerkingen van de resourceproviders kent. U kunt de lijst met resourceproviderbewerkingen bekijken of u kunt de opdracht Get-AzProviderOperation gebruiken om deze informatie op te halen. Als u bijvoorbeeld alle beschikbare bewerkingen voor virtuele machines wilt controleren, gebruikt u deze opdracht:

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

Een aangepaste rol maken met het PSRoleDefinition-object

Wanneer u PowerShell gebruikt om een aangepaste rol te maken, kunt u een van de ingebouwde rollen als uitgangspunt gebruiken of kunt u helemaal opnieuw beginnen. Het eerste voorbeeld in deze sectie begint met een ingebouwde rol en past deze vervolgens aan met meer machtigingen. Bewerk de kenmerken om de Actionsgewenste , NotActionsof AssignableScopes gewenste kenmerken toe te voegen en sla de wijzigingen vervolgens op als een nieuwe rol.

Het volgende voorbeeld begint met de ingebouwde rol Inzender voor virtuele machines om een aangepaste rol met de naam Virtuele-machineoperator te maken. De nieuwe rol verleent toegang tot alle leesacties van Microsoft.Compute, Microsoft.Storage en Microsoft.Network-resourceproviders en verleent toegang tot het starten, opnieuw opstarten en bewaken van virtuele machines. De aangepaste rol kan worden gebruikt in twee abonnementen.

$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

In het volgende voorbeeld ziet u een andere manier om de aangepaste rol Virtuele-machineoperator te maken. Het begint met het maken van een nieuw PSRoleDefinition object. De acties worden opgegeven in de perms variabele en ingesteld op de Actions eigenschap. De NotActions eigenschap wordt ingesteld door de NotActions ingebouwde rol Inzender voor virtuele machines te lezen. Omdat Inzender voor virtuele machines geen enkele regel heeft NotActions, is deze regel niet vereist, maar wordt weergegeven hoe informatie kan worden opgehaald uit een andere rol.

$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

Een aangepaste rol maken met JSON-sjabloon

Een JSON-sjabloon kan worden gebruikt als de brondefinitie voor de aangepaste rol. In het volgende voorbeeld wordt een aangepaste rol gemaakt die leestoegang tot opslag- en rekenresources toestaat, toegang tot ondersteuning en die rol toevoegt aan twee abonnementen. Maak een nieuw bestand C:\CustomRoles\customrole1.json met het volgende voorbeeld. De id moet worden ingesteld null op het maken van de eerste rol, omdat er automatisch een nieuwe id wordt gegenereerd.

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

Voer de volgende PowerShell-opdracht uit om de rol toe te voegen aan de abonnementen:

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

Een aangepaste rol bijwerken

Net als bij het maken van een aangepaste rol kunt u een bestaande aangepaste rol wijzigen met behulp van het PSRoleDefinition object of een JSON-sjabloon.

Een aangepaste rol bijwerken met het PSRoleDefinition-object

Als u een aangepaste rol wilt wijzigen, gebruikt u eerst de opdracht Get-AzRoleDefinition om de roldefinitie op te halen. Breng ten tweede de gewenste wijzigingen aan in de roldefinitie. Gebruik ten slotte de opdracht Set-AzRoleDefinition om de gewijzigde roldefinitie op te slaan.

In het volgende voorbeeld wordt de Microsoft.Insights/diagnosticSettings/* actie toegevoegd aan de aangepaste rol Virtuele-machineoperator .

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

In het volgende voorbeeld wordt een Azure-abonnement toegevoegd aan de toewijsbare bereiken van de aangepaste rol 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}

In het volgende voorbeeld wordt een beheergroep toegevoegd aan AssignableScopes de aangepaste rol 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}

Een aangepaste rol bijwerken met een JSON-sjabloon

Met behulp van de vorige JSON-sjabloon kunt u eenvoudig een bestaande aangepaste rol wijzigen om acties toe te voegen of te verwijderen. Werk de JSON-sjabloon bij en voeg de leesactie voor netwerken toe, zoals wordt weergegeven in het volgende voorbeeld. De definities die in de sjabloon worden vermeld, worden niet cumulatief toegepast op een bestaande definitie, wat betekent dat de rol precies wordt weergegeven zoals u in de sjabloon opgeeft. U moet ook het veld Id bijwerken met de id van de rol. Als u niet zeker weet wat deze waarde is, kunt u de cmdlet Get-AzRoleDefinition gebruiken om deze informatie op te halen.

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

Voer de volgende PowerShell-opdracht uit om de bestaande rol bij te werken:

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

Een aangepaste rol verwijderen

  1. Verwijder roltoewijzingen die gebruikmaken van de aangepaste rol. Zie Roltoewijzingen zoeken om een aangepaste rol te verwijderen voor meer informatie.

  2. Gebruik de opdracht Remove-AzRoleDefinition om de aangepaste rol te verwijderen.

    In het volgende voorbeeld wordt de aangepaste rol Operator voor virtuele machines verwijderd.

    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
    

Volgende stappen