Ruoli, autorizzazioni e sicurezza in monitoraggio di Azure

Questo articolo spiega come applicare i ruoli di monitoraggio del controllo degli accessi in base al ruolo per concedere o limitare l'accesso e illustra le considerazioni sulla sicurezza per le risorse correlate a Monitoraggio di Azure.

Ruoli di monitoraggio predefiniti

Controllo degli accessi in base al ruolo di Azure fornisce ruoli predefiniti per il monitoraggio che è possibile assegnare a utenti, gruppi, entità servizio e identità gestite. I ruoli più comuni sono Ruolo con autorizzazioni di lettura dei dati di monitoraggio e Collaboratore per il monitoraggio, rispettivamente per le autorizzazioni di lettura e scrittura.

Per informazioni più dettagliate sui ruoli di monitoraggio, vedere Ruoli di monitoraggio di Controllo degli accessi in base al ruolo.

Lettore di monitoraggio

Le persone a cui è assegnato il ruolo di lettore di monitoraggio possono visualizzare tutti i dati di monitoraggio in una sottoscrizione ma non possono modificare alcuna risorsa o impostazione relativa alle risorse di monitoraggio. Questo ruolo è appropriato per gli utenti di un'organizzazione, ad esempio il servizio di supporto o i tecnici operativi, che devono:

  • Visualizzare i dashboard di monitoraggio nel portale di Azure.
  • Visualizzare le regole di avviso definite in Avvisi di Azure.
  • Eseguire query sulle metriche di Monitoraggio di Azure usando l'API REST di Monitoraggio di Azure, cmdlet di PowerShell o l'interfaccia della riga di comando multipiattaforma.
  • Eseguire query sul log attività usando il portale, l'API REST di Monitoraggio di Azure, i cmdlet di PowerShell o l'interfaccia della riga di comando multipiattaforma.
  • Visualizzare le impostazioni di diagnostica per una risorsa.
  • Visualizzare il profilo di registro per una sottoscrizione.
  • Visualizzare le impostazioni di scalabilità automatica.
  • Visualizzare impostazioni e attività di avviso.
  • Cercare i dati dell'area di lavoro Log Analytics, inclusi i dati sull'utilizzo dell'area di lavoro.
  • Recuperare gli schemi di tabella in un'area di lavoro Log Analytics.
  • Recuperare ed eseguire query su log in un'area di lavoro Log Analytics.
  • Accedere ai dati di Application Insights.

Nota

Questo ruolo non concede l'accesso in lettura ai dati di log trasmessi in streaming a un hub eventi o archiviati in un account di archiviazione. Per informazioni su come configurare l'accesso a queste risorse, vedere la sezione Considerazioni sulla sicurezza per il monitoraggio dei dati più avanti in questo articolo.

Collaboratore al monitoraggio

Le persone a cui è assegnato il ruolo di Collaboratore al monitoraggio possono visualizzare tutti i dati di monitoraggio in una sottoscrizione. Possono anche creare o modificare le impostazioni di monitoraggio, ma non possono modificare altre risorse.

Questo ruolo è un superset del ruolo con autorizzazioni di lettura dei dati di monitoraggio. È appropriato per i membri del team di monitoraggio dell'organizzazione o dei provider di servizi gestiti di un'organizzazione che, oltre alle autorizzazioni indicate in precedenza, devono:

  • Visualizzare i dashboard di monitoraggio nel portale e creare dashboard di monitoraggio privati.
  • Creare e modificare impostazioni di diagnostica per una risorsa. 1
  • Configurare l'attività e le impostazioni delle regole di avviso usando Avvisi di Azure.
  • Elencare le chiavi condivise per un'area di lavoro Log Analytics.
  • Creare, eliminare ed eseguire ricerche salvate in un'area di lavoro Log Analytics.
  • Creare ed eliminare la configurazione di archiviazione dell'area di lavoro per Log Analytics.
  • Creare test Web e componenti per Application Insights.

