Rôles, autorisations et sécurité dans Azure Monitor

Cet article explique comment appliquer des rôles d’analyse RBAC (contrôle d’accès en fonction du rôle) pour accorder ou limiter l’accès, et traite des considérations de sécurité pour vos ressources liées à Azure Monitor.

Rôles de surveillance intégrés

Le contrôle d’accès en fonction du rôle Azure (RBAC Azure) fournit plusieurs rôles d’analyse intégrés, que vous pouvez affecter aux utilisateurs, groupes, principaux de service et identités managées. Les rôles les plus courants sont Lecteur d’analyse et Contributeur d’analyse, respectivement pour les autorisations de lecture et d’écriture.

Pour plus d’informations sur les rôles d’analyse, consultez Rôles d’analyse RBAC.

Lecteur d’analyse

Les personnes ayant le rôle Lecteur d’analyse peuvent afficher toutes les données d’analyse dans un abonnement, mais ne peuvent pas modifier de ressource ou les paramètres relatifs à l’analyse des ressources. Ce rôle est approprié pour les utilisateurs dans une organisation, tels que les ingénieurs de support ou d’opération, qui doivent être en mesure de faire ce qui suit :

  • Afficher les tableaux de bord d’analyse dans le portail Azure.
  • Afficher les règles d’alerte définies dans Alertes Azure.
  • Interroger les métriques Azure Monitor avec l’API REST Azure Monitor, les applets de commande PowerShell ou la CLI multiplateforme.
  • Interroger le journal d’activité via le portail, l’API REST Azure Monitor, les applets de commande PowerShell ou le CLI multiplateforme.
  • Affichez les Paramètres de diagnostic pour une ressource.
  • Afficher le profil de journalisation pour un abonnement.
  • Affichez les paramètres de mise à l’échelle automatique.
  • Afficher les activités et paramètres d’alerte.
  • Rechercher des données d’espace de travail Log Analytics, notamment les données d’utilisation de l’espace de travail.
  • Récupérer les schémas de la table dans un espace de travail Log Analytics.
  • Récupérer et exécuter des requêtes de journal dans l’espace de travail Log Analytics.
  • Accéder aux données Application Insights.

Remarque

Ce rôle ne donne pas l’accès en lecture aux données de journal diffusées vers un hub d’événements ou stockées dans un compte de stockage. Pour plus d’informations sur la configuration de l’accès à ces ressources, consultez la section Considérations de sécurité pour l’analyse des données plus loin dans cet article.

Contributeur d’analyse

Les personnes disposant du rôle Contributeur d’analyse peuvent afficher toutes les données d’analyse dans un abonnement. Elles peuvent également créer ou modifier les paramètres d’analyse, mais ne peuvent pas modifier d’autres ressources.

Ce rôle est un sur-ensemble du rôle Lecteur d’analyse. Il convient aux membres de l’équipe d’analyse d’une organisation ou aux fournisseurs de services managés qui, en plus des autorisations mentionnées précédemment, doivent pouvoir :

  • Afficher des tableaux de bord d’analyse dans le portail et créer leurs propres tableaux de bord privés d’analyse.
  • Créer et modifier les paramètres de diagnostic pour une ressource. 1
  • Définir l’activité et les paramètres de règles d’alerte en utilisant Alertes Azure.
  • Répertorier les clés partagées pour un espace de travail Log Analytics.
  • Créer, supprimer et exécuter des recherches enregistrées dans un espace de travail Log Analytics.
  • Créer et supprimer la configuration du stockage de l’espace de travail pour Log Analytics.
  • Créer des tests web et composants pour Application Insights.

1 Pour créer ou modifier un paramètre de diagnostic, l’utilisateur doit également obtenir séparément l’autorisation ListKeys sur la ressource cible (compte de stockage ou espace de noms Event Hub).

Remarque

Ce rôle ne donne pas l’accès en lecture aux données de journal diffusées vers un hub d’événements ou stockées dans un compte de stockage. Pour plus d’informations sur la configuration de l’accès à ces ressources, consultez la section Considérations de sécurité pour l’analyse des données plus loin dans cet article.

Autorisations de supervision et rôles personnalisés Azure

Si les rôles intégrés ne répondent pas aux besoins de votre équipe, vous pouvez créer un rôle personnalisé Azure avec des autorisations précises.

Par exemple, vous pouvez utiliser des autorisations précises afin de créer un rôle personnalisé Azure pour un Lecteur de journal d’activité avec le script PowerShell suivant.

$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 

Remarque

L’accès aux alertes, aux paramètres de diagnostic et aux mesures pour une ressource nécessite que l’utilisateur ait accès en lecture au type de ressource et à la portée de la ressource. La création d’un paramètre de diagnostic qui envoie des données sur un compte de stockage ou diffuse vers des Event Hubs nécessite que l’utilisateur dispose également de l’autorisation ListKeys sur la ressource cible.

Attribuer un rôle

Remarque

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Pour attribuer un rôle, consultez Attribuer des rôles Azure à l’aide d’Azure PowerShell.

Par exemple, le script PowerShell suivant attribue un rôle à un utilisateur spécifié.

Remplacez <RoleId> par l’ID du rôle d’analyse RBAC que vous souhaitez attribuer.

Remplacez <SubscriptionID>, <ResourceGroupName> et <UserPrincipalName> par les valeurs correspondant à votre environnement.

# 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

Vous pouvez également Attribuer des rôles Azure à l’aide du portail Azure.

