Настройка прав доступа Grail для распределенных трассировок
Ключ-АСТРОМ использует модель разрешений для Grail. Это относится ко всем телеметрическим данным, таким как метрики, события, диапазоны и логи.
Мы рекомендуем настраивать права доступа в соответствии с организационными рамками и областями развертывания. Подходящие концепции включают группы хостов, кластеры Kubernetes и пространства имен Kubernetes. Эти атрибуты обычно доступны для всех телеметрических данных, получаемых с помощью методов сбора данных Ключ-АСТРОМ, таких как ЕдиныйАгент, OpenTelemetry или Kubernetes Operator. Следовательно, вы можете использовать эти атрибуты для включения прав доступа на уровне записей .
Для развертываний на основе Kubernetes убедитесь, что в Ключ-АСТРОМ Operator включено обогащение метаданных.
Если вам требуется лишь базовая концепция разрешений, лучшим вариантом будет настройка разрешений на уровне сегмента (bucket). Затем вы сможете направлять свои данные в нужный сегмент в OpenPipeline, сопоставляя их с одним из упомянутых основных полей Grail, имеющих отношение к развертыванию.
Для более точного управления в Ключ-АСТРОМ можно настроить границы политик с более детальными ограничениями на уровне данных. По умолчанию можно использовать следующие атрибуты:
dt.host_group.idk8s.cluster.namek8s.namespace.name- Любой другой атрибут, указанный в модели разрешений.
Ключ-АСТРОМ предоставляет комплексную модель разрешений для Grail, которая применяется ко всем телеметрическим данным, включая метрики, логи, диапазоны и события.
Настройте контекст безопасности
Если прав доступа к атрибутам уровня развертывания или уровня корзины недостаточно, Ключ-АСТРОМ позволяет настроить более детальные права доступа, добавив атрибут dt.security_context к вашим данным. Этот контекст может представлять вашу архитектуру безопасности и даже быть иерархическим, если закодировать его в строку, например: department-A/department-AB/team-C.
Используйте существующие теги в источнике
Контекст безопасности можно определить на уровне источника с помощью меток или аннотаций ЕдиногоАгента, OpenTelemetry или Kubernetes. Это позволяет использовать существующие метки и теги для управления правами доступа в Ключ-АСТРОМ.
Настройте контекст безопасности в OpenPipeline
В качестве альтернативы вы можете определить контекст безопасности на основе существующих атрибутов ресурсов для ваших данных трассировки в OpenPipeline:
1. Отфильтруйте записи, которым следует добавить атрибут dt.security_context. Для этого откройте новый блокнот и создайте фильтрующий DQL-запрос, например:
| fetch spans
| filter matchesPhrase(deployment.release_stage, "prod-") |
Этот запрос позволяет отфильтровать записи с атрибутом span, к которым вы хотите добавить атрибут dt.security_context. После того, как вы будете удовлетворены результатом запроса, скопируйте функцию обработки span из DQL-запроса, в данном случае: matchesPhrase(deployment.release_stage, "prod-").
2. Определите правило контекста безопасности spans, используя полученную функцию, и укажите значение атрибута dt.security_context. Значение атрибута dt.security_context может быть предоставленным вами литеральным значением или именем другого атрибута; это значение будет использоваться в качестве значения dt.security_context.
Рекомендации по разрешениям для распределенных трассировок
Как правило, для распределенной трассировки настраиваются права доступа, позволяющие пользователям видеть полную сквозную трассировку. Трассировки часто охватывают несколько сервисов, хостов или кластеров, и пересечение трассировок с ограничениями по правам доступа может привести к неполным или фрагментированным данным. Хотя аналитика трассировки на уровне сервисов пострадает меньше, и приложение распределенной трассировки будет работать нормально, потенциальная нехватка видимости повлияет на аналитику и устранение неполадок.
При настройке прав доступа для распределенной трассировки учитывайте следующие рекомендации:
- Избегайте «разрыва» трассировок — обеспечьте пользователям доступ ко всем спанам в рамках трассировки, которые релевантны их роли или этапу развёртывания, одновременно ограничив доступ к чувствительным сервисам. Поэтому настраивайте гибкие права доступа и избегайте границ, полностью ограничивающих доступ к спанам внутри трассировки: это может помешать всестороннему анализу. Например:
- предоставляйте доступ ко всем спанам на соответствующем этапе развёртывания (например, в среде тестирования или продуктивной среде);
- либо в пределах организационных единиц (например, отдела или географического региона);
- при этом ограничивайте доступ только к чувствительным сервисам (например, к системе единого входа — SSO).
- Используйте защиту на уровне полей для конфиденциальных данных — вместо ограничения доступа ко всем участкам трассировки или трассировкам, используйте защиту на уровне полей для защиты конфиденциальной информации.
- Ключ-АСТРОМ автоматически определяет выбранные атрибуты трассировки, заданные в глобальном справочнике полей, и запрашивает атрибуты, помеченные как конфиденциальные.
- Доступ к конфиденциальным полям
builtin-sensitive-spansиbuiltin-request-attributes-spansимеют только пользователи, обладающие соответствующими правами доступа . - Также можно определить пользовательские наборы полей для указания конфиденциальных атрибутов и области их применения.
- Используйте контекст безопасности для определения разрешений для отдельных записей трассировки — Ключ-АСТРОМ позволяет настраивать поступающие данные трассировки, добавляя атрибут
dt.security_contextк конкретным записям. Это позволяет устанавливать дополнительные параметры, такие как разрешения для отдельных записей. Для создания контекста безопасности для поступающих данных трассировки необходимо создать правило пайплайна.
Права доступа пользователей к распределенной трассировке
При работе с распределенной трассировкой убедитесь, что вы прочитали и установили все необходимые права доступа:
| Область действия политики | Права доступа |
|---|---|
| Чтение данных сегментов | storage:buckets:read
|
| Чтение данных спанов | storage:spans:read
|
| Чтение данных сущностей | storage:entities:read
|
| Чтение данных логов | storage:logs:read
|
| Чтение данных сегментов фильтра | storage:filter-segments:read
|
| Просмотр конфиденциальных полей, данные трассировки 1 2 | storage:fieldsets:read WHERE storage:fieldset-name="builtin-sensitive-spans
|
| Чтение состояний приложения пользователя | state:user-app-states:read
|
| Запись состояний пользовательского приложения | state:user-app-states:write
|
| Удаление состояний приложения пользователя | state:user-app-states:delete
|
1 Конфиденциальные атрибуты для спанов помечаются в соответствии с глобальной ссылкой на поле sensitive-spans.
2 Чтобы узнать больше об ограниченном доступе к персональным данным и атрибутам конфиденциальных запросов, см. раздел «Маскирование при отображении».