Gestire il controllo degli accessi in base al ruolo con Azure PowerShellManage Role-Based Access Control with Azure PowerShell

È possibile usare il controllo degli accessi in base al ruolo (RBAC) nel portale di Azure e nell'API di Azure Resource Manager per gestire con estrema precisione l'accesso alla propria sottoscrizione.You can use Role-Based Access Control (RBAC) in the Azure portal and Azure Resource Management API to manage access to your subscription at a fine-grained level. Con questa funzionalità è possibile concedere l'accesso a utenti, gruppi o entità servizio di Active Directory assegnando loro dei ruoli in un determinato ambito.With this feature, you can grant access for Active Directory users, groups, or service principals by assigning some roles to them at a particular scope.

Prima di usare PowerShell per gestire il controllo degli accessi in base al ruolo, è necessario avere i prerequisiti seguenti:Before you can use PowerShell to manage RBAC, you need the following prerequisites:

Elenco dei ruoliList roles

Elencare tutti i ruoli disponibiliList all available roles

Per elencare i ruoli del controllo degli accessi in base al ruolo disponibili per l'assegnazione e controllare le operazioni a cui concedono l'accesso, usare Get-AzureRmRoleDefinition.To list RBAC roles that are available for assignment and to inspect the operations to which they grant access, use Get-AzureRmRoleDefinition.

Get-AzureRmRoleDefinition | FT Name, Description

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition - Schermata

Elencare le azioni di un ruoloList actions of a role

Per elencare le azioni per un ruolo specifico, usare Get-AzureRmRoleDefinition <role name>.To list the actions for a specific role, use Get-AzureRmRoleDefinition <role name>.

Get-AzureRmRoleDefinition Contributor | FL Actions, NotActions

(Get-AzureRmRoleDefinition "Virtual Machine Contributor").Actions

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition per un ruolo specifico - Schermata

Assegnazioni di accessoSee who has access

Per elencare le assegnazioni di accesso al controllo degli accessi in base al ruolo, usare Get-AzureRmRoleAssignment.To list RBAC access assignments, use Get-AzureRmRoleAssignment.

Elencare le assegnazioni di ruolo in un ambito specificoList role assignments at a specific scope

È possibile elencare le assegnazioni di accesso in base a sottoscrizione, gruppo di risorse o risorsa specificati.You can see all the access assignments for a specified subscription, resource group, or resource. Ad esempio, per elencare tutte le assegnazioni attive per un gruppo di risorse, usare Get-AzureRmRoleAssignment -ResourceGroupName <resource group name>.For example, to see the all the active assignments for a resource group, use Get-AzureRmRoleAssignment -ResourceGroupName <resource group name>.

Get-AzureRmRoleAssignment -ResourceGroupName Pharma-Sales-ProjectForcast | FL DisplayName, RoleDefinitionName, Scope

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition per un gruppo di risorse - Schermata

Elencare i ruoli assegnati ad un utenteList roles assigned to a user

Per elencare tutti i ruoli assegnati a un utente specifico e i ruoli assegnati ai gruppi a cui appartiene l'utente, usare Get-AzureRmRoleAssignment -SignInName <User email> -ExpandPrincipalGroups.To list all the roles that are assigned to a specified user and the roles that are assigned to the groups to which the user belongs, use Get-AzureRmRoleAssignment -SignInName <User email> -ExpandPrincipalGroups.

Get-AzureRmRoleAssignment -SignInName sameert@aaddemo.com | FL DisplayName, RoleDefinitionName, Scope

Get-AzureRmRoleAssignment -SignInName sameert@aaddemo.com -ExpandPrincipalGroups | FL DisplayName, RoleDefinitionName, Scope

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition per un utente - Schermata

Elencare le assegnazioni di ruoli per l'amministratore e i coamministratori del servizio classiciList classic service administrator and coadmin role assignments

Per elencare le assegnazioni dell'accesso per l'amministratore e i coamministratori della sottoscrizione classici, usare:To list access assignments for the classic subscription administrator and coadministrators, use:

Get-AzureRmRoleAssignment -IncludeClassicAdministrators

Concedere l'accessoGrant access

