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:
- Uprawnienia do tworzenia ról niestandardowych, takich jak Administracja istrator dostępu użytkowników
- Usługa Azure Cloud Shell lub program Azure PowerShell
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, NotActions
aby 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 NotActions
elementu , 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
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.
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