Ofuscação de logs: aplique hash ou mascarar dados sensíveis em seu log
Com log regra de ofuscação, você pode evitar que certos tipos de informações sejam salvas no New Relic.
Requisitos
Nosso recurso ofuscação de logs está disponível como parte de nossa opção Data Plus.
O que é ofuscação de logs?
Nosso serviço mascara automaticamente padrões de números que identificamos como provavelmente itens confidenciais, como números de cartão de crédito ou de CPF.
Caso necessite de ofuscação adicional, uma opção é ajustar a configuração do encaminhador de logs que você utiliza (por exemplo, nosso agente de infraestrutura). Mas uma opção mais fácil é usar nosso recurso ofuscação de logs, disponível no Data Plus. Este recurso permite configurar a regra de ofuscação log diretamente da interface de gerenciamento de logs, ou através de nossa API NerdGraph, sem demorada configuração manual. Você definirá expressões regulares que correspondam às suas informações confidenciais e, em seguida, criará regras para ofuscar esses dados. Você pode optar por mascarar informações confidenciais ou aplicar hash.
Definições
Aqui estão alguns termos importantes:
Obfuscation rules
defina em qual log aplicar as ações de ofuscação.
Obfuscation rule actions
defina qual atributo observar, qual texto ofuscar e como ofuscar (seja por mascaramento ou hash).
Obfuscation expressions
são denominadas expressões regulares que identificam qual texto ofuscar.
Masking
remove completamente as informações, substituindo-as por X caracteres. Você não pode pesquisar valores específicos depois de fazer isso.
Hashing
esconde informações. Você pode usar a ferramenta de hash para obter o hash de aplicação de um valor confidencial e, em seguida, procurar o log que contém esse hash de aplicação.
Como funciona a ofuscação
Os objetos JSON exibidos no exemplo a seguir são simplificações da carga usada pela nossa API NerdGraph. Isso ajudará você a correlacionar melhor as diferentes operações API com suas contrapartes equivalentes de interface.
Exemplo: registro de log antes da ofuscação
Imagine que você tem o seguinte registro de log:
{
"message":"The credit card number 4321-5678-9876-2345 belongs to user user@email.com (born on 01/02/2003) with SSN 123-12-1234",
"creditCardNumber":"4321-5678-9876-2345",
"ssn":"123-12-1234",
"department":"sales",
"serviceName":"loginService"
}
Este registro de log contém vários dados confidenciais. Idealmente, você gostaria que seu log ficasse assim:
{
"message":"The credit card number 9aa9bc1528859aee1b1df75795f1ebd54beb2f0d26c8a1d4580a71a07189cdd5 belongs to user user@email.com (born on XXXXXXXXXX) with SSN 30e6897f76dc102e32ee1d781c43417d259e586eac15c963d75ab8b5187769da",
Aqui está o processo básico que você usaria para ofuscar os dados confidenciais neste exemplo.
Você decide que deseja aplicar as seguintes ações de ofuscação a todos os logs provenientes desse serviço:
HASH o número do cartão de crédito presente no atributo message e creditCardNumber .
MASK a data de nascimento presente no atributo message .
HASH o número da Segurança Social presente no atributo message e ssn .
A primeira coisa que você precisa fazer é definir alguma expressão de ofuscação que permita capturar essas informações confidenciais.
Dica
Os exemplos abaixo mostram expressões regulares que você usaria diretamente na interface. Posteriormente neste documento, discutiremos como você poderia usar versões com escape dessas expressões regulares para NerdGraph.
Expressão de ofuscação
Definição
Número do cartão de crédito
Precisamos capturar 4 grupos de 4 dígitos separados por hífens:
Precisamos capturar 3 grupos de 3, 2 e 4 dígitos separados por hífens:
{
"name":"Social Security Number",
"regex":"(d{3}-d{2}-d{4})"
}
Data de nascimento (loginService específico)
Neste exemplo, a data de nascimento faz parte do serviço Login. Definimos a parte a ser ofuscada com base nas informações de data nas palavras ao redor "(born on 01/02/2003)":
{
"name":"Born date - loginService specific",
"regex":"born on (.*))"
}
Cada expressão de ofuscação define como capturar algumas informações confidenciais de uma string (usando uma regex) e as associa a algum nome amigável para que você possa identificá-las facilmente mais tarde.
A expressão de ofuscação pode ser reutilizável; eles são totalmente agnósticos quanto à forma como o atributo log que contém os dados confidenciais é nomeado. Por exemplo, a expressão da Segurança Social definida acima poderia ser aplicada a um atributo log denominado ssn, socialSecurityNumber ou socSecNum.
Você também pode criar expressões de ofuscação não reutilizáveis, como Born date (loginService specific), que são fortemente acopladas ao formato do atributo de log . Por exemplo, você pode usar o que vier depois de born on e before.
Grupos de captura de expressões regulares aninhados não suportados
A principal responsabilidade deste recurso é substituir dados sensíveis pelo aplicar hash ou mascarar de forma fácil e eficiente. Se você quiser ou precisar agrupar correspondências diferentes dentro de um grupo de captura, lembre-se de usar a sintaxe de grupo sem captura (?:{EXPRESSION}) para evitar a criação de grupos de captura aninhados. Por exemplo, evite (([A-Z]{12})|([a-z]{6})) e use ((?:[A-Z]{12})|((?:[a-z]{6})).
Agora que definimos como capturar nossos dados confidenciais, precisamos especificar quais logs precisam ser ofuscados (os do Login Service) e como (com as ações de ofuscação que definimos). Para conseguir isso, definimos uma regra de ofuscação.
{
"name":"Obfuscate Login Service Logs",
"filter":"serviceName = 'loginService' AND department = 'sales'",
"actions":[
{
"attributes":["message","creditCardNumber"],
"expression":{"name":"Credit Card Number"},
"method":"HASH_SHA256"
},
{
"attributes":["message"],
"expression":{"name":"Born date - loginService specific"},
"method":"MASK"
},
{
"attributes":["message","ssn"],
"expression":{"name":"Social Security Number"},
"method":"HASH_SHA256"
}
]
}
Esta regra contém três componentes principais:
Componente de regra de ofuscação
Descrição
Nome
O nome ajuda a identificar facilmente o que a regra faz. Neste exemplo, esta regra define como ofuscar os diferentes atributos do log provenientes do Serviço de Login.
Filtro
O filtro usa o formato NRQL para informar ao nosso sistema como identificar o log de destino proveniente do serviço de login. Este exemplo consulta para log onde serviceName = loginService e department = sales.
Ações
Por fim, esta regra define o conjunto de ações de ofuscação a serem aplicadas ao log correspondente ao filtro. Cada ação define:
Que anteriormente criou expressão de ofuscação para extrair as informações sensíveis de cada conjunto de atributo
Qual método de ofuscação (HASH_SHA256 ou MASK) será aplicado para ofuscar esses dados
Observe que ao definir regra de ofuscação via NerdGraph, você precisará especificar o id da expressão de ofuscação em vez de seus nomes. Para tornar o exemplo anterior mais legível, utilizamos os nomes expressão de ofuscação.
Como exemplo final, imagine que também precisávamos ofuscar o log proveniente de outro serviço chamado "Serviço Checkout" que possui um atributo serviceName = checkoutService , bem como um atributo ccn que contém informações de cartão de crédito:
{
"message":"Order completed",
"ccn":"4321-5678-9876-2345",
"department":"sales",
"serviceName":"checkoutService"
}
Para ofuscar o log deste serviço, teríamos apenas que definir outra regra de ofuscação direcionada a esses logs específicos, e simplesmente reutilizaríamos a Credit card number expressão de ofuscação criada anteriormente:
{
"name":"Obfuscate Checkout Service Logs",
"filter":"serviceName = 'checkoutService' AND department = 'sales'",
"actions":[
{
"attributes":["ccn"],
"expression":{"name":"Credit Card Number"},
"method":"HASH_SHA256"
}
]
}
Lista de verificação: etapas para ofuscar o log
Para ofuscar seu log:
Estude o formato do seu log identificando padrões de dados confidenciais que aparecem nele. Por exemplo:
Todo o seu log contém informações confidenciais? Ou pode ser mais específico (apenas o log do serviço A ou da região B)?
Que informações confidenciais eles contêm: números de cartão de crédito, números de carteira de motorista, identidades nacionais, dados biométricos, outros valores?
Crie expressões de ofuscação para identificar como extrair dados confidenciais.
Defina regras de ofuscação para cada conjunto de log:
Defina como você irá capturá-los usando NRQL.
Defina quais ações de ofuscação precisam ser aplicadas a cada uma delas. Pergunte a si mesmo: precisarei consultar meu registro usando essas informações confidenciais posteriormente (considere usar HASH) ou preciso remover essas informações inteiramente do meu registro (considere usar MASK)?
Dica
A interface Logs obfuscation inclui um Hashing tool para que você possa encontrar um hash de aplicação de um valor conhecido e copiá-lo para uso com outras expressões e regras.
Limites de CPU
A ofuscação tem limites de CPU por minuto. Se uma conta atingir estes limites de recursos, o registo não será ofuscado conforme esperado. Para verificar os limites da CPU, acesse a página Limits do sistema na interface Data management .
Se você exceder os limites de CPU de ofuscação por minuto e o log não puder ser ofuscado ou aplicar hash, o atributo ao qual a regra de ofuscação foi aplicada será dropped e substituído por um texto indicando por que o atributo foi eliminado. Por exemplo, se a regra de ofuscação for aplicada ao campo message e o limite de CPU por minuto for atingido, o log resultante será semelhante a este:
{
...
"message":"<OBFUSCATION> The account is over its obfuscation per-minute limit, attribute dropped",
...
}
Isso evita que PII ou outros dados confidenciais sejam ingeridos inadvertidamente.
Além disso, o seguinte `NrIntegrationError' será registrado na conta:
{
"category":"RateLimit",
"level":"error",
"limitName":"Log API obfuscation per account per minute",
"message":"You’ve exceeded our limit of per-account obfuscation time per-minute for the Log ingestion pipeline. Please reduce your usage or contact New Relic support.",
"name":"ObfuscationTimeLimitReached",
"newRelicFeature":"Logs",
"rateLimitType":"ObfuscationTimePerMinute",
"timestamp":1678819264283
}
Para avaliar o desempenho da sua regra de ofuscação e ver quais estão sendo ignoradas, acesse Logs Obfuscation > Health. regra de ofuscação consomem muita CPU, portanto, esses gráficos podem ajudá-lo a decidir quais regras são mais afetadas por quaisquer limitações de recursos.
Expressão de ofuscação
Você pode criar, ler, atualizar ou excluir expressão de ofuscação usando a interface New Relic ou usando o NerdGraph, nosso GraphQL Explorer.
one.newrelic.com > All capabilities > Logs > Obfuscation: Primeiro crie uma ou mais expressões de ofuscação, depois crie sua regra de ofuscação.
Use uma destas opções para criar uma expressão de ofuscação:
Insira um nome para sua nova regra de ofuscação, bem como uma expressão regular que corresponda aos dados confidenciais que você deseja capturar. Use a sintaxe RE2.
O exemplo a seguir mostra uma expressão de ofuscação básica que corresponderá aos números de cartão de crédito:
Using NerdGraph:
Use a mutação logConfigurationsCreateObfuscationExpression em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
Importante
Você deve escapar das expressões regulares ao usá-las no NerdGraph. Por exemplo: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
Use uma destas opções para consultar uma expressão de ofuscação:
para visualizar todas as expressões de ofuscação disponíveis e suas definições.
Using NerdGraph:
Use o buscador obfuscationExpressions em actor.account.logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
Use uma destas opções para atualizar uma expressão de ofuscação:
Clique no ícone de reticências ... no lado direito da expressão de ofuscação que deseja editar e clique em Edit.
Modifique os campos conforme necessário e clique em Update.
Using NerdGraph:
Use a mutação logConfigurationsUpdateObfuscationExpression em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
Importante
Você deve escapar das expressões regulares ao usá-las no NerdGraph. Por exemplo: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
Você não precisa especificar todos os campos de uma expressão de ofuscação ao atualizá-la, apenas o id (obrigatório) e os campos que deseja modificar.
Importante
Você não poderá excluir uma expressão de ofuscação se ela estiver sendo usada por uma regra de ofuscação.
Use uma destas opções para excluir uma expressão de ofuscação:
Clique no ícone de reticências ... no lado direito da expressão de ofuscação que você deseja excluir e clique em Delete.
Confirme que deseja excluir a expressão clicando em Delete.
Using NerdGraph:
Use a mutação logConfigurationsDeleteObfuscationExpression em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
A mutação retornará um instantâneo da expressão antes de ser excluída.
Exemplos de expressões
Abaixo, fornecemos alguns exemplos de expressões regex para ofuscar alguns dos tipos de dados confidenciais mais comuns. A expressão de ofuscação deve ser criada para cada conta New Relic onde essas expressões serão usadas.
Dica
Os exemplos a seguir são expressões regulares que você pode usar na interface. Para usá-los no GraphQL, você precisa escapá-los conforme mostrado neste exemplo.
Insira um nome para sua nova regra de ofuscação, bem como um critério de correspondência (no formato NRQL ) para capturar o conjunto de log de destino que você deseja ofuscar.
Adicione um novo actions (o primeiro é adicionado automaticamente) para especificar a expressão de ofuscação (regex) para capturar cada conjunto de atributos, bem como se deve MASK ou HASH eles.
Vários atributos podem ser especificados separados por vírgula.
MASK substituirá todos os caracteres correspondentes por Xes. Se você usar MASK, não poderá consultar um valor ofuscado específico posteriormente.
HASH substituirá os dados confidenciais pelo valor de hash SHA-256 aplicar. Se você usar HASH, poderá consultá-los usando nossa ferramenta de hashing, desde que saiba seu valor em texto simples.
Sua regra deve ser semelhante a esta:
Clique em Create rule para criar e ativar sua regra de ofuscação.
Using NerdGraph:
Use a mutação logConfigurationsCreateObfuscationRule em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
Importante
Você deve especificar a ofuscação expressionId para vinculá-la a uma determinada ação de ofuscação. Para recuperar esse id, você pode consultar o obfuscationRules.
Use qualquer uma destas opções para consultar uma regra de ofuscação:
Selecione a aba Rules (padrão) para visualizar todas as regras de ofuscação disponíveis e suas definições.
Using NerdGraph:
Use o buscador obfuscationRules em actor.account.logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql
Use uma destas opções para atualizar uma regra de ofuscação:
Clique no ícone de reticências ... no lado direito da regra de ofuscação que você deseja editar e clique em Edit.
Modifique os campos conforme necessário e clique em Update rule.
Using NerdGraph:
Use a mutação logConfigurationsUpdateObfuscationRule em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
Importante
Você deve especificar a ofuscação expressionId para vinculá-la a uma determinada ação de ofuscação. Para recuperar este id, você pode usar o obfuscationRules, conforme descrito em [consulta o obfuscationRules]](#rules-read).
Você não precisa especificar todos os campos de uma regra de ofuscação ao atualizá-la, apenas o id (obrigatório) e os campos que deseja modificar. Aqui está um exemplo para atualizar apenas o nome.
Use uma destas opções para excluir uma regra de ofuscação:
Clique no ícone de reticências ... no lado direito da regra de ofuscação que você deseja excluir e clique em Delete.
Confirme que deseja excluir a expressão clicando em Delete.
Using NerdGraph:
Use a mutação logConfigurationsDeleteObfuscationRule em logConfigurations. Consulte o exemplo preenchido no GraphiQL, bem como a documentação relacionada em api.newrelic.com/graphiql.
A mutação retornará um instantâneo da regra antes de ser excluída.