Funções, permissões e segurança no Azure Monitor
Este artigo mostra como aplicar funções de monitoramento de 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 de monitorização incorporadas
O controle de acesso baseado em função do Azure (Azure RBAC) 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 Monitoring Reader e Monitoring Contributor para permissões de leitura e gravação, respectivamente.
Para obter informações mais detalhadas sobre as funções de monitoramento, consulte Funções de monitoramento RBAC.
Leitor de Monitorização
As pessoas atribuídas à função Leitor de Monitorização podem ver todos os dados de monitorização numa subscrição, mas não podem modificar nenhum recurso nem editar as definições relacionadas com os recursos de monitorização. Essa função é apropriada para usuários em uma organização, como engenheiros de suporte ou de operações, que precisam:
- Exiba painéis de monitoramento no portal do Azure.
- Exiba as regras de alerta definidas nos alertas do Azure.
- Consulte as métricas do Azure Monitor usando a API REST do Azure Monitor, cmdlets do PowerShell ou CLI de plataforma cruzada.
- Consulte o log de atividades usando o portal, a API REST do Azure Monitor, cmdlets do PowerShell ou CLI de plataforma cruzada.
- Exiba as configurações de diagnóstico de um recurso.
- Exiba o perfil de log de uma assinatura.
- Veja as configurações de dimensionamento automático.
- Visualize a atividade e as configurações de alerta.
- Pesquisar dados do espaço de trabalho do Log Analytics, incluindo dados de uso do espaço de trabalho.
- Recupere os esquemas de tabela em um espaço de trabalho do Log Analytics.
- Recupere e execute consultas de log em um espaço de trabalho do Log Analytics.
- Acesse os dados do Application Insights.
Nota
Essa função não dá 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 monitoramento de dados mais adiante neste artigo.
Contribuidor de Monitorização
As pessoas atribuídas à função de Contribuidor de Monitorização podem ver todos os dados de monitorização numa subscrição. Também podem criar ou modificar as definições de monitorização, mas não podem modificar outros recursos.
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:
- Visualize painéis de monitoramento no portal e crie seus próprios painéis de monitoramento privados.
- Crie e edite configurações de diagnóstico para um recurso. 1
- Defina a atividade e as configurações da regra de alerta usando alertas do Azure.
- Liste chaves compartilhadas para um espaço de trabalho do Log Analytics.
- Crie, exclua e execute pesquisas salvas em um espaço de trabalho do Log Analytics.
- Crie e exclua a configuração de armazenamento do espaço de trabalho para o Log Analytics.
- Crie testes da Web e componentes para o Application Insights.
1 Para criar ou editar uma configuração de diagnóstico, os usuários também devem receber separadamente a permissão ListKeys no recurso de destino (conta de armazenamento ou namespace do hub de eventos).
Nota
Essa função não dá 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 monitoramento de 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 seguinte script do PowerShell.
$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
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 desse recurso. Criar uma configuração de diagnóstico que envia dados para uma conta de armazenamento ou fluxos para hubs de eventos requer que o usuário também tenha permissão ListKeys no recurso de destino.
Atribuir uma função
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Para atribuir uma função, consulte Atribuir funções do Azure usando o Azure PowerShell.
Por exemplo, o seguinte script do PowerShell atribui uma função a um usuário especificado.
Substitua <RoleId>
pelo ID da Função de Monitoramento RBAC que você deseja atribuir.
Substitua <SubscriptionID>
, <ResourceGroupName>
e <UserPrincipalName>
com os valores apropriados para 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
- Verifique se você tem 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 recurso em si.
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.
Consultar a subscrição inteira para 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 ", "
Consulta dentro do contexto de um recurso específico do Application Insights para 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 ", "
Consulta dentro do contexto de um grupo de recursos específico para 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 monitorização de dados
Os dados no Azure Monitor podem ser enviados em uma conta de armazenamento ou transmitidos para um hub de eventos, ambos recursos de uso geral do Azure. Sendo recursos de uso geral, criá-los, excluí-los e acessá-los é uma operação privilegiada reservada a um administrador. 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 a evitar uso indevido:
- Use uma única conta de armazenamento dedicada para monitorar dados. 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 inadvertidamente acesso 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 gerenciamento de eventos e informações de segurança deve precisar apenas de acesso aos dados de monitoramento.
- Use um único barramento de serviço dedicado ou namespace de 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 relacionadas ao monitoramento ou hubs de eventos mantendo-os em um grupo de recursos separado. Use o escopo em suas funções de monitoramento para limitar o acesso apenas 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 acessar dados de monitoramento. Em vez disso, conceda essas permissões ao usuário em um escopo de recurso ou grupo de recursos (se você tiver um grupo de recursos de monitoramento dedicado).
Limitar o acesso a contas de armazenamento relacionadas ao monitoramento
Quando um usuário ou aplicativo precisar acessar dados de monitoramento em uma conta de armazenamento, gere uma assinatura de acesso compartilhado (SAS) na conta de armazenamento que contenha dados de monitoramento com acesso somente leitura de nível de serviço ao armazenamento de blobs. No PowerShell, a conta SAS 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 fornecer o token para a entidade que precisa ler a partir dessa conta de armazenamento. A entidade pode listar e ler todos os blobs nessa conta de armazenamento.
Como alternativa, se você precisar controlar essa permissão com o RBAC do Azure, poderá conceder a essa entidade a Microsoft.Storage/storageAccounts/listkeys/action
permissão nessa conta de armazenamento específica. Essa permissão é necessária para usuários que precisam definir uma configuração de diagnóstico para enviar dados para uma conta de armazenamento. Por exemplo, você pode criar a seguinte função personalizada do Azure para um usuário ou aplicativo que precisa ler 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 ListKeys permite que o usuário liste as chaves de conta de armazenamento primária e secundária. 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) nessa conta de armazenamento. Recomendamos o uso de uma conta SAS sempre que possível.
Limitar o acesso a hubs de eventos relacionados ao monitoramento
Você pode seguir um padrão semelhante com hubs de eventos, mas primeiro precisa criar uma regra de autorização dedicada para ouvir. Se você quiser conceder acesso a um aplicativo que só precisa ouvir hubs de eventos relacionados ao monitoramento, siga estas etapas:
No portal, crie uma política de acesso compartilhado nos hubs de eventos que foram criados para transmitir dados de monitoramento apenas com declarações de escuta. Por exemplo, você pode chamá-lo de "monitoringReadOnly". Se possível, dê essa chave diretamente ao consumidor e pule a próxima etapa.
Se o consumidor precisar obter a chave sob demanda, conceda ao usuário a ação ListKeys para esse hub de eventos. Esta etapa também é necessária para usuários que precisam definir uma configuração de diagnóstico ou um perfil de log para transmitir para hubs de eventos. Por exemplo, você pode criar uma regra do RBAC do 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