Udostępnij za pośrednictwem


Tworzenie lub aktualizowanie ról niestandardowych platformy Azure przy użyciu programu Azure PowerShell

Jeśli wbudowane role platformy Azure nie spełniają konkretnych potrzeb organizacji, możesz utworzyć własne role niestandardowe. W tym artykule opisano sposób tworzenia, aktualizowania lub usuwania ról niestandardowych przy użyciu programu Azure PowerShell.

Aby zapoznać się z samouczkiem krok po kroku dotyczącym tworzenia roli niestandardowej, zobacz Samouczek: tworzenie roli niestandardowej platformy Azure przy użyciu programu Azure PowerShell.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Wymagania wstępne

Aby utworzyć role niestandardowe, potrzebne są następujące elementy:

Wyświetlanie ról niestandardowych

Aby wyświetlić listę ról dostępnych do przypisania w zakresie, użyj polecenia Get-AzRoleDefinition . W poniższym przykładzie wymieniono wszystkie role, które są dostępne do przypisania w wybranej subskrypcji.

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

W poniższym przykładzie wymieniono tylko role niestandardowe, które są dostępne do przypisania w wybranej subskrypcji.

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

Jeśli wybrana subskrypcja nie znajduje się w AssignableScopes roli, rola niestandardowa nie zostanie wyświetlona.

Wyświetlanie listy definicji roli niestandardowej

Aby wyświetlić listę definicji roli niestandardowej, użyj polecenia Get-AzRoleDefinition. Jest to to samo polecenie, którego używasz dla wbudowanej roli.

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

W poniższym przykładzie przedstawiono tylko akcje roli:

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

Tworzenie roli niestandardowej

Aby utworzyć rolę niestandardową, użyj polecenia New-AzRoleDefinition . Istnieją dwie metody struktury roli przy użyciu PSRoleDefinition obiektu lub szablonu JSON.

Pobieranie operacji dla dostawcy zasobów

Podczas tworzenia ról niestandardowych ważne jest, aby znać wszystkie możliwe operacje od dostawców zasobów. Aby uzyskać te informacje, możesz wyświetlić listę operacji dostawcy zasobów lub użyć polecenia Get-AzProviderOperation . Jeśli na przykład chcesz sprawdzić wszystkie dostępne operacje dla maszyn wirtualnych, użyj następującego polecenia:

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

Tworzenie roli niestandardowej za pomocą obiektu PSRoleDefinition

Gdy używasz programu PowerShell do tworzenia roli niestandardowej, możesz użyć jednej z wbudowanych ról jako punktu początkowego lub zacząć od podstaw. Pierwszy przykład w tej sekcji rozpoczyna się od wbudowanej roli, a następnie dostosowuje ją z większymi uprawnieniami. Edytuj atrybuty, NotActionsaby dodać Actions, lubAssignableScopes, które chcesz, a następnie zapisz zmiany jako nową rolę.

Poniższy przykład rozpoczyna się od wbudowanej roli Współautor maszyny wirtualnej w celu utworzenia roli niestandardowej o nazwie Operator maszyny wirtualnej. Nowa rola udziela dostępu do wszystkich akcji odczytu dostawców zasobów Microsoft.Compute, Microsoft.Storage i Microsoft.Network oraz udziela dostępu do uruchamiania, ponownego uruchamiania i monitorowania maszyn wirtualnych. Rola niestandardowa może być używana w dwóch subskrypcjach.

$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

W poniższym przykładzie pokazano inny sposób tworzenia roli niestandardowej Operator maszyny wirtualnej. Rozpoczyna się od utworzenia nowego PSRoleDefinition obiektu. Akcje są określane w zmiennej perms i ustawiane na Actions właściwość . Właściwość NotActions jest ustawiana przez odczytanie NotActions wbudowanej roli Współautor maszyny wirtualnej. Ponieważ współautor maszyny wirtualnej nie ma żadnego NotActionselementu , ten wiersz nie jest wymagany, ale pokazuje, jak można pobrać informacje z innej roli.

$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

Tworzenie roli niestandardowej przy użyciu szablonu JSON

Szablon JSON może służyć jako definicja źródłowa roli niestandardowej. W poniższym przykładzie tworzona jest rola niestandardowa, która umożliwia dostęp do odczytu do magazynu i zasobów obliczeniowych, dostęp do obsługi i dodaje rolę do dwóch subskrypcji. Utwórz nowy plik C:\CustomRoles\customrole1.json przy użyciu poniższego przykładu. Identyfikator powinien być ustawiony na null wartość przy początkowym tworzeniu roli, ponieważ nowy identyfikator jest generowany automatycznie.

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

Aby dodać rolę do subskrypcji, uruchom następujące polecenie programu PowerShell:

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

Aktualizacja roli niestandardowej

Podobnie jak w przypadku tworzenia roli niestandardowej, można zmodyfikować istniejącą rolę niestandardową przy użyciu PSRoleDefinition obiektu lub szablonu JSON.

Aktualizowanie roli niestandardowej za pomocą obiektu PSRoleDefinition

Aby zmodyfikować rolę niestandardową, najpierw użyj polecenia Get-AzRoleDefinition , aby pobrać definicję roli. Po drugie wprowadź żądane zmiany w definicji roli. Na koniec użyj polecenia Set-AzRoleDefinition , aby zapisać zmodyfikowaną definicję roli.

Poniższy przykład dodaje Microsoft.Insights/diagnosticSettings/* akcję do roli niestandardowej Operator maszyny wirtualnej.

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

W poniższym przykładzie dodano subskrypcję platformy Azure do możliwych do przypisania zakresów roli niestandardowej Operator maszyny wirtualnej.

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}

W poniższym przykładzie dodano grupę zarządzania do AssignableScopes roli niestandardowej Operator maszyny wirtualnej.

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}

Aktualizowanie roli niestandardowej przy użyciu szablonu JSON

Korzystając z poprzedniego szablonu JSON, można łatwo zmodyfikować istniejącą rolę niestandardową, aby dodać lub usunąć akcje. Zaktualizuj szablon JSON i dodaj akcję odczytu dla sieci, jak pokazano w poniższym przykładzie. Definicje wymienione w szablonie nie są stosowane zbiorczo do istniejącej definicji, co oznacza, że rola jest wyświetlana dokładnie tak, jak określono w szablonie. Należy również zaktualizować pole Identyfikator przy użyciu identyfikatora roli. Jeśli nie masz pewności, jaka jest ta wartość, możesz użyć polecenia cmdlet Get-AzRoleDefinition , aby uzyskać te informacje.

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

Aby zaktualizować istniejącą rolę, uruchom następujące polecenie programu PowerShell:

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

Usuwanie roli niestandardowej

  1. Usuń wszystkie przypisania ról, które używają roli niestandardowej. Aby uzyskać więcej informacji, zobacz Znajdowanie przypisań ról w celu usunięcia roli niestandardowej.

  2. Użyj polecenia Remove-AzRoleDefinition, aby usunąć rolę niestandardową.

    Poniższy przykład usuwa rolę niestandardową Operator maszyny wirtualnej.

    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
    

Następne kroki