Funções, permissões e segurança no Azure Monitor

Este artigo mostra como aplicar funções de monitoramento do controle de acesso baseado em função (RBAC) para conceder ou limitar o acesso, e discute considerações de segurança para seus recursos relacionados ao Azure Monitor.

Funções internas de monitoramento

O controle de acesso baseado em função (RBAC) do Azure fornece funções internas para monitoramento que você pode atribuir a usuários, grupos, entidades de serviço e identidades gerenciadas. As funções mais comuns são Leitor de monitoramento e Colaborador de monitoramento para permissões de leitura e gravação, respectivamente.

Para obter informações mais detalhadas sobre as funções de monitoramento, confira Funções de monitoramento do RBAC.

Leitor de monitoramento

Pessoas atribuídas à função de Leitor de monitoramento podem exibir todos os dados de monitoramento em uma assinatura, mas não podem modificar nenhum recurso nem editar nenhuma configuração relacionados ao monitoramento de recursos. Essa função é apropriada para os usuários em uma organização, como engenheiros de suporte ou de operações, que necessitam de:

  • Ver os painéis de monitoramento no portal do Azure.
  • Exibir regras de alerta definidas nos Alertas do Azure.
  • Consultar métricas do Azure Monitor usando a API REST do Azure Monitor, os cmdlets do PowerShell ou a CLI de plataforma cruzada.
  • Consultar o log de Atividades usando o portal, a API REST do Azure Monitor, os cmdlets do PowerShell ou a CLI de plataforma cruzada.
  • Exibir as configurações de diagnóstico para um recurso.
  • Exibir o perfil de log para uma assinatura.
  • Exibir as configurações de autoescala.
  • Exibir as configurações e a atividade do alerta.
  • Pesquisar dados do espaço de trabalho do Log Analytics, incluindo dados de uso do espaço de trabalho.
  • Recuperar os esquemas de tabela em um workspace do Log Analytics.
  • Recuperar e executar consultas de log em um workspace do Log Analytics.
  • Acessar dados do Application Insights.

Observação

Essa função não concede acesso de leitura aos dados de log que foram transmitidos para um hub de eventos ou armazenados em uma conta de armazenamento. Para obter informações sobre como configurar o acesso a esses recursos, consulte a seção Considerações de segurança para monitorar dados mais adiante neste artigo.

Colaborador de monitoramento

As pessoas designadas à função de Colaborador de Monitoramento podem exibir todos os dados de monitoramento em uma subscrição. Elas também podem criar ou modificar configurações de monitoramento, mas não podem modificar nenhum outro recurso.

Essa função é um superconjunto da função Leitor de Monitoramento. É apropriado para membros da equipe de monitoramento de uma organização ou provedores de serviços gerenciados que, além das permissões mencionadas anteriormente, precisam de:

  • Exibir painéis de monitoramentos no portal e criar seus próprios painéis de monitoramentos privados.
  • Criar e editar as configurações de diagnóstico para um recurso. 1
  • Defina a atividade das regras de alerta e as configurações por meio dos alertas do Azure.
  • Listar chaves compartilhadas para um espaço de trabalho do Log Analytics.
  • Criar, excluir e executar pesquisas salvas em um workspace do Log Analytics.
  • Criar e excluir a configuração de armazenamento do workspace do Log Analytics.
  • Criar testes Web e componentes do Application Insights.

1 Para criar ou editar uma configuração de diagnóstico, os usuários também devem receber, separadamente, uma permissão de ListKeys no recurso de destino (namespace do hub de eventos ou conta de armazenamento).

Observação

Essa função não concede acesso de leitura aos dados de log que foram transmitidos para um hub de eventos ou armazenados em uma conta de armazenamento. Para obter informações sobre como configurar o acesso a esses recursos, consulte a seção Considerações de segurança para monitorar dados mais adiante neste artigo.

Monitorar permissões e funções personalizadas do Azure

Se as funções internas não atenderem às necessidades da sua equipe, você poderá criar uma função personalizada do Azure com permissões granulares.

Por exemplo, você pode usar permissões granulares para criar uma função personalizada do Azure para um Leitor de Log de Atividades com o script do PowerShell a seguir.

$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 

Observação

O acesso a alertas, configurações de diagnóstico e métricas para um recurso requer que o usuário tenha acesso de leitura ao tipo de recurso e ao escopo do recurso. Criar uma configuração de diagnóstico que envia dados para uma conta de armazenamento ou transmissão para hubs de eventos requer que o usuário também tenha uma permissão ListKeys no recurso de destino.

Atribuir uma função

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Para atribuir uma função, confira Atribuir funções do Azure usando o Azure PowerShell.

Por exemplo, o script do PowerShell a seguir atribui uma função a um usuário especificado.

Substitua <RoleId> pela ID da Função de monitoramento do RBAC que você deseja atribuir.

Substitua <SubscriptionID>, <ResourceGroupName> e <UserPrincipalName> pelos valores adequados de acordo com o seu ambiente.

# 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

Você também pode Atribuir funções do Azure usando o portal do Azure.

