Безопасность и конфиденциальность данных Proto Observability
На этой странице
- Общая схема обработки данных
- Категории данных, которые могут содержатся в трейсах
- Обфускация данных на уровне Агента
- Обфускация данных на уровне Трейсеров (библиотек инструментации)
Общая схема обработки данных
Общая схема обработки данных выглядит следующим образом:
Приложение -> Трейсер ProtoOBP -> Агент ProtoOBP -> бэкенд ProtoOBP (self-hosted, on-premise)
Обфускация конфиденциальных данных предусмотрена как на уровне трейсера (библиотеки инструментации), так и на уровне Агента ProtoOBP. Большинство механизмов обфускации данных включены по умолчанию, также предоставляется возможность тонкой настройки дополнительных правил обфускации данных, в случае необходимости.
Категории данных, которые могут содержатся в трейсах
Трейсеры ProtoOBP собирают данные наблюдаемости о приложениях. Объем собираемых данных может зависеть от языка разработки. В данном разделе собрана информация о возможных категориях собираемых данных, о возможном конфиденциальном содержимом, и о том, какие механизмы применяются в продукте для минимизации сбора и обработки конфиденциальных данных по умолчанию.
Категория | Описание |
---|---|
Запросы к базам данных | Литерал, последовательность литералов или связующие переменные, используемые в выполняемом операторе базы данных. |
URI параметры | Значения параметров в переменной части пути URI или запроса URI. |
Параметры URI | Значения параметров в переменной части пути URI или запроса URI. |
Данные о пользователе в URI | Строка в URI, которая может содержать имя пользователя. |
Обфускация – замена строковых параметров на символ ?
.
В таблице ниже описано поведение по умолчанию каждого трейсера в отношении того, собирается ли категория данных и обфусцируется ли она по умолчанию.
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | ✅ |
Параметры URI | ✅ | |
Данные о пользователе в URI |
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | ✅ |
Параметры URI | ✅ | ✅ |
Данные о пользователе в URI |
Обратите внимание: Параметры URI по умолчанию выключены и должны быть явно включены.
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | |
Параметры URI | ✅ | ✅ |
Данные о пользователе в URI |
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | ✅ |
Параметры URI | ✅ | ✅ |
Данные о пользователе в URI | ✅ | ✅ |
Обратите внимание: Параметры URI по умолчанию выключены и должны быть явно включены.
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | ✅ |
Параметры URI | ✅ | ✅ |
Данные о пользователе в URI |
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | ✅ |
Параметры URI | ✅ | ✅ |
данные о пользователе в URI |
Обратите внимание: Запросы к базам данных обфусцируются на уровне Агента.
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ✅ | |
Путь в URI клиента | ✅ | |
Строка запроса в URI клиента | ✅ | |
Путь в URI на стороне сервера | ✅ | ✅ |
Строка запроса в URI на стороне сервера | ✅ | ✅ |
HTTP тело | ✅ | ✅ |
HTTP cookies | ✅ | ✅ |
HTTP заголовки | ✅ | ✅ |
Категория | Собирается | Обфусцируется |
---|---|---|
Запросы к базам данных | ||
Путь в URI клиента | ✅ | |
Строка запроса в URI клиента | ✅ | |
Путь в URI на стороне сервера | ||
Строка запроса в URI на стороне сервера | ||
HTTP тело | ||
HTTP cookies | ||
HTTP заголовки |
Обфускация данных на уровне Агента
Обфускация данных именах ресурсов
Спаны включают в себя атрибут “имя ресурса”, который может содержать конфиденциальную информацию. Агент ProtoOBP предоставляет возможности дополнительной обфускации имен ресурсов для следующий сценариев:
-
Числовые литералы SQL и переменные привязки обфусцируются: Например, следующий запрос
SELECT data FROM table WHERE key=123 LIMIT 10
обфусцируется доSELECT data FROM table WHERE key = ? LIMIT ?
перед тем, как установить значение тегаresource
для спана. -
Буквенные строки SQL обозначаются с помощью стандартных кавычек ANSI SQL: Это означает, что строки должны быть заключены в одинарные кавычки(
'
). Некоторые варианты SQL опционально поддерживают двойные кавычки ("
) для строк, но большинство рассматривает двойные кавычки как идентификаторы. Обфускатор ProtoOBP рассматривает их как идентификаторы, а не как строки, и не обфусцирует их. -
Запросы к Redis изменяются путем выбора только командных лексем: Например, следующий запрос
MULTI\nSET k1 v1\nSET k2 v2
преобразуется вMULTI SET SET
.
Обфускация данных в содержимом трейсов
Агент также обфусцирует конфиденциальные данные в трейсах, помимо имени ресурсов. Вы можете дополнительно настроить правила обфусцирования используя переменные окружения для агента или используя файл конфигурации агента (protobopp.yaml
).
Могут быть обфусцированы следующие данные:
- тело запроса MongoDB
- тело запроса ElasticSearch
- команда Redis
- команда MemCached
- HTTP URL
- стэк трейсы (stack traces)
Примечание: Обфускация может повлиять на производительность вашей системы, а также отредактировать важную информацию, которая не является конфиденциальной. Подумайте, какая обфускация вам нужна для вашей системы, и настройте конфигурацию соответствующим образом.
Примечание: Вы можете использовать автоматическую обфускацию для нескольких типов сервисов одновременно. Настройте каждый из них в секции obfuscation
вашего файла protoobp.yaml
.
Запрос к MongoDB (тип спанов – mongodb
) обфусцируются по умолчанию.
Пример обфусцированного значения:
{"$and":[{"status":{"$in":"?"}},{"type":{"$eq":"?"}},{"company_guid":{"$eq":"?"}},{"loading":{"$elemMatch":{"address":{"$regex":"?","$options":"?"},"is_unloading":"?"}}},{"base1c":{"$eq":"?"}}]}
Конфигурация (protoobp.yaml
):
apm_config:
enabled: true
## (...)
obfuscation:
mongodb:
## Настраивает правила обфускации для спано типа "mongodb". По умолчанию включено.
enabled: true
keep_values:
- document_id
- template_id
obfuscate_sql_values:
- val1
Это поведение можно отключить с помощью переменной окруженияPOBP_APM_OBFUSCATION_MONGODB_ENABLED=false
.
keep_values
или переменная окруженияPOBP_APM_OBFUSCATION_MONGODB_KEEP_VALUES
- определяет набор ключей, которые необходимо исключить из обфускации трейсов на агенте. Если значение не задано, все ключи обфусцируются.obfuscate_sql_values
или переменная окруженияPOBP_APM_OBFUSCATION_MONGODB_OBFUSCATE_SQL_VALUES
- определяет набор ключей для включения в обфускацию трейсов на агенте. Если значение не задано, все ключи обфусцируются.
Тело запросов к ElasticSearch (спаны с типом – elasticsearch
) обфусцируются по умолчанию.
apm_config:
enabled: true
## (...)
obfuscation:
elasticsearch:
## Настраивает правила обфускации для спанов типа "elasticsearch". По умолчанию включено.
enabled: true
keep_values:
- client_id
- product_id
obfuscate_sql_values:
- val1
Это поведение можно отключить с помощью переменной окружения POBP_APM_OBFUSCATION_ELASTICSEARCH_ENABLED=false
.
keep_values
или переменная окруженияPOBP_APM_OBFUSCATION_ELASTICSEARCH_KEEP_VALUES
- определяет набор ключей, которые необходимо исключить из обфускации трейсов на агенте. Если значение не задано, все ключи обфусцируются.obfuscate_sql_values
или переменная окруженияPOBP_APM_OBFUSCATION_ELASTICSEARCH_OBFUSCATE_SQL_VALUES
- определяет набор ключей для включения в обфускацию трейсов на агенте. Если значение не задано, все ключи обфусцируются.
Команды Redis (спаны с типом – redis
) обфусцируются по умолчанию.
apm_config:
enabled: true
## (...)
obfuscation:
## Настраивает правила обфускации для спанов типа "redis". Включено по умолчанию.
redis:
enabled: true
remove_all_args: true
Это поведение можно отключить с помощью переменной окружения POBP_APM_OBFUSCATION_REDIS_ENABLED=false
.
remove_all_args
или переменная окруженияPOBP_APM_OBFUSCATION_REDIS_REMOVE_ALL_ARGS
- заменяет все аргументы команды redis одним символом “?”, если значениеtrue
. По умолчанию отключено.
Команды MemCached (спаны типа – memcached
) обфусцируются по умолчанию.
apm_config:
enabled: true
## (...)
obfuscation:
memcached:
## Настраивает правила обфускации для спанов типа "memcached". Включено по умолчанию.
enabled: true
Это поведение можно отключить с помощью переменной окружения POBP_APM_OBFUSCATION_MEMCACHED_ENABLED=false
.
Значение тега HTTP URL внутри спанов типа http
или web
не обфусцируется по умолчанию.
Примечание: Пароли, содержащиеся в Userinfo URL, не собираются.
apm_config:
enabled: true
## (...)
obfuscation:
http:
## Включает обфускацию строк запросов в URL. По умолчанию отключена.
remove_query_string: true
remove_paths_with_digits: true
remove_query_string
или переменная окруженияPOBP_APM_OBFUSCATION_HTTP_REMOVE_QUERY_STRING
: Еслиtrue
, обфусцирует строки запросов в URL. (http.url
).remove_paths_with_digits
или переменная окруженияPOBP_APM_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS
: Еслиtrue
, сегменты пути в URL (http.url
), содержащие только цифры, заменяются на “?”.
По умолчанию отключено.
Установите параметр remove_stack_traces
в true
, чтобы удалить трассировки стека и заменить их на ?
.
apm_config:
enabled: true
## (...)
obfuscation:
## Включает удаление трассировок стека, чтобы заменить их на "?". По умолчанию отключена.
remove_stack_traces: true # по умолчанию false
Это также можно включить с помощью переменной окружения POBP_APM_OBFUSCATION_REMOVE_STACK_TRACES=true
.
Замена тегов
Чтобы удалить конфиденциальные данные из тегов ваших спанов, используйте настройку replace_tags
в конфигурационном файле protoobp.yaml
или переменную окружения POBP_APM_REPLACE_TAGS
. Значение настройки или переменной окружения представляет собой список из одной или нескольких групп параметров, определяющих способ замены чувствительных данных в тегах. К таким параметрам относятся:
name
: Ключ тега, который нужно заменить. Чтобы заменить все теги, используйте*
. Для имени ресурса используйтеresource.name
.pattern
: Шаблон regexp для сравнения.repl
: Строка замены.
Например:
apm_config:
replace_tags:
# Замените все символы, начиная со строки `token/` в теге "http.url", на "?".
- name: "http.url"
pattern: "token/(.*)"
repl: "?"
# Удалите конечный символ "/" в именах ресурсов
- name: "resource.name"
pattern: "(.*)\/$"
repl: "$1"
# Замените все вхождения "foo" в любом теге на "bar".
- name: "*"
pattern: "foo"
repl: "bar"
# Удалите все значения тега "error.stack"
- name: "error.stack"
pattern: "(?s).*"
# Замена ряда чисел в сообщениях об ошибках
- name: "error.msg"
pattern: "[0-9]{10}"
repl: "[REDACTED]"
POBP_APM_REPLACE_TAGS=[
{
"name": "http.url",
"pattern": "token/(.*)",
"repl": "?"
},
{
"name": "resource.name",
"pattern": "(.*)\/$",
"repl": "$1"
},
{
"name": "*",
"pattern": "foo",
"repl": "bar"
},
{
"name": "error.stack",
"pattern": "(?s).*"
},
{
"name": "error.msg",
"pattern": "[0-9]{10}",
"repl": "[REDACTED]"
}
]
Используйте переменную окружения POBP_APM_REPLACE_TAGS
:
- при установке через Helm, в
agents.containers.traceAgent.env
в вашем файлеvalues.yaml
- name: POBP_APM_REPLACE_TAGS
value: '[
{
"name": "http.url",
"pattern": "token/(.*)",
"repl": "?"
},
{
"name": "resource.name",
"pattern": "(.*)\/$",
"repl": "$1"
},
{
"name": "*",
"pattern": "foo",
"repl": "bar"
},
{
"name": "error.stack",
"pattern": "(?s).*"
},
{
"name": "error.msg",
"pattern": "[0-9]{10}",
"repl": "[REDACTED]"
}
]'
Примеры
Helm:
agents:
containers:
traceAgent:
env:
- name: POBP_APM_REPLACE_TAGS
value: '[
{
"name": "http.url",
# (...)
]'
- POBP_APM_REPLACE_TAGS=[{"name":"http.url","pattern":"token/(.*)","repl":"?"},{"name":"resource.name","pattern":"(.*)\/$","repl":"$1"},{"name":"*","pattern":"foo","repl":"bar"},{"name":"error.stack","pattern":"(?s).*"},{"name":"error.msg","pattern":"[0-9]{10}","repl":"[REDACTED]"}]
Игнорирование ресурсов
Если ваши сервисы включают синтетический трафик, например, healthchecks, вы можете исключить эти трейсы из собираемых, чтобы метрики для ваших сервисов отражали именно продуктивный трафик, а не синтетический.
Агент может быть настроен на исключение определенных имен ресурсов из трейсов. Чтобы предотвратить отправку трейсов с определенными ресурсами, используйте параметр ignore_resources
в файле protoobp.yaml
. Затем создайте список из одного или нескольких регулярных выражений, указывающих, какие ресурсы Агент должен отфильтровать на основе их названия.
Если вы работаете в контейнерной среде, установите переменную окружения POBP_APM_IGNORE_RESOURCES
для контейнера с агентом ProtoOBP.
###### ignore_resources: ["(GET|POST) /healthcheck","API::NotesController#index"]
Обфускация данных на уровне Трейсеров (библиотек инструментации)
HTTP
ProtoOBP стандартизирует семантику тегов спанов во всех библиотеках трассировки. Информация из HTTP-запросов добавляется в виде тегов с префиксом http.
. Библиотеки имеют следующие опции конфигурации для контроля конфиденциальных данных собираемых в HTTP-тегах.
Изменение query strings
Тегу http.url
присваивается полное значение URL, включая строку запроса. Строка запроса может содержать конфиденциальные данные, поэтому по умолчанию ProtoOBP анализирует ее и редактирует подозрительно выглядящие значения. Этот процесс редактирования можно настраивать. Чтобы изменить регулярное выражение, используемое для редактирования, установите переменную окружения POBP_TRACE_OBFUSCATION_QUERY_STRING_REGEXP
на правильный regex по вашему выбору. Валидный regex зависит от платформы. Когда regex находит подозрительную пару ключ-значение, он заменяет ее на <redacted>
.
Если вы не хотите собирать строку запроса, установите переменную окружения POBP_HTTP_SERVER_TAG_QUERY_STRING
в значение false
. По умолчанию используется значение true
.
Сбор HTTP заголовков
Чтобы собирать значения HTTP заголовков в теги трейсов, установите переменную окружения POBP_TRACE_HEADER_TAGS
с картой ключей заголовков в имена тегов (не зависят от регистра). Трейсер применяет совпадающие значения заголовков в качестве тегов к корневым спанам. Параметр также принимает записи без указанного имени тега, например:
POBP_TRACE_HEADER_TAGS=CASE-insensitive-Header:my-tag-name,User-ID:userId,My-Header-And-Tag-Name