Cercare gli ID oggettoSearch for object IDs

Per assegnare un ruolo, è necessario identificare l'oggetto (utente, gruppo o applicazione) e l'ambito.To assign a role, you need to identify both the object (user, group, or application) and the scope.

Se non si conosce l'ID sottoscrizione, è possibile reperire tale informazione nel pannello Sottoscrizioni nel portale di Azure.If you don't know the subscription ID, you can find it in the Subscriptions blade on the Azure portal. Per informazioni su come eseguire una query per l'ID della sottoscrizione,vedere Get-AzureSubscription (Get-AzureSubscription) in MSDN.To learn how to query for the subscription ID, see Get-AzureSubscription on MSDN.

Per ottenere l'ID oggetto per un gruppo di Azure AD, usare:To get the object ID for an Azure AD group, use:

Get-AzureRmADGroup -SearchString <group name in quotes>

Per ottenere l'ID oggetto per un'entità servizio di Azure AD o applicazione, usare:To get the object ID for an Azure AD service principal or application, use:

Get-AzureRmADServicePrincipal -SearchString <service name in quotes>

Assegnare un ruolo a un'applicazione nell'ambito della sottoscrizioneAssign a role to an application at the subscription scope

Per concedere l'accesso a un'applicazione nell'ambito della sottoscrizione, usare:To grant access to an application at the subscription scope, use:

New-AzureRmRoleAssignment -ObjectId <application id> -RoleDefinitionName <role name> -Scope <subscription id>

Controllo degli accessi in base al ruolo di PowerShell - New-AzureRmRoleAssignment - Schermata

Assegnare un ruolo a un utente nell'ambito di un gruppo di risorseAssign a role to a user at the resource group scope

Per concedere l'accesso a un utente nell'ambito di un gruppo di risorse, usare:To grant access to a user at the resource group scope, use:

New-AzureRmRoleAssignment -SignInName <email of user> -RoleDefinitionName <role name in quotes> -ResourceGroupName <resource group name>

Controllo degli accessi in base al ruolo di PowerShell - New-AzureRmRoleAssignment - Schermata

Assegnare un ruolo a un gruppo nell'ambito delle risorseAssign a role to a group at the resource scope

Per concedere l'accesso a un gruppo nell'ambito delle risorse, usare:To grant access to a group at the resource scope, use:

New-AzureRmRoleAssignment -ObjectId <object id> -RoleDefinitionName <role name in quotes> -ResourceName <resource name> -ResourceType <resource type> -ParentResource <parent resource> -ResourceGroupName <resource group name>

Controllo degli accessi in base al ruolo di PowerShell - New-AzureRmRoleAssignment - Schermata

Rimuovere un accessoRemove access

Per rimuovere l'accesso per utenti, gruppi e applicazioni, usare:To remove access for users, groups, and applications, use:

Remove-AzureRmRoleAssignment -ObjectId <object id> -RoleDefinitionName <role name> -Scope <scope such as subscription id>

Controllo degli accessi in base al ruolo di PowerShell - Remove-AzureRmRoleAssignment - Schermata

Creare un ruolo personalizzatoCreate a custom role

Per creare un ruolo personalizzato, usare il comando New-AzureRmRoleDefinition .To create a custom role, use the New-AzureRmRoleDefinition command. Esistono due metodi per strutturare il ruolo, usare PSRoleDefinitionObject o un modello JSON.There are two methods of structuring the role, using PSRoleDefinitionObject or a JSON template.

Ottenere le azioni per un provider di risorseGet Actions for a Resource Provider

Quando si creano ruoli personalizzati da zero, è importante conoscere tutte le operazioni possibili dei provider di risorse.When You are creating custom roles from scratch, it is important to know all the possible operations from the resource providers. Utilizzare il comando Get-AzureRMProviderOperation per ottenere queste informazioni.Use the Get-AzureRMProviderOperation command to get this information. Ad esempio, se si desidera controllare tutte le operazioni disponibili per la macchina virtuale usare questo comando:For example, if you want to check all the available operations for virtual Machine use this command:

