Membuat atau memperbarui peran kustom Azure menggunakan Azure PowerShell

Jika peran bawaan Microsoft Azure tidak memenuhi kebutuhan spesifik organisasi, Anda dapat membuat peran kustom sendiri. Artikel ini menjelaskan cara mencantumkan, membuat, memperbarui, atau menghapus peran kustom menggunakan Azure PowerShell.

Untuk tutorial langkah demi langkah tentang cara membuat peran kustom, lihat Tutorial: Membuat peran kustom Azure menggunakan Azure PowerShell.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Prasyarat

Untuk membuat peran kustom, Anda perlu:

Mencantumkan peran kustom

Untuk mencantumkan peran yang tersedia untuk penugasan pada cakupan, gunakan perintah Get-AzRoleDefinition. Contoh berikut mencantumkan semua peran yang tersedia untuk penugasan dalam langganan yang dipilih.

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

Contoh berikut ini hanya mencantumkan peran kustom yang tersedia untuk penugasan dalam langganan yang dipilih.

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

Jika langganan yang dipilih tidak berperan di AssignableScopes, peran kustom tidak akan dicantumkan.

Mencantumkan definisi peran kustom

Untuk mencantumkan definisi peran kustom, gunakan Get-AzRoleDefinition. Ini adalah perintah yang sama seperti yang digunakan untuk peran bawaan.

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

Contoh berikut mencantumkan, hanya tindakan dari peran:

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

Membuat peran kustom

Untuk membuat peran kustom, gunakan perintah New-AzRoleDefinition. Ada dua metode penataan peran, menggunakan objek PSRoleDefinition atau templat JSON.

Mendapatkan operasi untuk penyedia sumber

Ketika membuat peran kustom, penting untuk mengetahui semua operasi yang mungkin dari penyedia sumber. Anda dapat melihat daftar operasi penyedia sumber atau menggunakan perintah Get-AzProviderOperation untuk mendapatkan informasi ini. Misalnya, jika ingin memeriksa semua operasi yang tersedia untuk komputer virtual, gunakan perintah ini:

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

Membuat peran kustom dengan objek PSRoleDefinition

Saat menggunakan PowerShell untuk membuat peran kustom, Anda dapat menggunakan salah satu peran bawaan sebagai titik awal, atau memulai dari awal. Contoh pertama di bagian ini dimulai dengan peran bawaan lalu menyesuaikannya dengan lebih banyak izin. Edit atribut untuk menambahkan Actions, NotActions atau AssignableScopes yang diinginkan, lalu simpan perubahan sebagai peran baru.

Contoh berikut dimulai dengan peran bawaan Kontributor Komputer Virtual untuk membuat peran kustom bernama Operator Virtual Mesin. Peran baru ini memberikan akses ke semua operasi penyedia sumber Microsoft.Compute, Microsoft.Storage, dan Microsoft.Network, serta memberikan akses ke mesin virtual untuk memulai, menghidupkan ulang, dan memantau. Peran kustom dapat digunakan dalam dua langganan.

$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

Contoh berikut menunjukkan cara lain untuk membuat peran kustom Operator Komputer Virtual. Dimulai dengan membuat objek PSRoleDefinition baru. Tindakan ditentukan dalam variabel perms dan diatur ke properti Actions. Properti NotActions diatur dengan membaca NotActions dari peran bawaan Kontributor Komputer Virtual. Karena Kontributor Komputer Virtual tidak memiliki NotActions, baris ini tidak diperlukan, tetapi menunjukkan bagaimana informasi dapat diambil dari peran lain.

$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

Membuat peran kustom dengan templat JSON

Templat JSON dapat digunakan sebagai definisi sumber untuk peran kustom. Contoh berikut membuat peran kustom yang mengizinkan akses baca ke penyimpanan dan sumber daya komputasi, akses dukungan, dan menambahkan peran tersebut ke dua langganan. Buat file baru C:\CustomRoles\customrole1.json dengan contoh berikut. Id harus diatur ke null dalam pembuatan peran awal sebagai ID baru dibuat secara otomatis.

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

Untuk menambahkan peran ke langganan, jalankan perintah PowerShell berikut:

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

Perbarui peran kustom

Mirip dengan membuat peran kustom, Anda dapat memodifikasi peran kustom yang ada menggunakan objek PSRoleDefinition atau templat JSON.

Memperbarui peran kustom dengan objek PSRoleDefinition

Untuk memodifikasi peran kustom, gunakan perintah Get-AzRoleDefinition terlebih dahulu untuk mengambil definisi peran. Kedua, buat perubahan yang diinginkan pada definisi peran. Terakhir, gunakan perintah Set-AzRoleDefinition untuk menyimpan definisi peran yang dimodifikasi.

Contoh berikut menambahkan tindakan Microsoft.Insights/diagnosticSettings/* ke peran khusus Operator Mesin Virtual.

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

Contoh berikut menambahkan langganan Azure ke cakupan yang dapat ditetapkan dari peran kustom Operator Komputer Virtual.

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}

Contoh berikut menambahkan grup manajemen ke AssignableScopes dari peran kustom Operator Komputer Virtual.

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}

Memperbarui peran kustom dengan templat JSON

Menggunakan templat JSON sebelumnya, Anda dapat dengan mudah memodifikasi peran kustom yang ada untuk menambahkan atau menghapus Tindakan. Perbarui templat JSON dan tambahkan tindakan baca untuk jaringan seperti yang ditunjukkan dalam contoh berikut. Definisi yang tercantum dalam templat tidak diterapkan secara kumulatif ke definisi yang ada, yang berarti bahwa peran yang muncul persis seperti yang ditentukan dalam templat. Anda juga perlu memperbarui bidang Id dengan ID dari peran. Jika tidak yakin dengan nilai ini, Anda dapat menggunakan cmdlet Get-AzRoleDefinition untuk mendapatkan informasi ini.

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

Untuk memperbarui peran yang sudah ada, jalankan perintah PowerShell berikut:

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

Menghapus peran kustom

  1. Hapus penetapan peran apa pun yang menggunakan peran kustom. Untuk informasi selengkapnya, lihat Menemukan penetapan peran untuk menghapus peran kustom.

  2. Gunakan perintah Remove-AzRoleDefinition untuk menghapus peran kustom.

    Contoh berikut menghapus peran kustom Operator Komputer Virtual.

    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
    

Langkah berikutnya