Azure PowerShell kullanarak Azure özel rolleri oluşturma veya güncelleştirme

Azure yerleşik rolleri kuruluşunuzun belirli gereksinimlerini karşılamıyorsa kendi özel rollerinizi oluşturabilirsiniz. Bu makalede, Azure PowerShell kullanarak özel rolleri listeleme, oluşturma, güncelleştirme veya silme işlemleri açıklanmaktadır.

Özel rol oluşturma hakkında adım adım öğretici için bkz . Öğretici: Azure PowerShell kullanarak Azure özel rolü oluşturma.

Not

Azure ile etkileşim kurmak için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz . Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Önkoşullar

Özel roller oluşturmak için şunları yapmanız gerekir:

Özel rolleri listeleme

Bir kapsamda atama için kullanılabilen rolleri listelemek için Get-AzRoleDefinition komutunu kullanın. Aşağıdaki örnekte, seçilen abonelikte atama için kullanılabilen tüm roller listelenmiştir.

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

Aşağıdaki örnekte yalnızca seçili abonelikte atama için kullanılabilen özel roller listelenmiştir.

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

Seçilen abonelik rolün AssignableScopes içinde değilse, özel rol listelenmez.

Özel rol tanımını listeleme

Özel rol tanımını listelemek için Get-AzRoleDefinition kullanın. Bu, yerleşik bir rol için kullandığınız komutla aynıdır.

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

Aşağıdaki örnek yalnızca rolün eylemlerini listeler:

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

Özel rol oluşturma

Özel rol oluşturmak için New-AzRoleDefinition komutunu kullanın. Rolü yapılandırmak için nesne veya JSON şablonu kullanan PSRoleDefinition iki yöntem vardır.

Kaynak sağlayıcısı için işlemleri alma

Özel roller oluşturduğunuzda, kaynak sağlayıcılarının tüm olası işlemlerini bilmeniz önemlidir. Kaynak sağlayıcısı işlemlerinin listesini görüntüleyebilir veya bu bilgileri almak için Get-AzProviderOperation komutunu kullanabilirsiniz. Örneğin, sanal makineler için kullanılabilir tüm işlemleri denetlemek istiyorsanız şu komutu kullanın:

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

PSRoleDefinition nesnesiyle özel rol oluşturma

Özel rol oluşturmak için PowerShell kullandığınızda, yerleşik rollerden birini başlangıç noktası olarak kullanabilir veya sıfırdan başlayabilirsiniz. Bu bölümdeki ilk örnek, yerleşik bir rolle başlar ve daha fazla izinle özelleştirir. özniteliklerini düzenleyerek Actionsistediğiniz , NotActionsveya AssignableScopes ekleyin ve değişiklikleri yeni bir rol olarak kaydedin.

Aşağıdaki örnek, Virtual Machine Operator adlı özel bir rol oluşturmak için Sanal Makine Katılımcısı yerleşik rolüyle başlar. Yeni rol, Microsoft.Compute, Microsoft.Depolama ve Microsoft.Network kaynak sağlayıcılarının tüm okuma eylemlerine erişim verir ve sanal makineleri başlatmak, yeniden başlatmak ve izlemek için erişim verir. Özel rol iki abonelikte kullanılabilir.

$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

Aşağıdaki örnekte Virtual Machine Operator özel rolünü oluşturmanın başka bir yolu gösterilmektedir. Yeni PSRoleDefinition bir nesne oluşturarak başlar. Eylemler değişkeninde perms belirtilir ve özelliğine Actions ayarlanır. NotActions özelliği, Sanal Makine Katkıda Bulunanı yerleşik rolünden okunarak NotActions ayarlanır. Sanal Makine Katkıda Bulunanı'nın herhangi bir NotActionsöğesi olmadığından bu satır gerekli değildir, ancak bilgilerin başka bir rolden nasıl alınabileceğini gösterir.

$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

JSON şablonuyla özel rol oluşturma

Özel rolün kaynak tanımı olarak bir JSON şablonu kullanılabilir. Aşağıdaki örnek, depolama ve işlem kaynaklarına okuma erişimine, desteğe erişime olanak tanıyan ve bu rolü iki aboneliğe ekleyen özel bir rol oluşturur. Aşağıdaki örnekle yeni bir dosya C:\CustomRoles\customrole1.json oluşturun. Yeni bir kimlik otomatik olarak oluşturulduğundan null , kimlik ilk rol oluşturma sırasında olarak ayarlanmalıdır.

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

Rolü aboneliklere eklemek için aşağıdaki PowerShell komutunu çalıştırın:

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

Özel rolü güncelleştirme

Özel rol oluşturmaya benzer şekilde, nesneyi veya JSON şablonunu kullanarak PSRoleDefinition var olan bir özel rolü değiştirebilirsiniz.

ÖZEL rolü PSRoleDefinition nesnesiyle güncelleştirme

Özel bir rolü değiştirmek için önce Get-AzRoleDefinition komutunu kullanarak rol tanımını alın. İkincisi, rol tanımında istediğiniz değişiklikleri yapın. Son olarak, değiştirilen rol tanımını kaydetmek için Set-AzRoleDefinition komutunu kullanın.

Aşağıdaki örnek, eylemi Virtual Machine Operator özel rolüne eklerMicrosoft.Insights/diagnosticSettings/*.

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

Aşağıdaki örnek, Virtual Machine Operator özel rolünün atanabilir kapsamlarına bir Azure aboneliği ekler.

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}

Aşağıdaki örnek, Sanal Makine Operatörü özel rolüne AssignableScopes bir yönetim grubu ekler.

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}

JSON şablonuyla özel rol güncelleştirme

Önceki JSON şablonunu kullanarak, eylemleri eklemek veya kaldırmak için var olan bir özel rolü kolayca değiştirebilirsiniz. JSON şablonunu güncelleştirin ve aşağıdaki örnekte gösterildiği gibi ağ için okuma eylemini ekleyin. Şablonda listelenen tanımlar mevcut bir tanıma toplu olarak uygulanmaz; yani rol, şablonda belirttiğiniz gibi görünür. Kimlik alanını rolün kimliğiyle de güncelleştirmeniz gerekir. Bu değerin ne olduğundan emin değilseniz, bu bilgileri almak için Get-AzRoleDefinition cmdlet'ini kullanabilirsiniz.

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

Mevcut rolü güncelleştirmek için aşağıdaki PowerShell komutunu çalıştırın:

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

Özel rolü silme

  1. Özel rolü kullanan tüm rol atamalarını kaldırın. Daha fazla bilgi için bkz . Özel rolü silmek için rol atamalarını bulma.

  2. Özel rolü silmek için Remove-AzRoleDefinition komutunu kullanın.

    Aşağıdaki örnek, Sanal Makine Operatörü özel rolünü kaldırır.

    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
    

Sonraki adımlar