Get-AzureRMProviderOperation "Microsoft.Compute/virtualMachines/*" | FT OperationName, Operation , Description -AutoSize

Creare un ruolo con PSRoleDefinitionObjectCreate role with PSRoleDefinitionObject

Quando si crea un ruolo personalizzato con PowerShell, è possibile iniziare da zero o usare uno dei ruoli predefiniti come punto di partenza.When you use PowerShell to create a custom role, you can start from scratch or use one of the built-in roles as a starting point. Nell'esempio riportato in questa sezione si inizia con un ruolo predefinito e quindi lo si personalizza con più privilegi.The example in this section starts with a built-in role and then customizes it with more privileges. Modificare gli attributi e aggiungere gli attributi Actions, notActions o scopes desiderati e quindi salvare le modifiche come nuovo ruolo.Edit the attributes to add the Actions, notActions, or scopes that you want, and then save the changes as a new role.

L'esempio seguente inizia con il ruolo Virtual Machine Contributor e lo usa per creare un ruolo personalizzato denominato Virtual Machine Operator.The following example starts with the Virtual Machine Contributor role and uses that to create a custom role called Virtual Machine Operator. Il nuovo ruolo concede l'accesso a tutte le operazioni di lettura dei provider di risorse Microsoft.Compute, Microsoft.Storage e Microsoft.Network e concede l'accesso per avviare, riavviare e monitorare le macchine virtuali.The new role grants access to all read operations of Microsoft.Compute, Microsoft.Storage, and Microsoft.Network resource providers and grants access to start, restart, and monitor virtual machines. Il ruolo personalizzato può essere usato in due sottoscrizioni.The custom role can be used in two subscriptions.

$role = Get-AzureRmRoleDefinition "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.Resources/subscriptions/resourceGroups/read")
$role.Actions.Add("Microsoft.Insights/alertRules/*")
$role.Actions.Add("Microsoft.Support/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/c276fc76-9cd4-44c9-99a7-4fd71546436e")
$role.AssignableScopes.Add("/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624")
New-AzureRmRoleDefinition -Role $role

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition - Schermata

Creare un ruolo con il modello JSONCreate role with JSON template

È possibile usare un modello JSON come definizione di origine per il ruolo personalizzato.A JSON template can be used as the source definition for the custom role. Nell'esempio seguente viene creato un ruolo personalizzato che consente di accedere in lettura all'archiviazione e alle risorse di calcolo, di accedere come supporto e di aggiungere tale ruolo a due sottoscrizioni.The following example creates a custom role that allows read access to storage and compute resources, access to support, and adds that role to two subscriptions. Creare un nuovo file C:\CustomRoles\customrole1.json con il seguente esempio.Create a new file C:\CustomRoles\customrole1.json with the following example. L'ID deve essere impostato su null all'inizio della creazione del ruolo quando viene generato in automatico un nuovo ID.The Id should be set to null on initial role creation as a new ID is generated automatically.

{
  "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/c276fc76-9cd4-44c9-99a7-4fd71546436e",
    "/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624"
  ]
}

Per aggiungere il ruolo alle sottoscrizioni, eseguire il comando PowerShell seguente:To add the role to the subscriptions, run the following PowerShell command:

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

Modificare un ruolo personalizzatoModify a custom role

Così come per la creazione di un ruolo personalizzato, è possibile modificare un ruolo personalizzato esistente usando PSRoleDefinitionObject o un modello JSON.Similar to creating a custom role, you can modify an existing custom role using either the PSRoleDefinitionObject or a JSON template.

Modificare un ruolo con PSRoleDefinitionObjectModify role with PSRoleDefinitionObject

Per modificare un ruolo personalizzato, usare innanzitutto il comando Get-AzureRmRoleDefinition per recuperare la definizione di ruolo.To modify a custom role, first, use the Get-AzureRmRoleDefinition command to retrieve the role definition. Successivamente, apportare le modifiche desiderate alla definizione del ruolo.Second, make the desired changes to the role definition. Infine, usare il comando Set-AzureRmRoleDefinition per salvare la definizione del ruolo modificata.Finally, use the Set-AzureRmRoleDefinition command to save the modified role definition.