Important

  • Vérifiez que vous disposez des autorisations nécessaires pour attribuer des rôles dans l’étendue spécifiée. Vous devez disposer des droits de Propriétaire de l’abonnement ou du groupe de ressources.
  • Accordez l’accès dans le groupe de ressources ou l’abonnement auquel appartient votre ressource, et non dans la ressource elle-même.

Requête PowerShell permettant de déterminer l’appartenance au rôle

Il peut être utile de générer des listes d’utilisateurs détenant un rôle donné. Pour faciliter la génération de ces types de listes, les exemples de requêtes suivants peuvent être adaptés pour répondre à vos besoins spécifiques :

Interroger l’ensemble de l’abonnement pour les rôles d’administrateur + des rôles de contributeur

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

Requête dans le contexte d’une ressource Application Insights spécifique pour les propriétaires et les collaborateurs

$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 ", "

Requête dans le contexte d’un groupe de ressources spécifique pour les propriétaires et les collaborateurs

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

Considérations de sécurité pour l’analyse des données

Les Données dans Azure Monitor peuvent être envoyées dans un compte de stockage ou diffusées vers un Event Hub, qui sont tous deux des ressources Azure à usage général. S’agissant de ressources à usage général, leur création, leur suppression et leur accès sont des opérations privilégiées réservées à un administrateur. Étant donné que ces données peuvent contenir des informations sensibles telles que des adresses IP ou des noms d’utilisateur, utilisez les pratiques suivantes pour la surveillance des ressources afin d’éviter toute utilisation incorrecte :

  • Utilisez un compte de stockage unique, dédié pour l’analyse des données. Si vous devez séparer les données d’analyse dans plusieurs comptes de stockage, utilisez toujours différents comptes de stockage pour les données d’analyse et les autres types de données. Si vous partagez des comptes de stockage pour l’analyse et d’autres types de données, vous risquez d’accorder par inadvertance l’accès à d’autres données à des organisations qui doivent uniquement accéder aux données d’analyse. Par exemple, une organisation non-Microsoft chargée des informations de sécurité et de la gestion d’événements doit uniquement avoir accès aux données d’analyse.
  • Utilisez un espace de noms de hub d’événements ou Service Bus dédié unique pour tous les paramètres de diagnostic pour la même raison que celle décrite au point précédent.
  • Limitez l’accès aux comptes de stockage liés à l’analyse ou Event Hubs en les conservant au sein d’un groupe de ressources distincts. Utilisez l’étendue sur vos rôles d’analyse pour limiter l’accès à ce groupe de ressources uniquement.
  • Vous ne devez jamais accorder l’autorisation ListKeys aux comptes de stockage ou hubs d’événements dont la portée comprend l’abonnement lorsqu’un utilisateur doit uniquement accéder aux données d’analyse. Au lieu de cela, accordez ces autorisations à l’utilisateur sur l’étendue d’une ressource ou d’un groupe de ressources (si vous avez un groupe de ressources d’analyse dédié).

Lorsqu’un utilisateur ou une application doit accéder à l’analyse des données dans un compte de stockage, vous devez générer une signature d’accès partagé sur le compte de stockage qui contient les données d’analyse avec un accès en lecture au niveau de service pour le stockage d’objets blob. Dans PowerShell, la signature d’accès partagé du compte peut se présenter comme le code suivant :

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

Vous pouvez ensuite communiquer le jeton à l’entité qui doit lire à partir de ce compte de stockage. L’entité peut répertorier et lire à partir de tous les objets blob dans ce compte de stockage.

Si vous avez besoin de contrôler cette autorisation avec Azure RBAC, vous pouvez également accorder à cette entité l’autorisation Microsoft.Storage/storageAccounts/listkeys/action sur ce compte de stockage particulier. Cette autorisation est nécessaire pour les utilisateurs qui doivent être en mesure de définir un paramètre de diagnostic pour envoyer des données à un compte de stockage. Par exemple, vous pouvez créer le rôle personnalisé Azure suivant pour un utilisateur ou une application qui a besoin de lire à partir d’un compte de stockage :

$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 

Avertissement

L’autorisation ListKeys permet à l’utilisateur de répertorier les clés de compte de stockage principales et secondaires. Ces clés accordent à l’utilisateur toutes les autorisations signées (par exemple, lecture, écriture, création d’objets blob et suppression d’objets blob) sur l’ensemble des services signés (blob, file d’attente, table, fichier) sur ce compte de stockage. Nous vous recommandons d’utiliser une signature d’accès partagé de compte, lorsque cela est possible.

Vous pouvez suivre un modèle similaire avec les Event Hubs, mais vous devez d’abord créer une règle d’autorisation dédiée pour l’écoute. Si vous souhaitez accorder l’accès à une application qui doit seulement écouter les hubs d’événements liés à l’analyse, effectuez les étapes suivantes :

  1. Dans le portail, créez une stratégie d’accès partagé sur les Event Hubs qui ont été créés pour la diffusion des données d’analyse avec des demandes d’écoute uniquement. Par exemple, vous pouvez l’appeler « monitoringReadOnly ». Si possible, attribuez directement cette clé au consommateur et ignorez l’étape suivante.

  2. Si le consommateur doit être en mesure d’obtenir la clé sur demande, accordez à l’utilisateur l’action ListKeys pour ce hub d’événements. Cette étape est également nécessaire pour les utilisateurs qui doivent être en mesure de définir un paramètre de diagnostic ou un profil de journalisation pour diffuser vers des Event Hubs. Par exemple, vous pouvez créer une règle Azure RBAC :

    $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 
    

Étapes suivantes