1 Per creare o modificare un'impostazione di diagnostica, agli utenti deve anche essere concessa separatamente l'autorizzazione ListKeys per la risorsa di destinazione (account di archiviazione o spazio dei nomi dell'hub eventi).

Nota

Questo ruolo non concede l'accesso in lettura ai dati di log trasmessi in streaming a un hub eventi o archiviati in un account di archiviazione. Per informazioni su come configurare l'accesso a queste risorse, vedere la sezione Considerazioni sulla sicurezza per il monitoraggio dei dati più avanti in questo articolo.

Monitorare le autorizzazioni e i ruoli personalizzati di Azure

Se i ruoli predefiniti non soddisfano le esigenze del team, è possibile creare un ruolo personalizzato di Azure con autorizzazioni granulari.

Ad esempio, è possibile usare autorizzazioni granulari per creare un ruolo personalizzato di Azure per un Lettore del log attività con lo script di PowerShell seguente.

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Activity Log Reader"
$role.Description = "Can view activity logs."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Insights/eventtypes/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription")
New-AzRoleDefinition -Role $role 

Nota

L'accesso ad avvisi, impostazioni di diagnostica e metriche per una risorsa richiede che l'utente disponga dell'accesso in lettura per il tipo di risorsa e l'ambito di tale risorsa. La creazione di un'impostazione di diagnostica che invia i dati a un account di archiviazione o li trasmette a un hub eventi richiede che l'utente disponga anche dell'autorizzazione ListKeys nella risorsa di destinazione.

Assegnare un ruolo

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Per assegnare un ruolo, vedere Assegnare ruoli di Azure usando Azure PowerShell.

Ad esempio, lo script di PowerShell seguente assegna un ruolo a un utente specificato.

Sostituire <RoleId> con l'ID del ruolo di monitoraggio Controllo degli accessi in base al ruolo da assegnare.

Sostituire <SubscriptionID>, <ResourceGroupName> e <UserPrincipalName> con i valori appropriati per l'ambiente in uso.

# Define variables
$SubscriptionId = "<SubscriptionID>"
$ResourceGroupName = "<ResourceGroupName>"
$UserPrincipalName = "<UserPrincipalName>"  # The UPN of the user to whom you want to assign the role
$RoleId = "<RoleId>"  # The ID of the role

# Get the user object
$User = Get-AzADUser -UserPrincipalName $UserPrincipalName

# Define the scope (e.g., subscription or resource group level)
$Scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName"

# Assign the role
New-AzRoleAssignment -ObjectId $User.Id -RoleDefinitionId $RoleId -Scope $Scope

È anche possibile Assegnare ruoli di Azure usando il portale di Azure.

Importante

  • Assicurarsi di disporre delle autorizzazioni necessarie per assegnare i ruoli nell'ambito specificato. È necessario disporre dei diritti di Proprietario per la sottoscrizione o il gruppo di risorse.
  • Assegnare l'accesso nel gruppo di risorse o nella sottoscrizione a cui appartiene la risorsa, non nella risorsa stessa.

Query di PowerShell per determinare l'appartenenza al ruolo

Può essere utile generare elenchi di utenti che appartengono a un determinato ruolo. Per facilitare la generazione di questi tipi di elenchi, è possibile modificare le query di esempio seguenti in base alle esigenze specifiche.

Query dell'intera sottoscrizione per i ruoli di Amministratore e Collaboratore

(Get-AzRoleAssignment -IncludeClassicAdministrators | Where-Object {$_.RoleDefinitionName -in @('ServiceAdministrator', 'CoAdministrator', 'Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

Query all'interno del contesto di una risorsa specifica di Application Insights per proprietari e collaboratori

$resourceGroup = "ResourceGroupName"
$resourceName = "AppInsightsName"
$resourceType = "microsoft.insights/components"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup -ResourceType $resourceType -ResourceName $resourceName | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

Query all'interno del contesto di un gruppo di risorse specifico per proprietari e collaboratori

$resourceGroup = "ResourceGroupName"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

Considerazioni sulla sicurezza per i dati sul monitoraggio

I dati in Monitoraggio di Azure possono essere inviati a un account di archiviazione o trasmessi a un hub eventi, che sono risorse di Azure per utilizzo generico. Trattandosi di risorse per utilizzo generico, la creazione, l'eliminazione e l'accesso sono operazioni con privilegi riservate a un amministratore. Poiché questi dati possono contenere informazioni riservate, ad esempio indirizzi IP o nomi utente, usare le procedure seguenti per evitare un uso improprio delle risorse correlate al monitoraggio:

  • Usare un account di archiviazione singolo e dedicato per il monitoraggio dei dati. Se è necessario separare i dati di monitoraggio in più account di archiviazione, usare sempre account di archiviazione diversi per i dati di monitoraggio e altri tipi di dati. Se si condividono gli account di archiviazione per i dati di monitoraggio e altri tipi di dati, è possibile concedere inavvertitamente l'accesso ad altri dati alle organizzazioni che devono accedere solo ai dati di monitoraggio. Ad esempio, un'organizzazione non Microsoft per informazioni di sicurezza e gestione degli eventi necessita solo dell'accesso ai dati di monitoraggio.
  • Usare un singolo bus di servizio o spazio dei nomi dell'hub eventi dedicato in tutte le impostazioni di diagnostica per lo stesso motivo specificato al punto precedente.
  • Limitare l'accesso agli hub eventi o agli account di archiviazione correlati al monitoraggio mantenendoli in un gruppo di risorse separato. Usare l'ambito nei ruoli di monitoraggio per limitare l'accesso solo a tale gruppo di risorse.
  • È consigliabile non concedere mai l'autorizzazione ListKeys per gli account di archiviazione o gli hub eventi a livello di sottoscrizione quando un utente deve accedere solo ai dati di monitoraggio. Assegnare invece queste autorizzazioni all'utente a livello di risorsa o di gruppo di risorse (se si dispone di un gruppo di risorse di monitoraggio dedicato).

Quando un utente o un'applicazione richiede l'accesso ai dati di monitoraggio in un account di archiviazione, è necessario generare una firma di accesso condiviso nell'account di archiviazione che contiene i dati di monitoraggio con accesso in sola lettura a livello di servizio all'archivio BLOB. In PowerShell la firma di accesso condiviso dell'account avrà un aspetto simile al codice seguente:

$context = New-AzStorageContext -ConnectionString "[connection string for your monitoring Storage Account]"
$token = New-AzStorageAccountSASToken -ResourceType Service -Service Blob -Permission "rl" -Context $context

È quindi possibile assegnare il token all'entità che deve eseguire la lettura da tale account di archiviazione. L'entità può elencare ed eseguire la lettura da tutti i BLOB in tale account di archiviazione.

In alternativa, se è necessario verificare l'autorizzazione con il Controllo degli accessi in base al ruolo, è possibile concedere a tale entità l'autorizzazione Microsoft.Storage/storageAccounts/listkeys/action su tale account di archiviazione specifico. Questa autorizzazione è necessaria per gli utenti che devono definire un'impostazione di diagnostica per inviare dati a un account di archiviazione. È ad esempio possibile creare il ruolo personalizzato in Controllo degli accessi in base al ruolo per un utente o un'applicazione che deve solo eseguire la lettura da un account di archiviazione:

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Monitoring Storage Account Reader"
$role.Description = "Can get the storage account keys for a monitoring storage account."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/storageAccounts/listkeys/action")
$role.Actions.Add("Microsoft.Storage/storageAccounts/Read")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myMonitoringStorageAccount")
New-AzRoleDefinition -Role $role 

Avviso

L'autorizzazione ListKeys consente all'utente di elencare le chiavi dell'account di archiviazione primario e secondario. Queste chiavi concedono all'utente tutte le autorizzazioni accettate, quali lettura, scrittura, creazione di BLOB ed eliminazione di BLOB, in tutti i servizi accettati (BLOB, code, tabelle, file) di tale account di archiviazione. Quando possibile, è consigliabile usare una firma di accesso condiviso dell'account.

È possibile seguire un modello simile con gli hub eventi, ma prima è necessario creare una regola di autorizzazione dedicata per l'ascolto. Se si vuole concedere l'accesso a un'applicazione che deve solo rimanere in ascolto degli hub eventi correlati al monitoraggio, seguire questa procedura:

  1. Nel portale creare un criterio di accesso condiviso negli hub eventi creati per lo streaming dei dati di monitoraggio solo con attestazioni di ascolto. Ad esempio, è possibile chiamarlo "monitoringReadOnly". Se possibile, assegnare la chiave direttamente al consumer e ignorare il passaggio successivo.

  2. Se il consumer deve ottenere la chiave su richiesta, concedere all'utente l'azione ListKeys per l'hub eventi. Questo passaggio è necessario anche per gli utenti che devono definire un'impostazione di diagnostica o un profilo di log per lo streaming agli hub eventi. Ad esempio, è possibile creare una regola di controllo degli accessi in base al ruolo di Azure:

    $role = Get-AzRoleDefinition "Reader"
    $role.Id = $null
    $role.Name = "Monitoring Event Hub Listener"
    $role.Description = "Can get the key to listen to an event hub streaming monitoring data."
    $role.Actions.Clear()
    $role.Actions.Add("Microsoft.EventHub/namespaces/authorizationrules/listkeys/action")
    $role.Actions.Add("Microsoft.EventHub/namespaces/Read")
    $role.AssignableScopes.Clear()
    $role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.ServiceBus/namespaces/mySBNameSpace")
    New-AzRoleDefinition -Role $role 
    

Passaggi successivi