Nell'esempio seguente viene aggiunta l'operazione Microsoft.Insights/diagnosticSettings/* al ruolo personalizzato Operatore macchina virtuale .The following example adds the Microsoft.Insights/diagnosticSettings/* operation to the Virtual Machine Operator custom role.

$role = Get-AzureRmRoleDefinition "Virtual Machine Operator"
$role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
Set-AzureRmRoleDefinition -Role $role

Controllo degli accessi in base al ruolo di PowerShell - Set-AzureRmRoleDefinition - Schermata

Nell'esempio seguente viene aggiunta una sottoscrizione di Azure agli ambiti assegnabili del ruolo personalizzato Virtual Machine Operator .The following example adds an Azure subscription to the assignable scopes of the Virtual Machine Operator custom role.

Get-AzureRmSubscription - SubscriptionName Production3

$role = Get-AzureRmRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/subscriptions/34370e90-ac4a-4bf9-821f-85eeedead1a2")
Set-AzureRmRoleDefinition -Role $role

Controllo degli accessi in base al ruolo di PowerShell - Set-AzureRmRoleDefinition - Schermata

Modificare un ruolo con il modello JSONModify role with JSON template

Usando il modello JSON precedente, è possibile modificare un ruolo personalizzato esistente per aggiungere o rimuovere le azioni.Using the previous JSON template, you can easily modify an existing custom role to add or remove Actions. Aggiornare il modello JSON e aggiungere l'azione di lettura per la rete, come illustrato nell'esempio seguente.Update the JSON template and add the read action for networking as shown in the following example. Le definizioni riportate nel modello non vengono applicate in modo cumulativo a una definizione esistente, vale a dire che il ruolo verrà visualizzato esattamente come specificato nel modello.The definitions listed in the template are not cumulatively applied to an existing definition, meaning that the role appears exactly as you specify in the template. È anche necessario aggiornare il campo ID con l'ID del ruolo.You also need to update the Id field with the ID of the role. Se non si è certi di quale sia questo valore, è possibile utilizzare il cmdlet Get-AzureRmRoleDefinition per ottenere queste informazioni.If you aren't sure what this value is, you can use the Get-AzureRmRoleDefinition cmdlet to get this information.

{
  "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/c276fc76-9cd4-44c9-99a7-4fd71546436e",
    "/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624"
  ]
}

Per aggiornare il ruolo esistente, eseguire il comando PowerShell seguente:To update the existing role, run the following PowerShell command:

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

Eliminare un ruolo personalizzatoDelete a custom role

Per eliminare un ruolo personalizzato, usare il comando Remove-AzureRmRoleDefinition .To delete a custom role, use the Remove-AzureRmRoleDefinition command.

Nell'esempio seguente viene rimosso il ruolo personalizzato Operatore macchina virtuale .The following example removes the Virtual Machine Operator custom role.

Get-AzureRmRoleDefinition "Virtual Machine Operator"

Get-AzureRmRoleDefinition "Virtual Machine Operator" | Remove-AzureRmRoleDefinition

Controllo degli accessi in base al ruolo di PowerShell - Remove-AzureRmRoleDefinition - Schermata

Elencare ruoli personalizzatiList custom roles

Per elencare i ruoli disponibili per l'assegnazione a un ambito, usare il comando Get-AzureRmRoleDefinition .To list the roles that are available for assignment at a scope, use the Get-AzureRmRoleDefinition command.

L'esempio seguente elenca tutti i ruoli disponibili per l'assegnazione nella sottoscrizione selezionata.The following example lists all roles that are available for assignment in the selected subscription.

Get-AzureRmRoleDefinition | FT Name, IsCustom

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition - Schermata

Nell'esempio seguente il ruolo personalizzato Virtual Machine Operator non è disponibile nella sottoscrizione Production4 perché la sottoscrizione non è inclusa in AssignableScopes per il ruolo.In the following example, the Virtual Machine Operator custom role isn’t available in the Production4 subscription because that subscription isn’t in the AssignableScopes of the role.

Controllo degli accessi in base al ruolo di PowerShell - Get-AzureRmRoleDefinition - Schermata

Vedere ancheSee also