Importante

  • Certifique-se de que você tenha as permissões necessárias para atribuir funções no escopo especificado. Você deve ter direitos de Proprietário para a assinatura ou o grupo de recursos.
  • Atribua acesso no grupo de recursos ou assinatura ao qual o recurso pertence, não no próprio recurso.

Consulta do PowerShell para determinar a associação de função

Pode ser útil gerar listas de usuários que pertencem a uma determinada função. Para ajudar a gerar esses tipos de listas, as consultas de exemplo a seguir podem ser ajustadas para atender às suas necessidades específicas.

Consulte a assinatura inteira para encontrar funções de administrador + funções de colaborador

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

Consulte dentro do contexto de um recurso específico do Application Insights para encontrar os proprietários e colaboradores

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

Consulte dentro do contexto de um grupo de recursos específico para encontrar os proprietários e colaboradores

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

Considerações de segurança para dados de monitoramento

Dados no Azure Monitor podem ser enviados em uma conta de armazenamento ou transmitidos ao hub de eventos, que são recursos do Azure para fins gerais. Por serem recursos de uso geral, criá-los, excluí-los e acessá-los é uma operação privilegiada reservada para administradores. Como esses dados podem conter informações confidenciais, como endereços IP ou nomes de usuário, use as seguintes práticas para monitorar recursos relacionados para evitar uso indevido:

  • Use uma conta de armazenamento única e dedicada para os dados de monitoramento. Se você precisar separar os dados de monitoramento em várias contas de armazenamento, sempre use contas de armazenamento diferentes para monitorar dados e outros tipos de dados. Se você compartilhar contas de armazenamento para monitoramento e outros tipos de dados, poderá conceder acesso inadvertidamente a outros dados a organizações que só devem acessar dados de monitoramento. Por exemplo, uma organização que não seja da Microsoft para informações de segurança e gerenciamento de eventos deve precisar apenas de acesso aos dados de monitoramento.
  • Use um namespace único e dedicado de Barramento de Serviço ou Hub de Eventos em todas as configurações de diagnóstico pelo mesmo motivo descrito no ponto anterior.
  • Limite o acesso a contas de armazenamento ou hubs de eventos relacionados a monitoramento mantendo-os em um grupo de recursos separado. Use o escopo em suas funções de monitoramento para limitar o acesso somente a esse grupo de recursos.
  • Você nunca deve conceder a permissão ListKeys para contas de armazenamento ou hubs de eventos no escopo da assinatura quando um usuário só precisa de acesso aos dados de monitoramento. Em vez disso, conceda essas permissões ao usuário a um escopo de recurso ou grupo de recursos (se você tiver um grupo de recursos de monitoramento dedicado).

Quando um usuário ou aplicativo precisa de acesso aos dados de monitoramento em uma conta de armazenamento, gere uma SAS (assinatura de acesso compartilhado) na conta de armazenamento que contém os dados de monitoramento com acesso somente leitura no nível de serviço para armazenamento de blobs. No PowerShell, a SAS da conta pode se parecer com o seguinte código:

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

Em seguida, você pode dar o token à entidade que precisa ler a partir da conta de armazenamento. A entidade pode listar e ler de todos os blobs nessa conta de armazenamento.

Como alternativa, se você precisar controlar essa permissão com o Azure RBAC, poderá conceder a essa entidade a permissão Microsoft.Storage/storageAccounts/listkeys/action nessa conta de armazenamento específica. Essa permissão é necessária para os usuários que precisam definir uma configuração de diagnóstico para enviar dados a uma conta de armazenamento. Por exemplo, você pode criar a seguinte função personalizada do Azure para um usuário ou aplicativo que precisa da leitura de apenas uma conta de armazenamento:

$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 

Aviso

A permissão de ListKeys permite que o usuário liste as chaves primárias e secundárias da conta de armazenamento. Essas chaves concedem ao usuário todas as permissões assinadas (como ler, gravar, criar blobs e excluir blobs) em todos os serviços assinados (blob, fila, tabela, arquivo) na conta de armazenamento. Recomendamos usar uma SAS da conta, quando possível.

Você pode seguir um padrão semelhante com hubs de eventos, mas primeiro você precisa criar uma regra de autorização dedicada para escuta. Se você deseja conceder acesso a um aplicativo que precisa apenas ouvir os hubs de eventos relacionados ao monitoramento, siga estas etapas:

  1. No portal, crie uma política de acesso compartilhado nos hubs de eventos que foram criados para transmitir dados de monitoramento com somente declarações de escuta. Por exemplo, você pode chamá-lo de "monitoringReadOnly". Se possível, forneça essa chave diretamente ao consumidor e pule a próxima etapa.

  2. Se o consumidor precisar obter a chave sob demanda, conceda ao usuário a ação ListKeys para o respectivo hub de eventos. Essa etapa é necessária também para os usuários que precisam definir uma configuração de diagnóstico ou um perfil de log para transmitir aos hubs de eventos. Por exemplo, você pode criar uma regra do 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 
    

Próximas etapas