Egyéni Azure-szerepkörök létrehozása vagy frissítése az Azure PowerShell használatával

Ha az Azure beépített szerepkörei nem felelnek meg a szervezet adott igényeinek, létrehozhat saját egyéni szerepköröket. Ez a cikk bemutatja, hogyan listázhatja, hozhat létre, frissíthet vagy törölhet egyéni szerepköröket az Azure PowerShell használatával.

Az egyéni szerepkörök létrehozásáról részletes oktatóanyagot a következő oktatóanyagban talál : Egyéni Azure-szerepkör létrehozása az Azure PowerShell használatával.

Megjegyzés:

We recommend that you use the Azure Az PowerShell module to interact with Azure. See Install Azure PowerShell to get started. To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Előfeltételek

Egyéni szerepkörök létrehozásához a következőkre van szükség:

Egyéni szerepkörök listázása

A hatókörön belüli hozzárendeléshez elérhető szerepkörök listájához használja a Get-AzRoleDefinition parancsot. Az alábbi példa felsorolja a kijelölt előfizetésben hozzárendelhető összes szerepkört.

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

Az alábbi példa csak a kijelölt előfizetésben hozzárendelhető egyéni szerepköröket sorolja fel.

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

Ha a kijelölt előfizetés nem szerepel a AssignableScopes szerepkörben, az egyéni szerepkör nem lesz felsorolva.

Egyéni szerepkördefiníció listázása

Egyéni szerepkördefiníciók listázásához használja a Get-AzRoleDefinition parancsot. Ez ugyanaz a parancs, mint egy beépített szerepkörhöz.

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

Az alábbi példa csak a szerepkör műveleteit sorolja fel:

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

Create a custom role

Egyéni szerepkör létrehozásához használja a New-AzRoleDefinition parancsot. A szerepkör strukturálásának két módja van: objektum vagy JSON-sablon használatával PSRoleDefinition .

Erőforrás-szolgáltató műveleteinek lekérése

Egyéni szerepkörök létrehozásakor fontos ismerni az erőforrás-szolgáltatóktól származó összes lehetséges műveletet. Megtekintheti az erőforrás-szolgáltatói műveletek listáját, vagy a Get-AzProviderOperation paranccsal lekérheti ezeket az információkat. Ha például ellenőrizni szeretné a virtuális gépek összes elérhető műveletét, használja ezt a parancsot:

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

Egyéni szerepkör létrehozása a PSRoleDefinition objektummal

Ha a PowerShell használatával hoz létre egyéni szerepkört, kiindulási pontként használhatja az egyik beépített szerepkört , vagy az alapoktól kezdve. Ebben a szakaszban az első példa egy beépített szerepkörrel kezdődik, majd további engedélyekkel szabja testre. Szerkessze az attribútumokat a Actionskívánt vagy kívánt attribútumok NotActionsAssignableScopes hozzáadásához, majd mentse a módosításokat új szerepkörként.

Az alábbi példa a virtuálisgép-közreműködő beépített szerepkörével kezdődik egy virtuálisgép-üzemeltető nevű egyéni szerepkör létrehozásához. Az új szerepkör hozzáférést biztosít a Microsoft.Compute, a Microsoft.Storage és a Microsoft.Network erőforrás-szolgáltatók összes olvasási műveletéhez, és hozzáférést biztosít a virtuális gépek indításához, újraindításához és figyeléséhez. Az egyéni szerepkör két előfizetésben használható.

$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

Az alábbi példa egy másik módszert mutat be a Virtual Machine Operator egyéni szerepkörének létrehozására. Ez egy új PSRoleDefinition objektum létrehozásával kezdődik. A műveletek a perms változóban vannak megadva, és a Actions tulajdonságra vannak állítva. A NotActions tulajdonság úgy van beállítva, hogy beolvassa a NotActionsvirtuálisgép-közreműködő beépített szerepköréből. Mivel a virtuálisgép-közreműködő nem rendelkezik ilyen NotActionsbeállítással, ez a sor nem kötelező, de bemutatja, hogyan kérhetők le információk egy másik szerepkörből.

$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

Egyéni szerepkör létrehozása JSON-sablonnal

Az egyéni szerepkör forrásdefiníciójaként JSON-sablon használható. Az alábbi példa egy egyéni szerepkört hoz létre, amely olvasási hozzáférést biztosít a tárolási és számítási erőforrásokhoz, hozzáférést biztosít a támogatáshoz, és hozzáadja ezt a szerepkört két előfizetéshez. Hozzon létre egy új fájlt C:\CustomRoles\customrole1.json az alábbi példával. Az azonosítót a kezdeti szerepkörlétrehozáskor null kell beállítani, mivel az új azonosító automatikusan létrejön.

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

A szerepkör előfizetésekhez való hozzáadásához futtassa a következő PowerShell-parancsot:

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

Egyéni szerepkörök frissítése

Az egyéni szerepkör létrehozásához hasonlóan módosíthatja a meglévő egyéni szerepköröket az objektum vagy egy PSRoleDefinition JSON-sablon használatával.

Egyéni szerepkör frissítése a PSRoleDefinition objektummal

Egyéni szerepkör módosításához először a Get-AzRoleDefinition paranccsal kérje le a szerepkördefiníciót. Másodszor végezze el a kívánt módosításokat a szerepkör-definíción. Végül a Set-AzRoleDefinition paranccsal mentse a módosított szerepkördefiníciót.

Az alábbi példa hozzáadja a műveletet a Microsoft.Insights/diagnosticSettings/*Virtual Machine Operator egyéni szerepköréhez.

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

Az alábbi példa egy Azure-előfizetést ad hozzá a Virtuálisgép-kezelő egyéni szerepkör hozzárendelhető hatóköreihez.

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}

Az alábbi példa egy felügyeleti csoportot AssignableScopes ad hozzá a virtuálisgép-kezelő egyéni szerepköréhez.

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}

Egyéni szerepkör frissítése JSON-sablonnal

Az előző JSON-sablonnal egyszerűen módosíthatja a meglévő egyéni szerepköröket a műveletek hozzáadásához vagy eltávolításához. Frissítse a JSON-sablont, és adja hozzá az olvasási műveletet a hálózatkezeléshez az alábbi példában látható módon. A sablonban felsorolt definíciók nem lesznek kumulatívan alkalmazva egy meglévő definícióra, ami azt jelenti, hogy a szerepkör pontosan a sablonban megadott módon jelenik meg. Az Azonosító mezőt a szerepkör azonosítójával is frissítenie kell. Ha nem biztos abban, hogy mi ez az érték, a Get-AzRoleDefinition parancsmaggal lekérheti ezeket az információkat.

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

A meglévő szerepkör frissítéséhez futtassa a következő PowerShell-parancsot:

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

Egyéni szerepkörök törlése

  1. Távolítsa el az egyéni szerepkört használó szerepkör-hozzárendeléseket. További információ: Szerepkör-hozzárendelések keresése egyéni szerepkör törléséhez.

  2. Az egyéni szerepkör törléséhez használja a Remove-AzRoleDefinition parancsot.

    Az alábbi példa eltávolítja a virtuálisgép-kezelő egyéni szerepkörét.

    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
    

További lépések